source: other-projects/playing-in-the-street/summer-2013/trunk/Playing-in-the-Street-WPF/Content/Web/mrdoob-three.js-4862f5f/test/unit/math/Box3.js@ 28897

Last change on this file since 28897 was 28897, checked in by davidb, 10 years ago

GUI front-end to server base plus web page content

File size: 10.4 KB
Line 
1/**
2 * @author bhouston / http://exocortex.com
3 */
4
5module( "Box3" );
6
7test( "constructor", function() {
8 var a = new THREE.Box3();
9 ok( a.min.equals( posInf3 ), "Passed!" );
10 ok( a.max.equals( negInf3 ), "Passed!" );
11
12 a = new THREE.Box3( zero3.clone(), zero3.clone() );
13 ok( a.min.equals( zero3 ), "Passed!" );
14 ok( a.max.equals( zero3 ), "Passed!" );
15
16 a = new THREE.Box3( zero3.clone(), one3.clone() );
17 ok( a.min.equals( zero3 ), "Passed!" );
18 ok( a.max.equals( one3 ), "Passed!" );
19});
20
21test( "copy", function() {
22 var a = new THREE.Box3( zero3.clone(), one3.clone() );
23 var b = new THREE.Box3().copy( a );
24 ok( b.min.equals( zero3 ), "Passed!" );
25 ok( b.max.equals( one3 ), "Passed!" );
26
27 // ensure that it is a true copy
28 a.min = zero3;
29 a.max = one3;
30 ok( b.min.equals( zero3 ), "Passed!" );
31 ok( b.max.equals( one3 ), "Passed!" );
32});
33
34test( "set", function() {
35 var a = new THREE.Box3();
36
37 a.set( zero3, one3 );
38 ok( a.min.equals( zero3 ), "Passed!" );
39 ok( a.max.equals( one3 ), "Passed!" );
40});
41
42test( "empty/makeEmpty", function() {
43 var a = new THREE.Box3();
44
45 ok( a.empty(), "Passed!" );
46
47 var a = new THREE.Box3( zero3.clone(), one3.clone() );
48 ok( ! a.empty(), "Passed!" );
49
50 a.makeEmpty();
51 ok( a.empty(), "Passed!" );
52});
53
54test( "center", function() {
55 var a = new THREE.Box3( zero3.clone(), zero3.clone() );
56
57 ok( a.center().equals( zero3 ), "Passed!" );
58
59 a = new THREE.Box3( zero3.clone(), one3.clone() );
60 var midpoint = one3.clone().multiplyScalar( 0.5 );
61 ok( a.center().equals( midpoint ), "Passed!" );
62});
63
64test( "size", function() {
65 var a = new THREE.Box3( zero3.clone(), zero3.clone() );
66
67 ok( a.size().equals( zero3 ), "Passed!" );
68
69 a = new THREE.Box3( zero3.clone(), one3.clone() );
70 ok( a.size().equals( one3 ), "Passed!" );
71});
72
73test( "expandByPoint", function() {
74 var a = new THREE.Box3( zero3.clone(), zero3.clone() );
75
76 a.expandByPoint( zero3 );
77 ok( a.size().equals( zero3 ), "Passed!" );
78
79 a.expandByPoint( one3 );
80 ok( a.size().equals( one3 ), "Passed!" );
81
82 a.expandByPoint( one3.clone().negate() );
83 ok( a.size().equals( one3.clone().multiplyScalar( 2 ) ), "Passed!" );
84 ok( a.center().equals( zero3 ), "Passed!" );
85});
86
87test( "expandByVector", function() {
88 var a = new THREE.Box3( zero3.clone(), zero3.clone() );
89
90 a.expandByVector( zero3 );
91 ok( a.size().equals( zero3 ), "Passed!" );
92
93 a.expandByVector( one3 );
94 ok( a.size().equals( one3.clone().multiplyScalar( 2 ) ), "Passed!" );
95 ok( a.center().equals( zero3 ), "Passed!" );
96});
97
98test( "expandByScalar", function() {
99 var a = new THREE.Box3( zero3.clone(), zero3.clone() );
100
101 a.expandByScalar( 0 );
102 ok( a.size().equals( zero3 ), "Passed!" );
103
104 a.expandByScalar( 1 );
105 ok( a.size().equals( one3.clone().multiplyScalar( 2 ) ), "Passed!" );
106 ok( a.center().equals( zero3 ), "Passed!" );
107});
108
109test( "containsPoint", function() {
110 var a = new THREE.Box3( zero3.clone(), zero3.clone() );
111
112 ok( a.containsPoint( zero3 ), "Passed!" );
113 ok( ! a.containsPoint( one3 ), "Passed!" );
114
115 a.expandByScalar( 1 );
116 ok( a.containsPoint( zero3 ), "Passed!" );
117 ok( a.containsPoint( one3 ), "Passed!" );
118 ok( a.containsPoint( one3.clone().negate() ), "Passed!" );
119});
120
121test( "containsBox", function() {
122 var a = new THREE.Box3( zero3.clone(), zero3.clone() );
123 var b = new THREE.Box3( zero3.clone(), one3.clone() );
124 var c = new THREE.Box3( one3.clone().negate(), one3.clone() );
125
126 ok( a.containsBox( a ), "Passed!" );
127 ok( ! a.containsBox( b ), "Passed!" );
128 ok( ! a.containsBox( c ), "Passed!" );
129
130 ok( b.containsBox( a ), "Passed!" );
131 ok( c.containsBox( a ), "Passed!" );
132 ok( ! b.containsBox( c ), "Passed!" );
133});
134
135test( "getParameter", function() {
136 var a = new THREE.Box3( zero3.clone(), one3.clone() );
137 var b = new THREE.Box3( one3.clone().negate(), one3.clone() );
138
139 ok( a.getParameter( new THREE.Vector3( 0, 0, 0 ) ).equals( new THREE.Vector3( 0, 0, 0 ) ), "Passed!" );
140 ok( a.getParameter( new THREE.Vector3( 1, 1, 1 ) ).equals( new THREE.Vector3( 1, 1, 1 ) ), "Passed!" );
141
142 ok( b.getParameter( new THREE.Vector3( -1, -1, -1 ) ).equals( new THREE.Vector3( 0, 0, 0 ) ), "Passed!" );
143 ok( b.getParameter( new THREE.Vector3( 0, 0, 0 ) ).equals( new THREE.Vector3( 0.5, 0.5, 0.5 ) ), "Passed!" );
144 ok( b.getParameter( new THREE.Vector3( 1, 1, 1 ) ).equals( new THREE.Vector3( 1, 1, 1 ) ), "Passed!" );
145});
146
147test( "clampPoint", function() {
148 var a = new THREE.Box3( zero3.clone(), zero3.clone() );
149 var b = new THREE.Box3( one3.clone().negate(), one3.clone() );
150
151 ok( a.clampPoint( new THREE.Vector3( 0, 0, 0 ) ).equals( new THREE.Vector3( 0, 0, 0 ) ), "Passed!" );
152 ok( a.clampPoint( new THREE.Vector3( 1, 1, 1 ) ).equals( new THREE.Vector3( 0, 0, 0 ) ), "Passed!" );
153 ok( a.clampPoint( new THREE.Vector3( -1, -1, -1 ) ).equals( new THREE.Vector3( 0, 0, 0 ) ), "Passed!" );
154
155 ok( b.clampPoint( new THREE.Vector3( 2, 2, 2 ) ).equals( new THREE.Vector3( 1, 1, 1 ) ), "Passed!" );
156 ok( b.clampPoint( new THREE.Vector3( 1, 1, 1 ) ).equals( new THREE.Vector3( 1, 1, 1 ) ), "Passed!" );
157 ok( b.clampPoint( new THREE.Vector3( 0, 0, 0 ) ).equals( new THREE.Vector3( 0, 0, 0 ) ), "Passed!" );
158 ok( b.clampPoint( new THREE.Vector3( -1, -1, -1 ) ).equals( new THREE.Vector3( -1, -1, -1 ) ), "Passed!" );
159 ok( b.clampPoint( new THREE.Vector3( -2, -2, -2 ) ).equals( new THREE.Vector3( -1, -1, -1 ) ), "Passed!" );
160});
161
162test( "distanceToPoint", function() {
163 var a = new THREE.Box3( zero3.clone(), zero3.clone() );
164 var b = new THREE.Box3( one3.clone().negate(), one3.clone() );
165
166 ok( a.distanceToPoint( new THREE.Vector3( 0, 0, 0 ) ) == 0, "Passed!" );
167 ok( a.distanceToPoint( new THREE.Vector3( 1, 1, 1 ) ) == Math.sqrt( 3 ), "Passed!" );
168 ok( a.distanceToPoint( new THREE.Vector3( -1, -1, -1 ) ) == Math.sqrt( 3 ), "Passed!" );
169
170 ok( b.distanceToPoint( new THREE.Vector3( 2, 2, 2 ) ) == Math.sqrt( 3 ), "Passed!" );
171 ok( b.distanceToPoint( new THREE.Vector3( 1, 1, 1 ) ) == 0, "Passed!" );
172 ok( b.distanceToPoint( new THREE.Vector3( 0, 0, 0 ) ) == 0, "Passed!" );
173 ok( b.distanceToPoint( new THREE.Vector3( -1, -1, -1 ) ) == 0, "Passed!" );
174 ok( b.distanceToPoint( new THREE.Vector3( -2, -2, -2 ) ) == Math.sqrt( 3 ), "Passed!" );
175});
176
177test( "distanceToPoint", function() {
178 var a = new THREE.Box3( zero3.clone(), zero3.clone() );
179 var b = new THREE.Box3( one3.clone().negate(), one3.clone() );
180
181 ok( a.distanceToPoint( new THREE.Vector3( 0, 0, 0 ) ) == 0, "Passed!" );
182 ok( a.distanceToPoint( new THREE.Vector3( 1, 1, 1 ) ) == Math.sqrt( 3 ), "Passed!" );
183 ok( a.distanceToPoint( new THREE.Vector3( -1, -1, -1 ) ) == Math.sqrt( 3 ), "Passed!" );
184
185 ok( b.distanceToPoint( new THREE.Vector3( 2, 2, 2 ) ) == Math.sqrt( 3 ), "Passed!" );
186 ok( b.distanceToPoint( new THREE.Vector3( 1, 1, 1 ) ) == 0, "Passed!" );
187 ok( b.distanceToPoint( new THREE.Vector3( 0, 0, 0 ) ) == 0, "Passed!" );
188 ok( b.distanceToPoint( new THREE.Vector3( -1, -1, -1 ) ) == 0, "Passed!" );
189 ok( b.distanceToPoint( new THREE.Vector3( -2, -2, -2 ) ) == Math.sqrt( 3 ), "Passed!" );
190});
191
192test( "isIntersectionBox", function() {
193 var a = new THREE.Box3( zero3.clone(), zero3.clone() );
194 var b = new THREE.Box3( zero3.clone(), one3.clone() );
195 var c = new THREE.Box3( one3.clone().negate(), one3.clone() );
196
197 ok( a.isIntersectionBox( a ), "Passed!" );
198 ok( a.isIntersectionBox( b ), "Passed!" );
199 ok( a.isIntersectionBox( c ), "Passed!" );
200
201 ok( b.isIntersectionBox( a ), "Passed!" );
202 ok( c.isIntersectionBox( a ), "Passed!" );
203 ok( b.isIntersectionBox( c ), "Passed!" );
204
205 b.translate( new THREE.Vector3( 2, 2, 2 ) );
206 ok( ! a.isIntersectionBox( b ), "Passed!" );
207 ok( ! b.isIntersectionBox( a ), "Passed!" );
208 ok( ! b.isIntersectionBox( c ), "Passed!" );
209});
210
211test( "getBoundingSphere", function() {
212 var a = new THREE.Box3( zero3.clone(), zero3.clone() );
213 var b = new THREE.Box3( zero3.clone(), one3.clone() );
214 var c = new THREE.Box3( one3.clone().negate(), one3.clone() );
215
216 ok( a.getBoundingSphere().equals( new THREE.Sphere( zero3, 0 ) ), "Passed!" );
217 ok( b.getBoundingSphere().equals( new THREE.Sphere( one3.clone().multiplyScalar( 0.5 ), Math.sqrt( 3 ) * 0.5 ) ), "Passed!" );
218 ok( c.getBoundingSphere().equals( new THREE.Sphere( zero3, Math.sqrt( 12 ) * 0.5 ) ), "Passed!" );
219});
220
221test( "intersect", function() {
222 var a = new THREE.Box3( zero3.clone(), zero3.clone() );
223 var b = new THREE.Box3( zero3.clone(), one3.clone() );
224 var c = new THREE.Box3( one3.clone().negate(), one3.clone() );
225
226 ok( a.clone().intersect( a ).equals( a ), "Passed!" );
227 ok( a.clone().intersect( b ).equals( a ), "Passed!" );
228 ok( b.clone().intersect( b ).equals( b ), "Passed!" );
229 ok( a.clone().intersect( c ).equals( a ), "Passed!" );
230 ok( b.clone().intersect( c ).equals( b ), "Passed!" );
231 ok( c.clone().intersect( c ).equals( c ), "Passed!" );
232});
233
234test( "union", function() {
235 var a = new THREE.Box3( zero3.clone(), zero3.clone() );
236 var b = new THREE.Box3( zero3.clone(), one3.clone() );
237 var c = new THREE.Box3( one3.clone().negate(), one3.clone() );
238
239 ok( a.clone().union( a ).equals( a ), "Passed!" );
240 ok( a.clone().union( b ).equals( b ), "Passed!" );
241 ok( a.clone().union( c ).equals( c ), "Passed!" );
242 ok( b.clone().union( c ).equals( c ), "Passed!" );
243});
244
245var compareBox = function ( a, b, threshold ) {
246 threshold = threshold || 0.0001;
247 return ( a.min.distanceTo( b.min ) < threshold &&
248 a.max.distanceTo( b.max ) < threshold );
249};
250
251test( "applyMatrix4", function() {
252 var a = new THREE.Box3( zero3.clone(), zero3.clone() );
253 var b = new THREE.Box3( zero3.clone(), one3.clone() );
254 var c = new THREE.Box3( one3.clone().negate(), one3.clone() );
255 var d = new THREE.Box3( one3.clone().negate(), zero3.clone() );
256
257 var m = new THREE.Matrix4().makeTranslation( 1, -2, 1 );
258 var t1 = new THREE.Vector3( 1, -2, 1 );
259
260 ok( compareBox( a.clone().applyMatrix4( m ), a.clone().translate( t1 ) ), "Passed!" );
261 ok( compareBox( b.clone().applyMatrix4( m ), b.clone().translate( t1 ) ), "Passed!" );
262 ok( compareBox( c.clone().applyMatrix4( m ), c.clone().translate( t1 ) ), "Passed!" );
263 ok( compareBox( d.clone().applyMatrix4( m ), d.clone().translate( t1 ) ), "Passed!" );
264});
265
266test( "translate", function() {
267 var a = new THREE.Box3( zero3.clone(), zero3.clone() );
268 var b = new THREE.Box3( zero3.clone(), one3.clone() );
269 var c = new THREE.Box3( one3.clone().negate(), one3.clone() );
270 var d = new THREE.Box3( one3.clone().negate(), zero3.clone() );
271
272 ok( a.clone().translate( one3 ).equals( new THREE.Box3( one3, one3 ) ), "Passed!" );
273 ok( a.clone().translate( one3 ).translate( one3.clone().negate() ).equals( a ), "Passed!" );
274 ok( d.clone().translate( one3 ).equals( b ), "Passed!" );
275 ok( b.clone().translate( one3.clone().negate() ).equals( d ), "Passed!" );
276});
Note: See TracBrowser for help on using the repository browser.