Sphere.js 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. /**
  2. * @author bhouston / http://exocortex.com
  3. */
  4. QUnit.module( "Sphere" );
  5. QUnit.test( "constructor" , function( assert ) {
  6. var a = new THREE.Sphere();
  7. assert.ok( a.center.equals( zero3 ), "Passed!" );
  8. assert.ok( a.radius == 0, "Passed!" );
  9. a = new THREE.Sphere( one3.clone(), 1 );
  10. assert.ok( a.center.equals( one3 ), "Passed!" );
  11. assert.ok( a.radius == 1, "Passed!" );
  12. });
  13. QUnit.test( "copy" , function( assert ) {
  14. var a = new THREE.Sphere( one3.clone(), 1 );
  15. var b = new THREE.Sphere().copy( a );
  16. assert.ok( b.center.equals( one3 ), "Passed!" );
  17. assert.ok( b.radius == 1, "Passed!" );
  18. // ensure that it is a true copy
  19. a.center = zero3;
  20. a.radius = 0;
  21. assert.ok( b.center.equals( one3 ), "Passed!" );
  22. assert.ok( b.radius == 1, "Passed!" );
  23. });
  24. QUnit.test( "set" , function( assert ) {
  25. var a = new THREE.Sphere();
  26. assert.ok( a.center.equals( zero3 ), "Passed!" );
  27. assert.ok( a.radius == 0, "Passed!" );
  28. a.set( one3, 1 );
  29. assert.ok( a.center.equals( one3 ), "Passed!" );
  30. assert.ok( a.radius == 1, "Passed!" );
  31. });
  32. QUnit.test( "empty" , function( assert ) {
  33. var a = new THREE.Sphere();
  34. assert.ok( a.empty(), "Passed!" );
  35. a.set( one3, 1 );
  36. assert.ok( ! a.empty(), "Passed!" );
  37. });
  38. QUnit.test( "containsPoint" , function( assert ) {
  39. var a = new THREE.Sphere( one3.clone(), 1 );
  40. assert.ok( ! a.containsPoint( zero3 ), "Passed!" );
  41. assert.ok( a.containsPoint( one3 ), "Passed!" );
  42. });
  43. QUnit.test( "distanceToPoint" , function( assert ) {
  44. var a = new THREE.Sphere( one3.clone(), 1 );
  45. assert.ok( ( a.distanceToPoint( zero3 ) - 0.7320 ) < 0.001, "Passed!" );
  46. assert.ok( a.distanceToPoint( one3 ) === -1, "Passed!" );
  47. });
  48. QUnit.test( "intersectsSphere" , function( assert ) {
  49. var a = new THREE.Sphere( one3.clone(), 1 );
  50. var b = new THREE.Sphere( zero3.clone(), 1 );
  51. var c = new THREE.Sphere( zero3.clone(), 0.25 );
  52. assert.ok( a.intersectsSphere( b ) , "Passed!" );
  53. assert.ok( ! a.intersectsSphere( c ) , "Passed!" );
  54. });
  55. QUnit.test( "intersectsPlane" , function( assert ) {
  56. var a = new THREE.Sphere( zero3.clone(), 1 );
  57. var b = new THREE.Plane( new THREE.Vector3( 0, 1, 0 ), 1 );
  58. var c = new THREE.Plane( new THREE.Vector3( 0, 1, 0 ), 1.25 );
  59. var d = new THREE.Plane( new THREE.Vector3( 0, -1, 0 ), 1.25 );
  60. assert.ok( a.intersectsPlane( b ) , "Passed!" );
  61. assert.ok( ! a.intersectsPlane( c ) , "Passed!" );
  62. assert.ok( ! a.intersectsPlane( d ) , "Passed!" );
  63. });
  64. QUnit.test( "clampPoint" , function( assert ) {
  65. var a = new THREE.Sphere( one3.clone(), 1 );
  66. assert.ok( a.clampPoint( new THREE.Vector3( 1, 1, 3 ) ).equals( new THREE.Vector3( 1, 1, 2 ) ), "Passed!" );
  67. assert.ok( a.clampPoint( new THREE.Vector3( 1, 1, -3 ) ).equals( new THREE.Vector3( 1, 1, 0 ) ), "Passed!" );
  68. });
  69. QUnit.test( "getBoundingBox" , function( assert ) {
  70. var a = new THREE.Sphere( one3.clone(), 1 );
  71. assert.ok( a.getBoundingBox().equals( new THREE.Box3( zero3, two3 ) ), "Passed!" );
  72. a.set( zero3, 0 );
  73. assert.ok( a.getBoundingBox().equals( new THREE.Box3( zero3, zero3 ) ), "Passed!" );
  74. });
  75. QUnit.test( "applyMatrix4" , function( assert ) {
  76. var a = new THREE.Sphere( one3.clone(), 1 );
  77. var m = new THREE.Matrix4().makeTranslation( 1, -2, 1 );
  78. assert.ok( a.clone().applyMatrix4( m ).getBoundingBox().equals( a.getBoundingBox().applyMatrix4( m ) ), "Passed!" );
  79. });
  80. QUnit.test( "translate" , function( assert ) {
  81. var a = new THREE.Sphere( one3.clone(), 1 );
  82. a.translate( one3.clone().negate() );
  83. assert.ok( a.center.equals( zero3 ), "Passed!" );
  84. });
  85. QUnit.test( "setFromPoints", function ( assert ) {
  86. var a = new THREE.Sphere();
  87. var expectedCenter = new THREE.Vector3( 0.9330126941204071, 0, 0 );
  88. var expectedRadius = 1.3676668773461689;
  89. var optionalCenter = new THREE.Vector3( 1, 1, 1 );
  90. var points = [
  91. new THREE.Vector3( 1, 1, 0 ), new THREE.Vector3( 1, 1, 0 ),
  92. new THREE.Vector3( 1, 1, 0 ), new THREE.Vector3( 1, 1, 0 ),
  93. new THREE.Vector3( 1, 1, 0 ), new THREE.Vector3( 0.8660253882408142, 0.5, 0 ),
  94. new THREE.Vector3( - 0, 0.5, 0.8660253882408142 ), new THREE.Vector3( 1.8660253882408142, 0.5, 0 ),
  95. new THREE.Vector3( 0, 0.5, - 0.8660253882408142 ), new THREE.Vector3( 0.8660253882408142, 0.5, - 0 ),
  96. new THREE.Vector3( 0.8660253882408142, - 0.5, 0 ), new THREE.Vector3( - 0, - 0.5, 0.8660253882408142 ),
  97. new THREE.Vector3( 1.8660253882408142, - 0.5, 0 ), new THREE.Vector3( 0, - 0.5, - 0.8660253882408142 ),
  98. new THREE.Vector3( 0.8660253882408142, - 0.5, - 0 ), new THREE.Vector3( - 0, - 1, 0 ),
  99. new THREE.Vector3( - 0, - 1, 0 ), new THREE.Vector3( 0, - 1, 0 ),
  100. new THREE.Vector3( 0, - 1, - 0 ), new THREE.Vector3( - 0, - 1, - 0 ),
  101. ];
  102. a.setFromPoints( points );
  103. assert.ok( Math.abs( a.center.x - expectedCenter.x ) <= eps, "Default center: check center.x" );
  104. assert.ok( Math.abs( a.center.y - expectedCenter.y ) <= eps, "Default center: check center.y" );
  105. assert.ok( Math.abs( a.center.z - expectedCenter.z ) <= eps, "Default center: check center.z" );
  106. assert.ok( Math.abs( a.radius - expectedRadius ) <= eps, "Default center: check radius" );
  107. expectedRadius = 2.5946195770400102;
  108. a.setFromPoints( points, optionalCenter );
  109. assert.ok( Math.abs( a.center.x - optionalCenter.x ) <= eps, "Optional center: check center.x" );
  110. assert.ok( Math.abs( a.center.y - optionalCenter.y ) <= eps, "Optional center: check center.y" );
  111. assert.ok( Math.abs( a.center.z - optionalCenter.z ) <= eps, "Optional center: check center.z" );
  112. assert.ok( Math.abs( a.radius - expectedRadius ) <= eps, "Optional center: check radius" );
  113. } );
  114. QUnit.test( "intersectsBox", function ( assert ) {
  115. var a = new THREE.Sphere();
  116. var b = new THREE.Sphere( new THREE.Vector3( - 5, - 5, - 5 ) );
  117. var box = new THREE.Box3( zero3, one3 );
  118. assert.strictEqual( a.intersectsBox( box ), true, "Check default sphere" );
  119. assert.strictEqual( b.intersectsBox( box ), false, "Check shifted sphere" );
  120. } );
  121. QUnit.test( "equals", function ( assert ) {
  122. var a = new THREE.Sphere();
  123. var b = new THREE.Sphere( new THREE.Vector3( 1, 0, 0 ) );
  124. var c = new THREE.Sphere( new THREE.Vector3( 1, 0, 0 ), 1.0 );
  125. assert.strictEqual( a.equals( b ), false, "a does not equal b" );
  126. assert.strictEqual( a.equals( c ), false, "a does not equal c" );
  127. assert.strictEqual( b.equals( c ), false, "b does not equal c" );
  128. a.copy( b );
  129. assert.strictEqual( a.equals( b ), true, "a equals b after copy()" );
  130. } );
粤ICP备19079148号