فهرست منبع

LineCurve/LineCurve3: Override `getTangent()` and `getTangentAt()`. (#25544)

* add tests `.getTangentAt`

* override `.getTangent*`

* use `.subVectors`

* revert unused fn par `_t` to `t`
ycw 2 سال پیش
والد
کامیت
f07b1396ee
3فایلهای تغییر یافته به همراه25 افزوده شده و 5 حذف شده
  1. 6 4
      src/extras/curves/LineCurve.js
  2. 13 0
      src/extras/curves/LineCurve3.js
  3. 6 1
      test/unit/src/extras/curves/LineCurve.tests.js

+ 6 - 4
src/extras/curves/LineCurve.js

@@ -42,13 +42,15 @@ class LineCurve extends Curve {
 
 	}
 
-	getTangent( t, optionalTarget ) {
+	getTangent( t, optionalTarget = new Vector2() ) {
 
-		const tangent = optionalTarget || new Vector2();
+		return optionalTarget.subVectors( this.v2, this.v1 ).normalize();
 
-		tangent.copy( this.v2 ).sub( this.v1 ).normalize();
+	}
+
+	getTangentAt( u, optionalTarget ) {
 
-		return tangent;
+		return this.getTangent( u, optionalTarget );
 
 	}
 

+ 13 - 0
src/extras/curves/LineCurve3.js

@@ -39,6 +39,19 @@ class LineCurve3 extends Curve {
 		return this.getPoint( u, optionalTarget );
 
 	}
+
+	getTangent( t, optionalTarget = new Vector3() ) {
+
+		return optionalTarget.subVectors( this.v2, this.v1 ).normalize();
+
+	}
+
+	getTangentAt( u, optionalTarget ) {
+
+		return this.getTangent( u, optionalTarget );
+
+	}
+
 	copy( source ) {
 
 		super.copy( source );

+ 6 - 1
test/unit/src/extras/curves/LineCurve.tests.js

@@ -106,7 +106,7 @@ export default QUnit.module( 'Extras', () => {
 
 			} );
 
-			QUnit.test( 'getTangent', ( assert ) => {
+			QUnit.test( 'getTangent/getTangentAt', ( assert ) => {
 
 				const curve = _curve;
 				const tangent = new Vector2();
@@ -117,6 +117,11 @@ export default QUnit.module( 'Extras', () => {
 				assert.numEqual( tangent.x, expectedTangent, 'tangent.x correct' );
 				assert.numEqual( tangent.y, expectedTangent, 'tangent.y correct' );
 
+				curve.getTangentAt( 0, tangent );
+
+				assert.numEqual( tangent.x, expectedTangent, 'tangentAt.x correct' );
+				assert.numEqual( tangent.y, expectedTangent, 'tangentAt.y correct' );
+
 			} );
 
 			QUnit.todo( 'copy', ( assert ) => {