diff options
| author | Luxko <liarluxlux@gmail.com> | 2022-07-23 00:59:45 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-07-23 00:59:45 +0800 |
| commit | 00e704b216e1f20a0d6eb7a005a76a01d208caa2 (patch) | |
| tree | 737b2162bacedf8a657ee46a8dd15cdad5aa6db4 | |
| parent | 227ee0f705b2b95da875714937f0b761a9d3d70d (diff) | |
fix `linalg.angle_from_quaternion`
fixes #1894 .2:
```odin
package laa
import "core:fmt"
import la "core:math/linalg"
main:: proc() {
angle := f32(0.5)
quat := la.quaternion_angle_axis_f32(angle,la.Vector3f32{0,0,1})
fmt.printf("retreived: %0.8f\n", la.angle_from_quaternion(quat)) // should be 0.5, but wasn't
}
```
| -rw-r--r-- | core/math/linalg/specific.odin | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/core/math/linalg/specific.odin b/core/math/linalg/specific.odin index a4aaeb012..c4ecb194f 100644 --- a/core/math/linalg/specific.odin +++ b/core/math/linalg/specific.odin @@ -476,21 +476,21 @@ quaternion_angle_axis :: proc{ angle_from_quaternion_f16 :: proc(q: Quaternionf16) -> f16 { if abs(q.w) > math.SQRT_THREE*0.5 { - return math.asin(q.x*q.x + q.y*q.y + q.z*q.z) * 2 + return math.asin(math.sqrt(q.x*q.x + q.y*q.y + q.z*q.z)) * 2 } return math.acos(q.w) * 2 } angle_from_quaternion_f32 :: proc(q: Quaternionf32) -> f32 { if abs(q.w) > math.SQRT_THREE*0.5 { - return math.asin(q.x*q.x + q.y*q.y + q.z*q.z) * 2 + return math.asin(math.sqrt(q.x*q.x + q.y*q.y + q.z*q.z)) * 2 } return math.acos(q.w) * 2 } angle_from_quaternion_f64 :: proc(q: Quaternionf64) -> f64 { if abs(q.w) > math.SQRT_THREE*0.5 { - return math.asin(q.x*q.x + q.y*q.y + q.z*q.z) * 2 + return math.asin(math.sqrt(q.x*q.x + q.y*q.y + q.z*q.z)) * 2 } return math.acos(q.w) * 2 |