CatmullRomCurve3.js 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. /**
  2. * @author zz85 / http://joshuakoo.com
  3. */
  4. module( "CatmullRomCurve3" );
  5. var positions = [
  6. new THREE.Vector3( - 60, - 100, 60 ),
  7. new THREE.Vector3( - 60, 20, 60 ),
  8. new THREE.Vector3( - 60, 120, 60 ),
  9. new THREE.Vector3( 60, 20, - 60 ),
  10. new THREE.Vector3( 60, - 100, - 60 )
  11. ];
  12. test( "catmullrom check", function() {
  13. var curve = new THREE.CatmullRomCurve3( positions );
  14. curve.type = 'catmullrom';
  15. var catmullPoints = [
  16. new THREE.Vector3( - 60, - 100, 60 ),
  17. new THREE.Vector3( - 60, - 51.04, 60 ),
  18. new THREE.Vector3( - 60, - 2.7199999999999998, 60 ),
  19. new THREE.Vector3( - 61.92, 44.48, 61.92 ),
  20. new THREE.Vector3( - 68.64, 95.36000000000001, 68.64 ),
  21. new THREE.Vector3( - 60, 120, 60 ),
  22. new THREE.Vector3( - 14.880000000000017, 95.36000000000001, 14.880000000000017 ),
  23. new THREE.Vector3( 41.75999999999997, 44.48000000000003, - 41.75999999999997 ),
  24. new THREE.Vector3( 67.68, - 4.640000000000025, - 67.68 ),
  25. new THREE.Vector3( 65.75999999999999, - 59.68000000000002, - 65.75999999999999 ),
  26. new THREE.Vector3( 60, - 100, - 60 )
  27. ];
  28. var getPoints = curve.getPoints( 10 );
  29. var error = vectorsAreEqual( getPoints, catmullPoints );
  30. ok( getPoints.length == 11, 'getPoints should be equal.' );
  31. var desc = error ? ' ' + error : '';
  32. ok( ! error, 'Lists of Vectors3 should be equal.' + desc );
  33. } );
  34. test( "chordal basic check", function() {
  35. var curve = new THREE.CatmullRomCurve3( positions );
  36. curve.type = 'chordal';
  37. var chordalPoints = [
  38. new THREE.Vector3( - 60, - 100, 60 ),
  39. new THREE.Vector3( - 60, - 52, 60 ),
  40. new THREE.Vector3( - 60, - 4, 60 ),
  41. new THREE.Vector3( - 60.656435889910924, 41.62455386421379, 60.656435889910924 ),
  42. new THREE.Vector3( - 62.95396150459915, 87.31049238896205, 62.95396150459915 ),
  43. new THREE.Vector3( - 60, 120, 60 ),
  44. new THREE.Vector3( - 16.302568199486444, 114.1500463116312, 16.302568199486444 ),
  45. new THREE.Vector3( 42.998098664956586, 54.017050116427455, - 42.998098664956586 ),
  46. new THREE.Vector3( 63.542500175682434, - 3.0571533975463856, - 63.542500175682434 ),
  47. new THREE.Vector3( 62.65687513176183, - 58.49286504815978, - 62.65687513176183 ),
  48. new THREE.Vector3( 60.00000000000001, - 100, - 60.00000000000001 )
  49. ];
  50. var getPoints = curve.getPoints( 10 );
  51. var error = vectorsAreEqual( getPoints, chordalPoints );
  52. ok( getPoints.length == 11, 'getPoints should be equal.' );
  53. var desc = error ? ' ' + error : '';
  54. ok( ! error, 'Lists of Vectors3 should be equal.' + desc );
  55. } );
  56. test( "centripetal basic check", function() {
  57. var curve = new THREE.CatmullRomCurve3( positions );
  58. curve.type = 'centripetal';
  59. var centripetalPoints = [
  60. new THREE.Vector3( - 60, - 100, 60 ),
  61. new THREE.Vector3( - 60, - 51.47527724919028, 60 ),
  62. new THREE.Vector3( - 60, - 3.300369665587032, 60 ),
  63. new THREE.Vector3( - 61.13836565863938, 42.86306307781241, 61.13836565863938 ),
  64. new THREE.Vector3( - 65.1226454638772, 90.69743905511538, 65.1226454638772 ),
  65. new THREE.Vector3( - 60, 120, 60 ),
  66. new THREE.Vector3( - 15.620412575504497, 103.10790870179872, 15.620412575504497 ),
  67. new THREE.Vector3( 42.384384731047874, 48.35477686933143, - 42.384384731047874 ),
  68. new THREE.Vector3( 65.25545512241153, - 3.5662509660683424, - 65.25545512241153 ),
  69. new THREE.Vector3( 63.94159134180865, - 58.87468822455125, - 63.94159134180865 ),
  70. new THREE.Vector3( 59.99999999999999, - 100, - 59.99999999999999 ),
  71. ];
  72. var getPoints = curve.getPoints( 10 );
  73. var error = vectorsAreEqual( getPoints, centripetalPoints );
  74. ok( getPoints.length == 11, 'getPoints should be equal.' );
  75. var desc = error ? ' ' + error : '';
  76. ok( ! error, 'Lists of Vectors3 should be equal.' + desc );
  77. } );
  78. test( "closed catmullrom basic check", function() {
  79. var curve = new THREE.CatmullRomCurve3( positions );
  80. curve.type = 'catmullrom';
  81. curve.closed = true;
  82. var closedSplinePoints = [
  83. new THREE.Vector3( - 60, - 100, 60 ),
  84. new THREE.Vector3( - 67.5, - 46.25, 67.5 ),
  85. new THREE.Vector3( - 60, 20, 60 ),
  86. new THREE.Vector3( - 67.5, 83.75, 67.5 ),
  87. new THREE.Vector3( - 60, 120, 60 ),
  88. new THREE.Vector3( 0, 83.75, 0 ),
  89. new THREE.Vector3( 60, 20, - 60 ),
  90. new THREE.Vector3( 75, - 46.25, - 75 ),
  91. new THREE.Vector3( 60, - 100, - 60 ),
  92. new THREE.Vector3( 0, - 115, 0 ),
  93. new THREE.Vector3( - 60, - 100, 60 ),
  94. ];
  95. var getPoints = curve.getPoints( 10 );
  96. var error = vectorsAreEqual( getPoints, closedSplinePoints );
  97. ok( getPoints.length == 11, 'getPoints should be equal.' );
  98. var desc = error ? ' ' + error : '';
  99. ok( ! error, 'Lists of Vectors3 should be equal.' + desc );
  100. } );