Browse Source

Improvements as a result of code review by @chandlerp

Ben Houston 12 years ago
parent
commit
8821698a2d
3 changed files with 40 additions and 28 deletions
  1. 14 11
      src/core/Box3.js
  2. 11 7
      src/core/Plane.js
  3. 15 10
      src/core/Sphere.js

+ 14 - 11
src/core/Box3.js

@@ -7,7 +7,7 @@
 	THREE.Box3 = function ( min, max ) {
 
 		this.min = min || new THREE.Vector3();
-		this.max = max || new THREE.Vector3();
+		this.max = max || this.min;		// This is done on purpose so you can make a box using a single point and then expand it.
 
 	};
 
@@ -19,6 +19,15 @@
 		return this;
 	};
 
+	THREE.Box3.prototype.copy = function ( box ) {
+
+		this.min = box.min;
+		this.max = box.max;
+
+		return this;
+	};
+
+
 	THREE.Box3.prototype.empty = function () {
 		// this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes
 		return 
@@ -35,13 +44,11 @@
 	};
 
 	THREE.Box3.prototype.center = function () {
-		var c = new THREE.Vector3();
-		return c.add( this.min, this.max ).multiplyScalar( 0.5 );
+		return new THREE.Vector3().add( this.min, this.max ).multiplyScalar( 0.5 );
 	};
 
 	THREE.Box3.prototype.size = function () {
-		var s = new THREE.Vector3();
-		return s.sub( this.max, this.min );
+		return new THREE.Vector3().sub( this.max, this.min );
 	};
 
 	THREE.Box3.prototype.extendByPoint = function ( point ) {
@@ -74,12 +81,8 @@
 	};
 
 	THREE.Box3.prototype.expandByScalar = function ( scalar ) {
-		this.min.x -= scalar;
-		this.min.y -= scalar;
-		this.min.z -= scalar;
-		this.max.x += scalar;
-		this.max.y += scalar;
-		this.max.z += scalar;
+		this.min.addScalar( -scalar );
+		this.max.addScalar( scalar );
 		return this;
 	};
 

+ 11 - 7
src/core/Plane.js

@@ -31,6 +31,14 @@
 		return this;
 	};
 
+	THREE.Plane.prototype.copy = function ( plane ) {
+
+		this.normal = plane.normal;
+		this.constant = plane.constant;
+
+		return this;
+	};
+
 	THREE.Plane.prototype.flip = function () {
 
 		// Note: can also be flipped by inverting constant, but I like constant to stay positive generally.
@@ -58,7 +66,7 @@
 
 		var perpendicularMagnitude = this.distanceToPoint( point );
 
-		return new THREE.Vector3(
+		return new THREE.Vector3( 
 			point.x - this.normal.x * perpendicularMagnitude,
 			point.y - this.normal.y * perpendicularMagnitude,
 			point.z - this.normal.z * perpendicularMagnitude
@@ -69,11 +77,7 @@
 
 		var perpendicularMagnitude = this.distanceToPoint( point );
 
-		return new THREE.Vector3(
-			this.normal.x * perpendicularMagnitude,
-			this.normal.y * perpendicularMagnitude,
-			this.normal.z * perpendicularMagnitude
-			);
+		return new THREE.Vector3().copy( this.normal ).multipleByScalar( perpendicularMagnitude );
 	};
 
 	THREE.Plane.prototype.intersectsLine = function ( startPoint, endPoint ) {	
@@ -87,7 +91,7 @@
 
 	THREE.Plane.prototype.coplanarPoint = function () {		
 		
-		return this.projectPoint( new THREE.Vector3( 0,0,0 ) );
+		return this.projectPoint( new THREE.Vector3( 0, 0, 0 ) );
 	};
 
 }( THREE ) );

+ 15 - 10
src/core/Sphere.js

@@ -19,6 +19,15 @@
 		return this;
 	};
 
+	THREE.Sphere.prototype.copy = function ( sphere ) {
+
+		this.center = sphere.center;
+		this.radius = sphere.radius;
+
+		return this;
+	};
+
+
 	THREE.Sphere.prototype.empty = function () {
 
 		return ( this.radius <= 0 );
@@ -28,33 +37,29 @@
 
 	THREE.Sphere.prototype.volume = function () {
 
-		// NOTE: would love to replace r*r*r with a helper cube(r), but may be much slower
 		return Math.PI * 4 / 3 * this.radius * this.radius * this.radius;
 
 	};
 
 	THREE.Sphere.prototype.containsPoint = function ( point ) {
 
-		var delta = new THREE.VEctor3();
-		var distanceSq = delta.sub( point, this.center ).lengthSq();
+		var distanceSq = new THREE.VEctor3().sub( point, this.center ).lengthSq();
 
 		return ( distanceSq <= this.radius * this.radius );
 	};
 
 	THREE.Sphere.prototype.distanceToPoint = function ( point ) {
 
-		var delta = new THREE.VEctor3();
-		var distanceSq = delta.sub( point, this.center ).length();
+		var distanceSq = new THREE.Vector3().sub( point, this.center ).length();
 
-		return ( distanceSq - this.radius  );
+		return ( distanceSq - this.radius );
 	};
 
 	THREE.Sphere.prototype.clampPoint = function ( point ) {
 
 		// NOTE: There is likely a more optimal way of doing this.
 
-		var delta = new THREE.VEctor3();
-		delta.sub( point, this.center );
+		var delta = new THREE.Vector3().sub( point, this.center );
 
 		var deltaLengthSq = delta.lengthSq();
 
@@ -70,7 +75,7 @@
 
 	THREE.Sphere.prototype.bounds = function () {
 
-		var box =  new THREE.Box3( this.center );
+		var box =  new THREE.Box3( this.center, this.center );
 		box.expandByScalar( this.radius );
 
 		return box;
@@ -78,7 +83,7 @@
 
 	THREE.Sphere.prototype.translate = function ( offset ) {
 
-		this.center.add( this.center, this.offset );
+		this.center.addSelf( this.offset );
 		
 		return this;
 	};