Sphere.tests.js 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240
  1. /**
  2. * @author bhouston / http://exocortex.com
  3. * @author TristanVALCKE / https://github.com/Itee
  4. */
  5. /* global QUnit */
  6. import { Box3 } from '../../../../src/math/Box3';
  7. import { Vector3 } from '../../../../src/math/Vector3';
  8. import { Sphere } from '../../../../src/math/Sphere';
  9. import { Plane } from '../../../../src/math/Plane';
  10. import { Matrix4 } from '../../../../src/math/Matrix4';
  11. import {
  12. zero3,
  13. one3,
  14. two3,
  15. eps
  16. } from './Constants.tests';
  17. export default QUnit.module( 'Maths', () => {
  18. QUnit.module( 'Sphere', () => {
  19. // INSTANCING
  20. QUnit.test( "Instancing", ( assert ) => {
  21. var a = new Sphere();
  22. assert.ok( a.center.equals( zero3 ), "Passed!" );
  23. assert.ok( a.radius == 0, "Passed!" );
  24. var a = new Sphere( one3.clone(), 1 );
  25. assert.ok( a.center.equals( one3 ), "Passed!" );
  26. assert.ok( a.radius == 1, "Passed!" );
  27. } );
  28. // PUBLIC STUFF
  29. QUnit.todo( "isSphere", ( assert ) => {
  30. assert.ok( false, "everything's gonna be alright" );
  31. } );
  32. QUnit.test( "set", ( assert ) => {
  33. var a = new Sphere();
  34. assert.ok( a.center.equals( zero3 ), "Passed!" );
  35. assert.ok( a.radius == 0, "Passed!" );
  36. a.set( one3, 1 );
  37. assert.ok( a.center.equals( one3 ), "Passed!" );
  38. assert.ok( a.radius == 1, "Passed!" );
  39. } );
  40. QUnit.test( "setFromPoints", ( assert ) => {
  41. var a = new Sphere();
  42. var expectedCenter = new Vector3( 0.9330126941204071, 0, 0 );
  43. var expectedRadius = 1.3676668773461689;
  44. var optionalCenter = new Vector3( 1, 1, 1 );
  45. var points = [
  46. new Vector3( 1, 1, 0 ), new Vector3( 1, 1, 0 ),
  47. new Vector3( 1, 1, 0 ), new Vector3( 1, 1, 0 ),
  48. new Vector3( 1, 1, 0 ), new Vector3( 0.8660253882408142, 0.5, 0 ),
  49. new Vector3( - 0, 0.5, 0.8660253882408142 ), new Vector3( 1.8660253882408142, 0.5, 0 ),
  50. new Vector3( 0, 0.5, - 0.8660253882408142 ), new Vector3( 0.8660253882408142, 0.5, - 0 ),
  51. new Vector3( 0.8660253882408142, - 0.5, 0 ), new Vector3( - 0, - 0.5, 0.8660253882408142 ),
  52. new Vector3( 1.8660253882408142, - 0.5, 0 ), new Vector3( 0, - 0.5, - 0.8660253882408142 ),
  53. new Vector3( 0.8660253882408142, - 0.5, - 0 ), new Vector3( - 0, - 1, 0 ),
  54. new Vector3( - 0, - 1, 0 ), new Vector3( 0, - 1, 0 ),
  55. new Vector3( 0, - 1, - 0 ), new Vector3( - 0, - 1, - 0 ),
  56. ];
  57. a.setFromPoints( points );
  58. assert.ok( Math.abs( a.center.x - expectedCenter.x ) <= eps, "Default center: check center.x" );
  59. assert.ok( Math.abs( a.center.y - expectedCenter.y ) <= eps, "Default center: check center.y" );
  60. assert.ok( Math.abs( a.center.z - expectedCenter.z ) <= eps, "Default center: check center.z" );
  61. assert.ok( Math.abs( a.radius - expectedRadius ) <= eps, "Default center: check radius" );
  62. var expectedRadius = 2.5946195770400102;
  63. a.setFromPoints( points, optionalCenter );
  64. assert.ok( Math.abs( a.center.x - optionalCenter.x ) <= eps, "Optional center: check center.x" );
  65. assert.ok( Math.abs( a.center.y - optionalCenter.y ) <= eps, "Optional center: check center.y" );
  66. assert.ok( Math.abs( a.center.z - optionalCenter.z ) <= eps, "Optional center: check center.z" );
  67. assert.ok( Math.abs( a.radius - expectedRadius ) <= eps, "Optional center: check radius" );
  68. } );
  69. QUnit.todo( "clone", ( assert ) => {
  70. assert.ok( false, "everything's gonna be alright" );
  71. } );
  72. QUnit.test( "copy", ( assert ) => {
  73. var a = new Sphere( one3.clone(), 1 );
  74. var b = new Sphere().copy( a );
  75. assert.ok( b.center.equals( one3 ), "Passed!" );
  76. assert.ok( b.radius == 1, "Passed!" );
  77. // ensure that it is a true copy
  78. a.center = zero3;
  79. a.radius = 0;
  80. assert.ok( b.center.equals( one3 ), "Passed!" );
  81. assert.ok( b.radius == 1, "Passed!" );
  82. } );
  83. QUnit.test( "empty", ( assert ) => {
  84. var a = new Sphere();
  85. assert.ok( a.empty(), "Passed!" );
  86. a.set( one3, 1 );
  87. assert.ok( ! a.empty(), "Passed!" );
  88. } );
  89. QUnit.test( "containsPoint", ( assert ) => {
  90. var a = new Sphere( one3.clone(), 1 );
  91. assert.ok( ! a.containsPoint( zero3 ), "Passed!" );
  92. assert.ok( a.containsPoint( one3 ), "Passed!" );
  93. } );
  94. QUnit.test( "distanceToPoint", ( assert ) => {
  95. var a = new Sphere( one3.clone(), 1 );
  96. assert.ok( ( a.distanceToPoint( zero3 ) - 0.7320 ) < 0.001, "Passed!" );
  97. assert.ok( a.distanceToPoint( one3 ) === - 1, "Passed!" );
  98. } );
  99. QUnit.test( "intersectsSphere", ( assert ) => {
  100. var a = new Sphere( one3.clone(), 1 );
  101. var b = new Sphere( zero3.clone(), 1 );
  102. var c = new Sphere( zero3.clone(), 0.25 );
  103. assert.ok( a.intersectsSphere( b ), "Passed!" );
  104. assert.ok( ! a.intersectsSphere( c ), "Passed!" );
  105. } );
  106. QUnit.test( "intersectsBox", ( assert ) => {
  107. var a = new Sphere();
  108. var b = new Sphere( new Vector3( - 5, - 5, - 5 ) );
  109. var box = new Box3( zero3, one3 );
  110. assert.strictEqual( a.intersectsBox( box ), true, "Check default sphere" );
  111. assert.strictEqual( b.intersectsBox( box ), false, "Check shifted sphere" );
  112. } );
  113. QUnit.test( "intersectsPlane", ( assert ) => {
  114. var a = new Sphere( zero3.clone(), 1 );
  115. var b = new Plane( new Vector3( 0, 1, 0 ), 1 );
  116. var c = new Plane( new Vector3( 0, 1, 0 ), 1.25 );
  117. var d = new Plane( new Vector3( 0, - 1, 0 ), 1.25 );
  118. assert.ok( a.intersectsPlane( b ), "Passed!" );
  119. assert.ok( ! a.intersectsPlane( c ), "Passed!" );
  120. assert.ok( ! a.intersectsPlane( d ), "Passed!" );
  121. } );
  122. QUnit.test( "clampPoint", ( assert ) => {
  123. var a = new Sphere( one3.clone(), 1 );
  124. var point = new Vector3();
  125. a.clampPoint( new Vector3( 1, 1, 3 ), point );
  126. assert.ok( point.equals( new Vector3( 1, 1, 2 ) ), "Passed!" );
  127. a.clampPoint( new Vector3( 1, 1, - 3 ), point );
  128. assert.ok( point.equals( new Vector3( 1, 1, 0 ) ), "Passed!" );
  129. } );
  130. QUnit.test( "getBoundingBox", ( assert ) => {
  131. var a = new Sphere( one3.clone(), 1 );
  132. var aabb = new Box3();
  133. a.getBoundingBox( aabb );
  134. assert.ok( aabb.equals( new Box3( zero3, two3 ) ), "Passed!" );
  135. a.set( zero3, 0 );
  136. a.getBoundingBox( aabb );
  137. assert.ok( aabb.equals( new Box3( zero3, zero3 ) ), "Passed!" );
  138. } );
  139. QUnit.test( "applyMatrix4", ( assert ) => {
  140. var a = new Sphere( one3.clone(), 1 );
  141. var m = new Matrix4().makeTranslation( 1, - 2, 1 );
  142. var aabb1 = new Box3();
  143. var aabb2 = new Box3();
  144. a.clone().applyMatrix4( m ).getBoundingBox( aabb1 );
  145. a.getBoundingBox( aabb2 );
  146. assert.ok( aabb1.equals( aabb2.applyMatrix4( m ) ), "Passed!" );
  147. } );
  148. QUnit.test( "translate", ( assert ) => {
  149. var a = new Sphere( one3.clone(), 1 );
  150. a.translate( one3.clone().negate() );
  151. assert.ok( a.center.equals( zero3 ), "Passed!" );
  152. } );
  153. QUnit.test( "equals", ( assert ) => {
  154. var a = new Sphere();
  155. var b = new Sphere( new Vector3( 1, 0, 0 ) );
  156. var c = new Sphere( new Vector3( 1, 0, 0 ), 1.0 );
  157. assert.strictEqual( a.equals( b ), false, "a does not equal b" );
  158. assert.strictEqual( a.equals( c ), false, "a does not equal c" );
  159. assert.strictEqual( b.equals( c ), false, "b does not equal c" );
  160. a.copy( b );
  161. assert.strictEqual( a.equals( b ), true, "a equals b after copy()" );
  162. } );
  163. } );
  164. } );
粤ICP备19079148号