فهرست منبع

Fixed bug in Vector3.angleTo where NaN was being returned instead of zero. Added corresponding unit test.

Drew Noakes 12 سال پیش
والد
کامیت
55242bab09
2فایلهای تغییر یافته به همراه17 افزوده شده و 1 حذف شده
  1. 1 1
      src/math/Vector3.js
  2. 16 0
      test/unit/math/Vector3.js

+ 1 - 1
src/math/Vector3.js

@@ -564,7 +564,7 @@ THREE.extend( THREE.Vector3.prototype, {
 
 	angleTo: function ( v ) {
 
-		return Math.acos( this.dot( v ) / this.length() / v.length() );
+		return Math.acos( Math.min ( 1, this.dot( v ) / this.length() / v.length() ) );
 
 	},
 

+ 16 - 0
test/unit/math/Vector3.js

@@ -290,6 +290,22 @@ test( "reflect", function() {
 	ok( b.copy( a ).reflect(  normal ).equals( new THREE.Vector3( -1, -1, 0 ) ), "Passed!" );
 });
 
+test( "angleTo", function() {
+	var a = new THREE.Vector3( 0, -0.18851655680720186, 0.9820700116639124 );
+
+	equal( a.angleTo( a ),  0 );
+
+	var x = new THREE.Vector3( 1, 0, 0 );
+	var y = new THREE.Vector3( 0, 1, 0 );
+	var z = new THREE.Vector3( 0, 0, 1 );
+
+	equal( x.angleTo( y ), Math.PI / 2 );
+	equal( x.angleTo( z ), Math.PI / 2 );
+	equal( z.angleTo( x ), Math.PI / 2 );
+
+	ok( Math.abs( x.angleTo( new THREE.Vector3( 1, 1, 0 ) ) - ( Math.PI / 4 ) < 0.0000001 ) );
+});
+
 test( "lerp/clone", function() {
 	var a = new THREE.Vector3( x, 0, z );
 	var b = new THREE.Vector3( 0, -y, 0 );