Parcourir la source

Added counter method Triangle.intersectsBox; updated docs; updated tests; fixed coding style issues

matthias-w il y a 7 ans
Parent
commit
3e2c73ef36

+ 7 - 0
docs/api/math/Box3.html

@@ -209,6 +209,13 @@
 		Determines whether or not this box intersects [page:Sphere sphere].
 		</div>
 
+		<h3>[method:Boolean intersectsTriangle]( [page:Triangle triangle] )</h3>
+		<div>
+		[page:Triangle triangle] - [page:Triangle] to check for intersection against.<br /><br />
+
+		Determines whether or not this box intersects [page:Triangle triangle].
+		</div>
+
 		<h3>[method:Boolean isEmpty]()</h3>
 		<div>
 		Returns true if this box includes zero points within its bounds.<br>

+ 7 - 0
docs/api/math/Triangle.html

@@ -93,6 +93,13 @@
 		Returns true if the two triangles have identical [page:.a a], [page:.b b] and [page:.c c] properties.
 		</div>
 
+		<h3>[method:Boolean intersectsBox]( [page:Box3 box] )</h3>
+		<div>
+		[page:Box3 box] - Box to check for intersection against.<br /><br />
+
+		Determines whether or not this triangle intersects [page:Box3 box].
+		</div>
+
 		<h3>[method:Vector3 midpoint]( [page:Vector3 optionalTarget] )</h3>
 		<div>
 			[page:Vector3 optionalTarget] - (optional) if specified, the result will be copied into this [page:Vector3], otherwise a new [page:Vector3] will be created.<br /><br />

+ 3 - 3
src/math/Box3.js

@@ -390,7 +390,7 @@ Object.assign( Box3.prototype, {
 
 		var triangleNormal = new Vector3();
 
-		function satForAxes (axes) {
+		function satForAxes( axes ) {
 
 			var i, j;
 
@@ -418,7 +418,7 @@ Object.assign( Box3.prototype, {
 
 		}
 
-		return function intersectsTriangle ( triangle ) {
+		return function intersectsTriangle( triangle ) {
 
 			if ( this.isEmpty() ) {
 
@@ -427,7 +427,7 @@ Object.assign( Box3.prototype, {
 			}
 
 			// compute box center and extents
-			this.getCenter(center);
+			this.getCenter( center );
 			extents.subVectors( this.max, center );
 
 			// translate triangle to aabb origin

+ 6 - 0
src/math/Triangle.js

@@ -189,6 +189,12 @@ Object.assign( Triangle.prototype, {
 
 	},
 
+	intersectsBox: function ( box ) {
+
+		return box.intersectsTriangle( this );
+
+	},
+
 	closestPointToPoint: function () {
 
 		var plane = new Plane();

+ 18 - 0
test/unit/src/math/Box3.tests.js

@@ -6,6 +6,7 @@
 
 import { Box3 } from '../../../../src/math/Box3';
 import { Sphere } from '../../../../src/math/Sphere';
+import { Triangle } from '../../../../src/math/Triangle';
 import { Plane } from '../../../../src/math/Plane';
 import { Vector3 } from '../../../../src/math/Vector3';
 import { Matrix4 } from '../../../../src/math/Matrix4';
@@ -390,6 +391,23 @@ export default QUnit.module( 'Maths', () => {
 
 		} );
 
+		QUnit.test( "intersectsTriangle", ( assert ) => {
+
+			var a = new Box3( one3.clone(), two3.clone() );
+			var b = new Triangle( new Vector3( 1.5, 1.5, 2.5 ), new Vector3( 2.5, 1.5, 1.5 ), new Vector3( 1.5, 2.5, 1.5 ) );
+			var c = new Triangle( new Vector3( 1.5, 1.5, 3.5 ), new Vector3( 3.5, 1.5, 1.5 ), new Vector3( 1.5, 1.5, 1.5 ) );
+			var d = new Triangle( new Vector3( 1.5, 1.75, 3 ), new Vector3( 3, 1.75, 1.5 ), new Vector3( 1.5, 2.5, 1.5 ) );
+			var e = new Triangle( new Vector3( 1.5, 1.8, 3 ), new Vector3( 3, 1.8, 1.5 ), new Vector3( 1.5, 2.5, 1.5 ) );
+			var f = new Triangle( new Vector3( 1.5, 2.5, 3 ), new Vector3( 3, 2.5, 1.5 ), new Vector3( 1.5, 2.5, 1.5 ) );
+
+			assert.ok( a.intersectsTriangle( b ), "Passed!" );
+			assert.ok( a.intersectsTriangle( c ), "Passed!" );
+			assert.ok( a.intersectsTriangle( d ), "Passed!" );
+			assert.ok( ! a.intersectsTriangle( e ), "Passed!" );
+			assert.ok( ! a.intersectsTriangle( f ), "Passed!" );
+
+		} );
+
 		QUnit.test( "clampPoint", ( assert ) => {
 
 			var a = new Box3( zero3.clone(), zero3.clone() );

+ 18 - 0
test/unit/src/math/Triangle.tests.js

@@ -5,6 +5,7 @@
 /* global QUnit */
 
 import { Triangle } from '../../../../src/math/Triangle';
+import { Box3 } from '../../../../src/math/Box3';
 import { Vector3 } from '../../../../src/math/Vector3';
 import {
 	zero3,
@@ -219,6 +220,23 @@ export default QUnit.module( 'Maths', () => {
 
 		} );
 
+		QUnit.test( "intersectsBox", ( assert ) => {
+
+			var a = new Box3( one3.clone(), two3.clone() );
+			var b = new Triangle( new Vector3( 1.5, 1.5, 2.5 ), new Vector3( 2.5, 1.5, 1.5 ), new Vector3( 1.5, 2.5, 1.5 ) );
+			var c = new Triangle( new Vector3( 1.5, 1.5, 3.5 ), new Vector3( 3.5, 1.5, 1.5 ), new Vector3( 1.5, 1.5, 1.5 ) );
+			var d = new Triangle( new Vector3( 1.5, 1.75, 3 ), new Vector3( 3, 1.75, 1.5 ), new Vector3( 1.5, 2.5, 1.5 ) );
+			var e = new Triangle( new Vector3( 1.5, 1.8, 3 ), new Vector3( 3, 1.8, 1.5 ), new Vector3( 1.5, 2.5, 1.5 ) );
+			var f = new Triangle( new Vector3( 1.5, 2.5, 3 ), new Vector3( 3, 2.5, 1.5 ), new Vector3( 1.5, 2.5, 1.5 ) );
+
+			assert.ok( b.intersectsBox( a ), "Passed!" );
+			assert.ok( c.intersectsBox( a ), "Passed!" );
+			assert.ok( d.intersectsBox( a ), "Passed!" );
+			assert.ok( ! e.intersectsBox( a ), "Passed!" );
+			assert.ok( ! f.intersectsBox( a ), "Passed!" );
+
+		} );
+
 		QUnit.test( "closestPointToPoint", ( assert ) => {
 
 			var a = new Triangle( new Vector3( - 1, 0, 0 ), new Vector3( 1, 0, 0 ), new Vector3( 0, 1, 0 ) );