|
@@ -13,17 +13,17 @@ const _vap = new Vector3();
|
|
|
const _vbp = new Vector3();
|
|
|
const _vcp = new Vector3();
|
|
|
|
|
|
-function Triangle( a, b, c ) {
|
|
|
+class Triangle {
|
|
|
|
|
|
- this.a = ( a !== undefined ) ? a : new Vector3();
|
|
|
- this.b = ( b !== undefined ) ? b : new Vector3();
|
|
|
- this.c = ( c !== undefined ) ? c : new Vector3();
|
|
|
+ constructor( a, b, c ) {
|
|
|
|
|
|
-}
|
|
|
+ this.a = ( a !== undefined ) ? a : new Vector3();
|
|
|
+ this.b = ( b !== undefined ) ? b : new Vector3();
|
|
|
+ this.c = ( c !== undefined ) ? c : new Vector3();
|
|
|
|
|
|
-Object.assign( Triangle, {
|
|
|
+ }
|
|
|
|
|
|
- getNormal: function ( a, b, c, target ) {
|
|
|
+ static getNormal( a, b, c, target ) {
|
|
|
|
|
|
if ( target === undefined ) {
|
|
|
|
|
@@ -45,11 +45,11 @@ Object.assign( Triangle, {
|
|
|
|
|
|
return target.set( 0, 0, 0 );
|
|
|
|
|
|
- },
|
|
|
+ }
|
|
|
|
|
|
// static/instance method to calculate barycentric coordinates
|
|
|
// based on: http://www.blackpawn.com/texts/pointinpoly/default.html
|
|
|
- getBarycoord: function ( point, a, b, c, target ) {
|
|
|
+ static getBarycoord( point, a, b, c, target ) {
|
|
|
|
|
|
_v0.subVectors( c, a );
|
|
|
_v1.subVectors( b, a );
|
|
@@ -86,17 +86,17 @@ Object.assign( Triangle, {
|
|
|
// barycentric coordinates must always sum to 1
|
|
|
return target.set( 1 - u - v, v, u );
|
|
|
|
|
|
- },
|
|
|
+ }
|
|
|
|
|
|
- containsPoint: function ( point, a, b, c ) {
|
|
|
+ static containsPoint( point, a, b, c ) {
|
|
|
|
|
|
- Triangle.getBarycoord( point, a, b, c, _v3 );
|
|
|
+ this.getBarycoord( point, a, b, c, _v3 );
|
|
|
|
|
|
return ( _v3.x >= 0 ) && ( _v3.y >= 0 ) && ( ( _v3.x + _v3.y ) <= 1 );
|
|
|
|
|
|
- },
|
|
|
+ }
|
|
|
|
|
|
- getUV: function ( point, p1, p2, p3, uv1, uv2, uv3, target ) {
|
|
|
+ static getUV( point, p1, p2, p3, uv1, uv2, uv3, target ) {
|
|
|
|
|
|
this.getBarycoord( point, p1, p2, p3, _v3 );
|
|
|
|
|
@@ -107,9 +107,9 @@ Object.assign( Triangle, {
|
|
|
|
|
|
return target;
|
|
|
|
|
|
- },
|
|
|
+ }
|
|
|
|
|
|
- isFrontFacing: function ( a, b, c, direction ) {
|
|
|
+ static isFrontFacing( a, b, c, direction ) {
|
|
|
|
|
|
_v0.subVectors( c, b );
|
|
|
_v1.subVectors( a, b );
|
|
@@ -119,11 +119,7 @@ Object.assign( Triangle, {
|
|
|
|
|
|
}
|
|
|
|
|
|
-} );
|
|
|
-
|
|
|
-Object.assign( Triangle.prototype, {
|
|
|
-
|
|
|
- set: function ( a, b, c ) {
|
|
|
+ set( a, b, c ) {
|
|
|
|
|
|
this.a.copy( a );
|
|
|
this.b.copy( b );
|
|
@@ -131,9 +127,9 @@ Object.assign( Triangle.prototype, {
|
|
|
|
|
|
return this;
|
|
|
|
|
|
- },
|
|
|
+ }
|
|
|
|
|
|
- setFromPointsAndIndices: function ( points, i0, i1, i2 ) {
|
|
|
+ setFromPointsAndIndices( points, i0, i1, i2 ) {
|
|
|
|
|
|
this.a.copy( points[ i0 ] );
|
|
|
this.b.copy( points[ i1 ] );
|
|
@@ -141,15 +137,15 @@ Object.assign( Triangle.prototype, {
|
|
|
|
|
|
return this;
|
|
|
|
|
|
- },
|
|
|
+ }
|
|
|
|
|
|
- clone: function () {
|
|
|
+ clone() {
|
|
|
|
|
|
return new this.constructor().copy( this );
|
|
|
|
|
|
- },
|
|
|
+ }
|
|
|
|
|
|
- copy: function ( triangle ) {
|
|
|
+ copy( triangle ) {
|
|
|
|
|
|
this.a.copy( triangle.a );
|
|
|
this.b.copy( triangle.b );
|
|
@@ -157,18 +153,18 @@ Object.assign( Triangle.prototype, {
|
|
|
|
|
|
return this;
|
|
|
|
|
|
- },
|
|
|
+ }
|
|
|
|
|
|
- getArea: function () {
|
|
|
+ getArea() {
|
|
|
|
|
|
_v0.subVectors( this.c, this.b );
|
|
|
_v1.subVectors( this.a, this.b );
|
|
|
|
|
|
return _v0.cross( _v1 ).length() * 0.5;
|
|
|
|
|
|
- },
|
|
|
+ }
|
|
|
|
|
|
- getMidpoint: function ( target ) {
|
|
|
+ getMidpoint( target ) {
|
|
|
|
|
|
if ( target === undefined ) {
|
|
|
|
|
@@ -179,15 +175,15 @@ Object.assign( Triangle.prototype, {
|
|
|
|
|
|
return target.addVectors( this.a, this.b ).add( this.c ).multiplyScalar( 1 / 3 );
|
|
|
|
|
|
- },
|
|
|
+ }
|
|
|
|
|
|
- getNormal: function ( target ) {
|
|
|
+ getNormal( target ) {
|
|
|
|
|
|
return Triangle.getNormal( this.a, this.b, this.c, target );
|
|
|
|
|
|
- },
|
|
|
+ }
|
|
|
|
|
|
- getPlane: function ( target ) {
|
|
|
+ getPlane( target ) {
|
|
|
|
|
|
if ( target === undefined ) {
|
|
|
|
|
@@ -198,39 +194,39 @@ Object.assign( Triangle.prototype, {
|
|
|
|
|
|
return target.setFromCoplanarPoints( this.a, this.b, this.c );
|
|
|
|
|
|
- },
|
|
|
+ }
|
|
|
|
|
|
- getBarycoord: function ( point, target ) {
|
|
|
+ getBarycoord( point, target ) {
|
|
|
|
|
|
return Triangle.getBarycoord( point, this.a, this.b, this.c, target );
|
|
|
|
|
|
- },
|
|
|
+ }
|
|
|
|
|
|
- getUV: function ( point, uv1, uv2, uv3, target ) {
|
|
|
+ getUV( point, uv1, uv2, uv3, target ) {
|
|
|
|
|
|
return Triangle.getUV( point, this.a, this.b, this.c, uv1, uv2, uv3, target );
|
|
|
|
|
|
- },
|
|
|
+ }
|
|
|
|
|
|
- containsPoint: function ( point ) {
|
|
|
+ containsPoint( point ) {
|
|
|
|
|
|
return Triangle.containsPoint( point, this.a, this.b, this.c );
|
|
|
|
|
|
- },
|
|
|
+ }
|
|
|
|
|
|
- isFrontFacing: function ( direction ) {
|
|
|
+ isFrontFacing( direction ) {
|
|
|
|
|
|
return Triangle.isFrontFacing( this.a, this.b, this.c, direction );
|
|
|
|
|
|
- },
|
|
|
+ }
|
|
|
|
|
|
- intersectsBox: function ( box ) {
|
|
|
+ intersectsBox( box ) {
|
|
|
|
|
|
return box.intersectsTriangle( this );
|
|
|
|
|
|
- },
|
|
|
+ }
|
|
|
|
|
|
- closestPointToPoint: function ( p, target ) {
|
|
|
+ closestPointToPoint( p, target ) {
|
|
|
|
|
|
if ( target === undefined ) {
|
|
|
|
|
@@ -316,15 +312,15 @@ Object.assign( Triangle.prototype, {
|
|
|
|
|
|
return target.copy( a ).addScaledVector( _vab, v ).addScaledVector( _vac, w );
|
|
|
|
|
|
- },
|
|
|
+ }
|
|
|
|
|
|
- equals: function ( triangle ) {
|
|
|
+ equals( triangle ) {
|
|
|
|
|
|
return triangle.a.equals( this.a ) && triangle.b.equals( this.b ) && triangle.c.equals( this.c );
|
|
|
|
|
|
}
|
|
|
|
|
|
-} );
|
|
|
+}
|
|
|
|
|
|
|
|
|
export { Triangle };
|