소스 검색

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 ) {
 	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!" );
 	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() {
 test( "lerp/clone", function() {
 	var a = new THREE.Vector3( x, 0, z );
 	var a = new THREE.Vector3( x, 0, z );
 	var b = new THREE.Vector3( 0, -y, 0 );
 	var b = new THREE.Vector3( 0, -y, 0 );