Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
ba82762
Disable redundant_type_annotation rule in SwiftLint configuration
ctreffs Aug 24, 2026
88cb41e
docs: add SwiftLint issues worklist
ctreffs Aug 24, 2026
ba41d5b
style: fix let_var_whitespace warning in Quat.swift
ctreffs Aug 24, 2026
f42defc
style: fix opening_brace warnings in MatrixStorage+SIMD.swift
ctreffs Aug 24, 2026
4873c7f
style: fix computed_accessors_order warnings in QuaternionStorage+NO_…
ctreffs Aug 24, 2026
763a03d
style: fix multiline_arguments warnings in matrix.swift
ctreffs Aug 24, 2026
2c0f192
refactor: fix identical_operands warnings in sign.swift using isNaN
ctreffs Aug 24, 2026
3eabdc5
style: fix todo warning in MatrixStorage+NO_SIMD.swift
ctreffs Aug 24, 2026
25f751f
style: fix attributes warnings across matrix and quaternion types
ctreffs Aug 24, 2026
6022e9e
style: replace blanket swiftlint disable with scoped disable:next
ctreffs Aug 24, 2026
949523f
refactor: group orthographic projection parameters into bounds tuple
ctreffs Aug 24, 2026
7c1e7df
Revert "refactor: group orthographic projection parameters into bound…
ctreffs Aug 24, 2026
2395765
style: suppress function_parameter_count for orthographic projection …
ctreffs Aug 24, 2026
3a95f9d
style: suppress large_tuple warning for 3x3 matrix column properties
ctreffs Aug 24, 2026
2f85272
style: suppress file_length warning in Matrix+Multiplication.swift
ctreffs Aug 24, 2026
50431c3
style: fix identifier_name warnings by expanding single-letter parame…
ctreffs Aug 24, 2026
384e05c
style: declare operator functions as static methods in type extensions
ctreffs Aug 24, 2026
355e358
style: refine inline swiftlint disable comments across matrix types
ctreffs Aug 24, 2026
273ad67
chore: remove temporary SWIFTLINT_ISSUES.md worklist
ctreffs Aug 24, 2026
05b02f0
Dedicated lines
ctreffs Aug 24, 2026
0b271e0
build: disable redundantType and wrapMultilineStatementBraces in .swi…
ctreffs Aug 24, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .swiftformat
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
--commas inline
--disable opaqueGenericParameters
--disable preferKeyPath
--disable redundantType
--disable wrapMultilineStatementBraces
--exclude .build,.github,.swiftpm,Scripts
--extensionacl on-declarations
--header strip
Expand Down
10 changes: 5 additions & 5 deletions .swiftlint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@ opt_in_rules:
#- required_deinit
#- type_contents_order
#- unowned_variable_capture
- anyobject_protocol
- array_init
- attributes
- closure_body_length
Expand All @@ -48,7 +47,6 @@ opt_in_rules:
- enum_case_associated_values_count
- expiring_todo
- explicit_init
- explicit_self
- explicit_top_level_acl
- fallthrough
- fatal_error_message
Expand Down Expand Up @@ -95,7 +93,6 @@ opt_in_rules:
- raw_value_for_camel_cased_codable_enum
- reduce_into
- redundant_nil_coalescing
- redundant_type_annotation
- required_enum_case
- single_test_class
- sorted_first_last
Expand All @@ -109,11 +106,14 @@ opt_in_rules:
- unavailable_function
- unneeded_parentheses_in_closure_argument
- untyped_error_in_catch
- unused_declaration
- unused_import
- vertical_parameter_alignment_on_call
- vertical_whitespace_between_cases
- vertical_whitespace_closing_braces
- vertical_whitespace_opening_braces
- xct_specific_matcher
- yoda_condition

analyzer_rules:
- explicit_self
- unused_declaration
- unused_import
26 changes: 20 additions & 6 deletions Sources/FirebladeMath/Constants.swift
Original file line number Diff line number Diff line change
@@ -1,21 +1,35 @@
/// Factor to convert degrees to radians (Double).
@inlinable public var kDegreeToRadians64: Double { Double.pi / 180.0 }
@inlinable public var kDegreeToRadians64: Double {
Double.pi / 180.0
}

/// Factor to convert degrees to radians (Float).
@inlinable public var kDegreeToRadians32: Float { Float(Double.pi / 180.0) }
@inlinable public var kDegreeToRadians32: Float {
Float(Double.pi / 180.0)
}

/// Factor to convert radians to degrees (Double).
@inlinable public var kRadiansToDegree64: Double { 180.0 / Double.pi }
@inlinable public var kRadiansToDegree64: Double {
180.0 / Double.pi
}

/// Factor to convert radians to degrees (Float).
@inlinable public var kRadiansToDegree32: Float { Float(180.0 / Double.pi) }
@inlinable public var kRadiansToDegree32: Float {
Float(180.0 / Double.pi)
}

/// Extension to add constants to Float.
extension Float {
/// Half of Pi (π/2).
@inlinable public static var halfPi: Float { Float.pi * 0.5 }
@inlinable public static var halfPi: Float {
Float.pi * 0.5
}
}

/// Extension to add constants to Double.
extension Double {
/// Half of Pi (π/2).
@inlinable public static var halfPi: Double { Double.pi * 0.5 }
@inlinable public static var halfPi: Double {
Double.pi * 0.5
}
}
150 changes: 107 additions & 43 deletions Sources/FirebladeMath/Functions/adjugate.swift
Original file line number Diff line number Diff line change
Expand Up @@ -41,62 +41,126 @@ public func adjugate(_ inMat: Mat3x3d) -> Mat3x3d {
}

/// Computes the adjugate of a 4x4 matrix.
/// - Parameter m: The input matrix.
/// - Parameter matrix: The input matrix.
/// - Returns: The adjugate of the input matrix.
public func adjugate(_ m: Mat4x4f) -> Mat4x4f {
public func adjugate(_ matrix: Mat4x4f) -> Mat4x4f {
// Adjugate is the transpose of the cofactor matrix.
// cofactor(i, j) = (-1)^(i+j) * minor(i, j)
// Here we use m[col, row] indexing.
// Here we use matrix[col, row] indexing.
var res = Mat4x4f.identity

res[0, 0] = m[1, 1] * (m[2, 2] * m[3, 3] - m[2, 3] * m[3, 2]) - m[2, 1] * (m[1, 2] * m[3, 3] - m[1, 3] * m[3, 2]) + m[3, 1] * (m[1, 2] * m[2, 3] - m[1, 3] * m[2, 2])
res[1, 0] = -(m[1, 0] * (m[2, 2] * m[3, 3] - m[2, 3] * m[3, 2]) - m[2, 0] * (m[1, 2] * m[3, 3] - m[1, 3] * m[3, 2]) + m[3, 0] * (m[1, 2] * m[2, 3] - m[1, 3] * m[2, 2]))
res[2, 0] = m[1, 0] * (m[2, 1] * m[3, 3] - m[2, 3] * m[3, 1]) - m[2, 0] * (m[1, 1] * m[3, 3] - m[1, 3] * m[3, 1]) + m[3, 0] * (m[1, 1] * m[2, 3] - m[1, 3] * m[2, 1])
res[3, 0] = -(m[1, 0] * (m[2, 1] * m[3, 2] - m[2, 2] * m[3, 1]) - m[2, 0] * (m[1, 1] * m[3, 2] - m[1, 2] * m[3, 1]) + m[3, 0] * (m[1, 1] * m[2, 2] - m[1, 2] * m[2, 1]))

res[0, 1] = -(m[0, 1] * (m[2, 2] * m[3, 3] - m[2, 3] * m[3, 2]) - m[2, 1] * (m[0, 2] * m[3, 3] - m[0, 3] * m[3, 2]) + m[3, 1] * (m[0, 2] * m[2, 3] - m[0, 3] * m[2, 2]))
res[1, 1] = m[0, 0] * (m[2, 2] * m[3, 3] - m[2, 3] * m[3, 2]) - m[2, 0] * (m[0, 2] * m[3, 3] - m[0, 3] * m[3, 2]) + m[3, 0] * (m[0, 2] * m[2, 3] - m[0, 3] * m[2, 2])
res[2, 1] = -(m[0, 0] * (m[2, 1] * m[3, 3] - m[2, 3] * m[3, 1]) - m[2, 0] * (m[0, 1] * m[3, 3] - m[0, 3] * m[3, 1]) + m[3, 0] * (m[0, 1] * m[2, 3] - m[0, 3] * m[2, 1]))
res[3, 1] = m[0, 0] * (m[2, 1] * m[3, 2] - m[2, 2] * m[3, 1]) - m[2, 0] * (m[0, 1] * m[3, 2] - m[0, 2] * m[3, 1]) + m[3, 0] * (m[0, 1] * m[2, 2] - m[0, 2] * m[2, 1])

res[0, 2] = m[0, 1] * (m[1, 2] * m[3, 3] - m[1, 3] * m[3, 2]) - m[1, 1] * (m[0, 2] * m[3, 3] - m[0, 3] * m[3, 2]) + m[3, 1] * (m[0, 2] * m[1, 3] - m[0, 3] * m[1, 2])
res[1, 2] = -(m[0, 0] * (m[1, 2] * m[3, 3] - m[1, 3] * m[3, 2]) - m[1, 0] * (m[0, 2] * m[3, 3] - m[0, 3] * m[3, 2]) + m[3, 0] * (m[0, 2] * m[1, 3] - m[0, 3] * m[1, 2]))
res[2, 2] = m[0, 0] * (m[1, 1] * m[3, 3] - m[1, 3] * m[3, 1]) - m[1, 0] * (m[0, 1] * m[3, 3] - m[0, 3] * m[3, 1]) + m[3, 0] * (m[0, 1] * m[1, 3] - m[0, 3] * m[1, 1])
res[3, 2] = -(m[0, 0] * (m[1, 1] * m[3, 2] - m[1, 2] * m[3, 1]) - m[1, 0] * (m[0, 1] * m[3, 2] - m[0, 2] * m[3, 1]) + m[3, 0] * (m[0, 1] * m[1, 2] - m[0, 2] * m[1, 1]))

res[0, 3] = -(m[0, 1] * (m[1, 2] * m[2, 3] - m[1, 3] * m[2, 2]) - m[1, 1] * (m[0, 2] * m[2, 3] - m[0, 3] * m[2, 2]) + m[2, 1] * (m[0, 2] * m[1, 3] - m[0, 3] * m[1, 2]))
res[1, 3] = m[0, 0] * (m[1, 2] * m[2, 3] - m[1, 3] * m[2, 2]) - m[1, 0] * (m[0, 2] * m[2, 3] - m[0, 3] * m[2, 2]) + m[2, 0] * (m[0, 2] * m[1, 3] - m[0, 3] * m[1, 2])
res[2, 3] = -(m[0, 0] * (m[1, 1] * m[2, 3] - m[1, 3] * m[2, 1]) - m[1, 0] * (m[0, 1] * m[2, 3] - m[0, 3] * m[2, 1]) + m[2, 0] * (m[0, 1] * m[1, 3] - m[0, 3] * m[1, 1]))
res[3, 3] = m[0, 0] * (m[1, 1] * m[2, 2] - m[1, 2] * m[2, 1]) - m[1, 0] * (m[0, 1] * m[2, 2] - m[0, 2] * m[2, 1]) + m[2, 0] * (m[0, 1] * m[1, 2] - m[0, 2] * m[1, 1])
res[0, 0] = matrix[1, 1] * (matrix[2, 2] * matrix[3, 3] - matrix[2, 3] * matrix[3, 2])
- matrix[2, 1] * (matrix[1, 2] * matrix[3, 3] - matrix[1, 3] * matrix[3, 2])
+ matrix[3, 1] * (matrix[1, 2] * matrix[2, 3] - matrix[1, 3] * matrix[2, 2])
res[1, 0] = -(matrix[1, 0] * (matrix[2, 2] * matrix[3, 3] - matrix[2, 3] * matrix[3, 2])
- matrix[2, 0] * (matrix[1, 2] * matrix[3, 3] - matrix[1, 3] * matrix[3, 2])
+ matrix[3, 0] * (matrix[1, 2] * matrix[2, 3] - matrix[1, 3] * matrix[2, 2]))
res[2, 0] = matrix[1, 0] * (matrix[2, 1] * matrix[3, 3] - matrix[2, 3] * matrix[3, 1])
- matrix[2, 0] * (matrix[1, 1] * matrix[3, 3] - matrix[1, 3] * matrix[3, 1])
+ matrix[3, 0] * (matrix[1, 1] * matrix[2, 3] - matrix[1, 3] * matrix[2, 1])
res[3, 0] = -(matrix[1, 0] * (matrix[2, 1] * matrix[3, 2] - matrix[2, 2] * matrix[3, 1])
- matrix[2, 0] * (matrix[1, 1] * matrix[3, 2] - matrix[1, 2] * matrix[3, 1])
+ matrix[3, 0] * (matrix[1, 1] * matrix[2, 2] - matrix[1, 2] * matrix[2, 1]))

res[0, 1] = -(matrix[0, 1] * (matrix[2, 2] * matrix[3, 3] - matrix[2, 3] * matrix[3, 2])
- matrix[2, 1] * (matrix[0, 2] * matrix[3, 3] - matrix[0, 3] * matrix[3, 2])
+ matrix[3, 1] * (matrix[0, 2] * matrix[2, 3] - matrix[0, 3] * matrix[2, 2]))
res[1, 1] = matrix[0, 0] * (matrix[2, 2] * matrix[3, 3] - matrix[2, 3] * matrix[3, 2])
- matrix[2, 0] * (matrix[0, 2] * matrix[3, 3] - matrix[0, 3] * matrix[3, 2])
+ matrix[3, 0] * (matrix[0, 2] * matrix[2, 3] - matrix[0, 3] * matrix[2, 2])
res[2, 1] = -(matrix[0, 0] * (matrix[2, 1] * matrix[3, 3] - matrix[2, 3] * matrix[3, 1])
- matrix[2, 0] * (matrix[0, 1] * matrix[3, 3] - matrix[0, 3] * matrix[3, 1])
+ matrix[3, 0] * (matrix[0, 1] * matrix[2, 3] - matrix[0, 3] * matrix[2, 1]))
res[3, 1] = matrix[0, 0] * (matrix[2, 1] * matrix[3, 2] - matrix[2, 2] * matrix[3, 1])
- matrix[2, 0] * (matrix[0, 1] * matrix[3, 2] - matrix[0, 2] * matrix[3, 1])
+ matrix[3, 0] * (matrix[0, 1] * matrix[2, 2] - matrix[0, 2] * matrix[2, 1])

res[0, 2] = matrix[0, 1] * (matrix[1, 2] * matrix[3, 3] - matrix[1, 3] * matrix[3, 2])
- matrix[1, 1] * (matrix[0, 2] * matrix[3, 3] - matrix[0, 3] * matrix[3, 2])
+ matrix[3, 1] * (matrix[0, 2] * matrix[1, 3] - matrix[0, 3] * matrix[1, 2])
res[1, 2] = -(matrix[0, 0] * (matrix[1, 2] * matrix[3, 3] - matrix[1, 3] * matrix[3, 2])
- matrix[1, 0] * (matrix[0, 2] * matrix[3, 3] - matrix[0, 3] * matrix[3, 2])
+ matrix[3, 0] * (matrix[0, 2] * matrix[1, 3] - matrix[0, 3] * matrix[1, 2]))
res[2, 2] = matrix[0, 0] * (matrix[1, 1] * matrix[3, 3] - matrix[1, 3] * matrix[3, 1])
- matrix[1, 0] * (matrix[0, 1] * matrix[3, 3] - matrix[0, 3] * matrix[3, 1])
+ matrix[3, 0] * (matrix[0, 1] * matrix[1, 3] - matrix[0, 3] * matrix[1, 1])
res[3, 2] = -(matrix[0, 0] * (matrix[1, 1] * matrix[3, 2] - matrix[1, 2] * matrix[3, 1])
- matrix[1, 0] * (matrix[0, 1] * matrix[3, 2] - matrix[0, 2] * matrix[3, 1])
+ matrix[3, 0] * (matrix[0, 1] * matrix[1, 2] - matrix[0, 2] * matrix[1, 1]))

res[0, 3] = -(matrix[0, 1] * (matrix[1, 2] * matrix[2, 3] - matrix[1, 3] * matrix[2, 2])
- matrix[1, 1] * (matrix[0, 2] * matrix[2, 3] - matrix[0, 3] * matrix[2, 2])
+ matrix[2, 1] * (matrix[0, 2] * matrix[1, 3] - matrix[0, 3] * matrix[1, 2]))
res[1, 3] = matrix[0, 0] * (matrix[1, 2] * matrix[2, 3] - matrix[1, 3] * matrix[2, 2])
- matrix[1, 0] * (matrix[0, 2] * matrix[2, 3] - matrix[0, 3] * matrix[2, 2])
+ matrix[2, 0] * (matrix[0, 2] * matrix[1, 3] - matrix[0, 3] * matrix[1, 2])
res[2, 3] = -(matrix[0, 0] * (matrix[1, 1] * matrix[2, 3] - matrix[1, 3] * matrix[2, 1])
- matrix[1, 0] * (matrix[0, 1] * matrix[2, 3] - matrix[0, 3] * matrix[2, 1])
+ matrix[2, 0] * (matrix[0, 1] * matrix[1, 3] - matrix[0, 3] * matrix[1, 1]))
res[3, 3] = matrix[0, 0] * (matrix[1, 1] * matrix[2, 2] - matrix[1, 2] * matrix[2, 1])
- matrix[1, 0] * (matrix[0, 1] * matrix[2, 2] - matrix[0, 2] * matrix[2, 1])
+ matrix[2, 0] * (matrix[0, 1] * matrix[1, 2] - matrix[0, 2] * matrix[1, 1])

return res
}

/// Computes the adjugate of a 4x4 matrix.
/// - Parameter m: The input matrix.
/// - Parameter matrix: The input matrix.
/// - Returns: The adjugate of the input matrix.
public func adjugate(_ m: Mat4x4d) -> Mat4x4d {
public func adjugate(_ matrix: Mat4x4d) -> Mat4x4d {
var res = Mat4x4d.identity

res[0, 0] = m[1, 1] * (m[2, 2] * m[3, 3] - m[2, 3] * m[3, 2]) - m[2, 1] * (m[1, 2] * m[3, 3] - m[1, 3] * m[3, 2]) + m[3, 1] * (m[1, 2] * m[2, 3] - m[1, 3] * m[2, 2])
res[1, 0] = -(m[1, 0] * (m[2, 2] * m[3, 3] - m[2, 3] * m[3, 2]) - m[2, 0] * (m[1, 2] * m[3, 3] - m[1, 3] * m[3, 2]) + m[3, 0] * (m[1, 2] * m[2, 3] - m[1, 3] * m[2, 2]))
res[2, 0] = m[1, 0] * (m[2, 1] * m[3, 3] - m[2, 3] * m[3, 1]) - m[2, 0] * (m[1, 1] * m[3, 3] - m[1, 3] * m[3, 1]) + m[3, 0] * (m[1, 1] * m[2, 3] - m[1, 3] * m[2, 1])
res[3, 0] = -(m[1, 0] * (m[2, 1] * m[3, 2] - m[2, 2] * m[3, 1]) - m[2, 0] * (m[1, 1] * m[3, 2] - m[1, 2] * m[3, 1]) + m[3, 0] * (m[1, 1] * m[2, 2] - m[1, 2] * m[2, 1]))

res[0, 1] = -(m[0, 1] * (m[2, 2] * m[3, 3] - m[2, 3] * m[3, 2]) - m[2, 1] * (m[0, 2] * m[3, 3] - m[0, 3] * m[3, 2]) + m[3, 1] * (m[0, 2] * m[2, 3] - m[0, 3] * m[2, 2]))
res[1, 1] = m[0, 0] * (m[2, 2] * m[3, 3] - m[2, 3] * m[3, 2]) - m[2, 0] * (m[0, 2] * m[3, 3] - m[0, 3] * m[3, 2]) + m[3, 0] * (m[0, 2] * m[2, 3] - m[0, 3] * m[2, 2])
res[2, 1] = -(m[0, 0] * (m[2, 1] * m[3, 3] - m[2, 3] * m[3, 1]) - m[2, 0] * (m[0, 1] * m[3, 3] - m[0, 3] * m[3, 1]) + m[3, 0] * (m[0, 1] * m[2, 3] - m[0, 3] * m[2, 1]))
res[3, 1] = m[0, 0] * (m[2, 1] * m[3, 2] - m[2, 2] * m[3, 1]) - m[2, 0] * (m[0, 1] * m[3, 2] - m[0, 2] * m[3, 1]) + m[3, 0] * (m[0, 1] * m[2, 2] - m[0, 2] * m[2, 1])

res[0, 2] = m[0, 1] * (m[1, 2] * m[3, 3] - m[1, 3] * m[3, 2]) - m[1, 1] * (m[0, 2] * m[3, 3] - m[0, 3] * m[3, 2]) + m[3, 1] * (m[0, 2] * m[1, 3] - m[0, 3] * m[1, 2])
res[1, 2] = -(m[0, 0] * (m[1, 2] * m[3, 3] - m[1, 3] * m[3, 2]) - m[1, 0] * (m[0, 2] * m[3, 3] - m[0, 3] * m[3, 2]) + m[3, 0] * (m[0, 2] * m[1, 3] - m[0, 3] * m[1, 2]))
res[2, 2] = m[0, 0] * (m[1, 1] * m[3, 3] - m[1, 3] * m[3, 1]) - m[1, 0] * (m[0, 1] * m[3, 3] - m[0, 3] * m[3, 1]) + m[3, 0] * (m[0, 1] * m[1, 3] - m[0, 3] * m[1, 1])
res[3, 2] = -(m[0, 0] * (m[1, 1] * m[3, 2] - m[1, 2] * m[3, 1]) - m[1, 0] * (m[0, 1] * m[3, 2] - m[0, 2] * m[3, 1]) + m[3, 0] * (m[0, 1] * m[1, 2] - m[0, 2] * m[1, 1]))

res[0, 3] = -(m[0, 1] * (m[1, 2] * m[2, 3] - m[1, 3] * m[2, 2]) - m[1, 1] * (m[0, 2] * m[2, 3] - m[0, 3] * m[2, 2]) + m[2, 1] * (m[0, 2] * m[1, 3] - m[0, 3] * m[1, 2]))
res[1, 3] = m[0, 0] * (m[1, 2] * m[2, 3] - m[1, 3] * m[2, 2]) - m[1, 0] * (m[0, 2] * m[2, 3] - m[0, 3] * m[2, 2]) + m[2, 0] * (m[0, 2] * m[1, 3] - m[0, 3] * m[1, 2])
res[2, 3] = -(m[0, 0] * (m[1, 1] * m[2, 3] - m[1, 3] * m[2, 1]) - m[1, 0] * (m[0, 1] * m[2, 3] - m[0, 3] * m[2, 1]) + m[2, 0] * (m[0, 1] * m[1, 3] - m[0, 3] * m[1, 1]))
res[3, 3] = m[0, 0] * (m[1, 1] * m[2, 2] - m[1, 2] * m[2, 1]) - m[1, 0] * (m[0, 1] * m[2, 2] - m[0, 2] * m[2, 1]) + m[2, 0] * (m[0, 1] * m[1, 2] - m[0, 2] * m[1, 1])
res[0, 0] = matrix[1, 1] * (matrix[2, 2] * matrix[3, 3] - matrix[2, 3] * matrix[3, 2])
- matrix[2, 1] * (matrix[1, 2] * matrix[3, 3] - matrix[1, 3] * matrix[3, 2])
+ matrix[3, 1] * (matrix[1, 2] * matrix[2, 3] - matrix[1, 3] * matrix[2, 2])
res[1, 0] = -(matrix[1, 0] * (matrix[2, 2] * matrix[3, 3] - matrix[2, 3] * matrix[3, 2])
- matrix[2, 0] * (matrix[1, 2] * matrix[3, 3] - matrix[1, 3] * matrix[3, 2])
+ matrix[3, 0] * (matrix[1, 2] * matrix[2, 3] - matrix[1, 3] * matrix[2, 2]))
res[2, 0] = matrix[1, 0] * (matrix[2, 1] * matrix[3, 3] - matrix[2, 3] * matrix[3, 1])
- matrix[2, 0] * (matrix[1, 1] * matrix[3, 3] - matrix[1, 3] * matrix[3, 1])
+ matrix[3, 0] * (matrix[1, 1] * matrix[2, 3] - matrix[1, 3] * matrix[2, 1])
res[3, 0] = -(matrix[1, 0] * (matrix[2, 1] * matrix[3, 2] - matrix[2, 2] * matrix[3, 1])
- matrix[2, 0] * (matrix[1, 1] * matrix[3, 2] - matrix[1, 2] * matrix[3, 1])
+ matrix[3, 0] * (matrix[1, 1] * matrix[2, 2] - matrix[1, 2] * matrix[2, 1]))

res[0, 1] = -(matrix[0, 1] * (matrix[2, 2] * matrix[3, 3] - matrix[2, 3] * matrix[3, 2])
- matrix[2, 1] * (matrix[0, 2] * matrix[3, 3] - matrix[0, 3] * matrix[3, 2])
+ matrix[3, 1] * (matrix[0, 2] * matrix[2, 3] - matrix[0, 3] * matrix[2, 2]))
res[1, 1] = matrix[0, 0] * (matrix[2, 2] * matrix[3, 3] - matrix[2, 3] * matrix[3, 2])
- matrix[2, 0] * (matrix[0, 2] * matrix[3, 3] - matrix[0, 3] * matrix[3, 2])
+ matrix[3, 0] * (matrix[0, 2] * matrix[2, 3] - matrix[0, 3] * matrix[2, 2])
res[2, 1] = -(matrix[0, 0] * (matrix[2, 1] * matrix[3, 3] - matrix[2, 3] * matrix[3, 1])
- matrix[2, 0] * (matrix[0, 1] * matrix[3, 3] - matrix[0, 3] * matrix[3, 1])
+ matrix[3, 0] * (matrix[0, 1] * matrix[2, 3] - matrix[0, 3] * matrix[2, 1]))
res[3, 1] = matrix[0, 0] * (matrix[2, 1] * matrix[3, 2] - matrix[2, 2] * matrix[3, 1])
- matrix[2, 0] * (matrix[0, 1] * matrix[3, 2] - matrix[0, 2] * matrix[3, 1])
+ matrix[3, 0] * (matrix[0, 1] * matrix[2, 2] - matrix[0, 2] * matrix[2, 1])

res[0, 2] = matrix[0, 1] * (matrix[1, 2] * matrix[3, 3] - matrix[1, 3] * matrix[3, 2])
- matrix[1, 1] * (matrix[0, 2] * matrix[3, 3] - matrix[0, 3] * matrix[3, 2])
+ matrix[3, 1] * (matrix[0, 2] * matrix[1, 3] - matrix[0, 3] * matrix[1, 2])
res[1, 2] = -(matrix[0, 0] * (matrix[1, 2] * matrix[3, 3] - matrix[1, 3] * matrix[3, 2])
- matrix[1, 0] * (matrix[0, 2] * matrix[3, 3] - matrix[0, 3] * matrix[3, 2])
+ matrix[3, 0] * (matrix[0, 2] * matrix[1, 3] - matrix[0, 3] * matrix[1, 2]))
res[2, 2] = matrix[0, 0] * (matrix[1, 1] * matrix[3, 3] - matrix[1, 3] * matrix[3, 1])
- matrix[1, 0] * (matrix[0, 1] * matrix[3, 3] - matrix[0, 3] * matrix[3, 1])
+ matrix[3, 0] * (matrix[0, 1] * matrix[1, 3] - matrix[0, 3] * matrix[1, 1])
res[3, 2] = -(matrix[0, 0] * (matrix[1, 1] * matrix[3, 2] - matrix[1, 2] * matrix[3, 1])
- matrix[1, 0] * (matrix[0, 1] * matrix[3, 2] - matrix[0, 2] * matrix[3, 1])
+ matrix[3, 0] * (matrix[0, 1] * matrix[1, 2] - matrix[0, 2] * matrix[1, 1]))

res[0, 3] = -(matrix[0, 1] * (matrix[1, 2] * matrix[2, 3] - matrix[1, 3] * matrix[2, 2])
- matrix[1, 1] * (matrix[0, 2] * matrix[2, 3] - matrix[0, 3] * matrix[2, 2])
+ matrix[2, 1] * (matrix[0, 2] * matrix[1, 3] - matrix[0, 3] * matrix[1, 2]))
res[1, 3] = matrix[0, 0] * (matrix[1, 2] * matrix[2, 3] - matrix[1, 3] * matrix[2, 2])
- matrix[1, 0] * (matrix[0, 2] * matrix[2, 3] - matrix[0, 3] * matrix[2, 2])
+ matrix[2, 0] * (matrix[0, 2] * matrix[1, 3] - matrix[0, 3] * matrix[1, 2])
res[2, 3] = -(matrix[0, 0] * (matrix[1, 1] * matrix[2, 3] - matrix[1, 3] * matrix[2, 1])
- matrix[1, 0] * (matrix[0, 1] * matrix[2, 3] - matrix[0, 3] * matrix[2, 1])
+ matrix[2, 0] * (matrix[0, 1] * matrix[1, 3] - matrix[0, 3] * matrix[1, 1]))
res[3, 3] = matrix[0, 0] * (matrix[1, 1] * matrix[2, 2] - matrix[1, 2] * matrix[2, 1])
- matrix[1, 0] * (matrix[0, 1] * matrix[2, 2] - matrix[0, 2] * matrix[2, 1])
+ matrix[2, 0] * (matrix[0, 1] * matrix[1, 2] - matrix[0, 2] * matrix[1, 1])

return res
}
16 changes: 8 additions & 8 deletions Sources/FirebladeMath/Functions/determinant.swift
Original file line number Diff line number Diff line change
Expand Up @@ -40,10 +40,10 @@ public func determinant(_ mat: Mat3x3f) -> Float {
#if FRB_MATH_USE_SIMD
return simd.simd_determinant(mat.storage)
#else
let a = mat[0, 0] * (mat[1, 1] * mat[2, 2] - mat[1, 2] * mat[2, 1])
let b = mat[0, 1] * (mat[1, 0] * mat[2, 2] - mat[1, 2] * mat[2, 0])
let c = mat[0, 2] * (mat[1, 0] * mat[2, 1] - mat[1, 1] * mat[2, 0])
return a - b + c
let termA = mat[0, 0] * (mat[1, 1] * mat[2, 2] - mat[1, 2] * mat[2, 1])
let termB = mat[0, 1] * (mat[1, 0] * mat[2, 2] - mat[1, 2] * mat[2, 0])
let termC = mat[0, 2] * (mat[1, 0] * mat[2, 1] - mat[1, 1] * mat[2, 0])
return termA - termB + termC
#endif
}

Expand Down Expand Up @@ -85,9 +85,9 @@ public func determinant(_ mat: Mat3x3d) -> Double {
#if FRB_MATH_USE_SIMD
return simd.simd_determinant(mat.storage)
#else
let a = mat[0, 0] * (mat[1, 1] * mat[2, 2] - mat[1, 2] * mat[2, 1])
let b = mat[0, 1] * (mat[1, 0] * mat[2, 2] - mat[1, 2] * mat[2, 0])
let c = mat[0, 2] * (mat[1, 0] * mat[2, 1] - mat[1, 1] * mat[2, 0])
return a - b + c
let termA = mat[0, 0] * (mat[1, 1] * mat[2, 2] - mat[1, 2] * mat[2, 1])
let termB = mat[0, 1] * (mat[1, 0] * mat[2, 2] - mat[1, 2] * mat[2, 0])
let termC = mat[0, 2] * (mat[1, 0] * mat[2, 1] - mat[1, 1] * mat[2, 0])
return termA - termB + termC
#endif
}
Loading
Loading