@@ -33,9 +33,9 @@ Deno.test({
33
33
* @param {number } t
34
34
* @param {Quat } expected
35
35
*/
36
- function basicSlerpTest ( a , b , t , expected ) {
36
+ function basicSlerpTest ( a , b , t , expected , tolerance = 0.00001 ) {
37
37
const result = Quat . slerpQuaternions ( a , b , t ) ;
38
- assertQuatAlmostEquals ( result , expected ) ;
38
+ assertQuatAlmostEquals ( result , expected , tolerance ) ;
39
39
}
40
40
41
41
Deno . test ( {
@@ -64,6 +64,21 @@ Deno.test({
64
64
} ,
65
65
} ) ;
66
66
67
+ Deno . test ( {
68
+ name : "two quaternions that are very close to each other" ,
69
+ fn ( ) {
70
+ const a = new Quat ( ) ;
71
+ const b = Quat . fromAxisAngle ( 0 , 1 , 0 , 0.00000003 ) ;
72
+ basicSlerpTest ( a , b , 0 , a , 0 ) ;
73
+ basicSlerpTest ( a , b , 0.1 , new Quat ( 0 , 1.5e-9 , 0 , 1 ) , 0 ) ;
74
+ basicSlerpTest ( a , b , 0.25 , new Quat ( 0 , 3.75e-9 , 0 , 1 ) , 0 ) ;
75
+ basicSlerpTest ( a , b , 0.5 , new Quat ( 0 , 7.5e-9 , 0 , 1 ) , 0 ) ;
76
+ basicSlerpTest ( a , b , 0.75 , new Quat ( 0 , 1.1249999999999998e-8 , 0 , 0.9999999999999999 ) , 0 ) ;
77
+ basicSlerpTest ( a , b , 0.9 , new Quat ( 0 , 1.3499999999999998e-8 , 0 , 0.9999999999999999 ) , 0 ) ;
78
+ basicSlerpTest ( a , b , 1 , b , 0 ) ;
79
+ } ,
80
+ } ) ;
81
+
67
82
Deno . test ( {
68
83
name : "slerp that results in a negative cosHalfTheta" ,
69
84
fn ( ) {
@@ -74,12 +89,30 @@ Deno.test({
74
89
} ,
75
90
} ) ;
76
91
92
+ Deno . test ( {
93
+ name : "another slerp that results in a negative cosHalfTheta" ,
94
+ fn ( ) {
95
+ const a = new Quat ( ) ;
96
+ const b = Quat . fromAxisAngle ( 1 , 1 , 1 , 4 ) ;
97
+ basicSlerpTest ( a , b , 0.219 , Quat . fromAxisAngle ( 1 , 1 , 1 , - 0.5 ) ) ;
98
+ basicSlerpTest ( a , b , 0.5 , Quat . fromAxisAngle ( 1 , 1 , 1 , - 1.14157 ) ) ;
99
+ } ,
100
+ } ) ;
101
+
77
102
Deno . test ( {
78
103
name : "slerp two quaternions that are the same" ,
79
104
fn ( ) {
80
105
const a = new Quat ( 0 , 0.2 , 20 , 1 ) ;
81
- basicSlerpTest ( a , a , 0.5 , a ) ;
82
106
const b = new Quat ( 12 , 34 , 56 , 78 ) ;
107
+ basicSlerpTest ( a , a , 0.01 , a ) ;
108
+ basicSlerpTest ( b , b , 0.01 , b ) ;
109
+ basicSlerpTest ( a , a , 0.1 , a ) ;
110
+ basicSlerpTest ( b , b , 0.1 , b ) ;
111
+ basicSlerpTest ( a , a , 0.5 , a ) ;
83
112
basicSlerpTest ( b , b , 0.5 , b ) ;
113
+ basicSlerpTest ( a , a , 0.9 , a ) ;
114
+ basicSlerpTest ( b , b , 0.9 , b ) ;
115
+ basicSlerpTest ( a , a , 0.99 , a ) ;
116
+ basicSlerpTest ( b , b , 0.99 , b ) ;
84
117
} ,
85
118
} ) ;
0 commit comments