Three. js source code annotation (11) Math/Box2.js, three. jsbox2.js

Wuji (http://blog.csdn.net/omni360)

This article follows the "signature-non-commercial use-consistency" creation public agreement

Reprinted please keep this sentence: Wuji-this blog focuses on Agile development and mobile and IOT device research: data visualization, GOLANG, Html5, WEBGL, THREE. JS. Otherwise, the post from this blog will not be reprinted or reprinted. Thank you for your cooperation.

I also just started learning. Sorry for the errors in many places.

The following code is a comment on the Math/Box2.js file in the THREE. JS source code file.

More updates in: https://github.com/omni360/three.js.sourcecode/blob/master/Three.js

// File: src/math/Box2.js/*** @ author bhouston/http://exocortex.com * // Box2 object constructor. it is used to create a two-dimensional rectangular boundary object in a two-dimensional space. the function functions of the Box2 object are implemented using the function prototype object constructed. /// NOTE: If min is not specified, max initializes the boundary of the Two-dimensional rectangle to Infinity, Infinity // usage: var min = new Vector2 ), max = new Vector2 (); var box = new Box2 (min, max); // create a two-dimensional rectangle boundary object by using two Vector2 (two-dimensional vector) min. * //// <summary> Box2 </summary> /// <param name = "min" type = "Vector2"> Minimum coordinate value of the boundary </param> /// <Param name = "max" type = "Vector2"> maximum coordinate value of the boundary </param> THREE. Box2 = function (min, max) {this. min = (min! = Undefined )? Min: new THREE. Vector2 (Infinity, Infinity); // Infinity is positive Infinity this. max = (max! = Undefined )? Max: new THREE. vector2 (-Infinity,-Infinity); //-Infinity negative Infinity }; /*************************************** * ***** the following are the functions provided by the Box2 object. **************************************** /THREE. box2.prototype = {constructor: THREE. box2, // constructor, returns a reference to the Box2 function that creates this object/* // set method used to set the starting point, ending point, min, and, max coordinate value. returns the two-dimensional rectangular boundary of the new coordinate value. * //// <summary> set </summary> /// <param name = "min" type = "Vector2"> Minimum coordinate value of the boundary </param> // /<param name = "ma X "type =" Vector2 "> maximum coordinate value of the boundary </param> // <returns type =" Box2 "> returns the two-dimensional rectangular boundary of the new coordinate value </returns> set: function (min, max) {this. min. copy (min); this. max. copy (max); return this; // returns the two-dimensional rectangular boundary of the new coordinate value }, /* // setFromPoints method: reset the minimum, maximum, min, and max coordinate values of the two-dimensional rectangle boundary through the points array consisting of Vector2 objects. returns the two-dimensional rectangular boundary of the new coordinate value. * //// <summary> setFromPoints </summary> // A points array composed of <param name = "points" type = "Vector2Array"> Vector2 objects </param>/ // <returns type = "Box2 "> Returns the two-dimensional rectangular boundary of the new coordinate value </returns> setFromPoints: function (points) {this. makeEmpty (); // call. the makeEmpty () method initializes the x and y coordinates of the Two-dimensional rectangle boundary min and max To Infinity and Infinity for (var I = 0, il = points. length; I <il; I ++) {this. expandByPoint (points [I]) // call. expandByPoint () method, obtain the minimum and maximum coordinates in the points array, and then extend the boundary .} return this; // return the two-dimensional rectangular boundary of the new coordinate value},/* // setFromCenterAndSize method reset the minimum, maximum, and min values of the two-dimensional rectangular boundary by using the center point and boundary size, max coordinate value. returns the two-dimensional rectangular boundary of the new coordinate value. * //// <summary> set FromCenterAndSize </summary> // <param name = "center" type = "Vector2"> Vector2 object, center Coordinate </param> /// <param name = "size" type = "Number"> boundary size </param> /// <returns type = "Box2"> return </returns> setFromCenterAndSize: function () {var v1 = new THREE. vector2 (); return function (center, size) {var halfSize = v1.copy (size ). multi plyscalar (0.5); this. min. copy (center ). sub (halfSize); this. max. copy (center). Add (halfSize); return this; // returns the two-dimensional rectangular boundary of the new coordinate value};} (), // The copy method is used to copy the minimum and maximum values of the two-dimensional rectangular boundary, min, max coordinate value. returns the two-dimensional rectangular boundary of the new coordinate value. * //// <summary> copy </summary> /// <param name = "box" type = "Box2"> two-dimensional rectangular boundary </param> // <returns type = "Box2"> returns the two-dimensional rectangular boundary of the new coordinate value </returns> copy: function (box) {this. min. copy (box. min); this. max. copy (box. max); return this; // returns the two-dimensional rectangle boundary of the new coordinate value}. The/* // makeEmpty method initializes the two-dimensional rectangle boundary to Infinity, infinity * // <summary> makeEmpty </s Ummary> // <returns type = "Box2"> returns the two-dimensional rectangular boundary of the new coordinate value </returns> makeEmpty: function () {this. min. x = this. min. y = Infinity; // initialize the boundary of a two-dimensional rectangle to Infinity or Infinity. max. x = this. max. y =-Infinity; // initialize the two-dimensional rectangle boundary to Infinity, Infinity return this; // return the two-dimensional rectangle boundary of the new coordinate value }, /* // The empty method is used to determine whether x and y of the maximum value of the two-dimensional rectangle boundary are smaller than x and y of the minimum value. /// NOTE: If this box contains zero points, return true at its boundary. /// NOTE: A box has the maximum and minimum boundary. the maximum and minimum boundary are represented by one vertex, which is shared by two boundary. /// TODO: The empty method is not clear. when to use. * //// <summary> empty </summary> /// <returns type = "Boolean"> returns true or false </returns> empty: function () {// this is a more robust check for empty than (volume <= 0) because volume can get positive with two negative axesreturn (this. max. x <this. min. x) | (this. max. y <this. min. y );}, /* // The center method is used to return the midpoint of the Two-dimensional rectangular boundary * // <summary> makeEmpty </summary> /// <param name = "optionalTarget" type =" vector2 "> optional parameters, receive the returned result. The midpoint of the boundary </param> // <returns type = "Vector2"> returns the midpoint of the Two-dimensional rectangle boundary </returns> center: function (optionalTarget) {var result = optionalTarget | new THREE. vector2 (); return result. addVectors (this. min, this. max ). multiplyScalar (0.5); // returns the midpoint of the Two-dimensional rectangular boundary }, /* // The center method is used to return the vector of the Two-dimensional rectangle boundary size * // <summary> makeEmpty </summary> /// <param name = "optionalTarget" type = "Vector2"> optional parameters, receive the returned result. The vector of the boundary size </param> // <returns type = "Vector2"> returns the vector of the Two-dimensional rectangle boundary size </returns> size: function (optionalTarget) {var result = optionalTarget | new THREE. vector2 (); return result. subVectors (this. max, this. min); // returns the vector of the Two-dimensional rectangle boundary size},/* // The expandByPoint method extends the minimum value, maximum value, min, of the two-dimensional rectangle boundary through the Vector2 object (point parameter, max coordinate value. returns the two-dimensional rectangular boundary of the new coordinate value. /// NOTE: Both the expandByPoint method and the expandByVector method pass a Vector2 object. The expandByPoint method compares the maximum and minimum values of the x and y coordinates of the current boundary to obtain the new boundary, however, the expandByVector method adds the maximum value of the two-dimensional rectangle boundary to the parameter vector, and the minimum value minus the parameter vector, * //// <summary> expandByPoint </summary> /// <param name = "points" type = "Vector2"> Vector2 object </param> /// <returns type = "Box2"> returns the two-dimensional rectangular boundary of the new coordinate value </returns> expandByPoint: function (point) {this. min. min (point); this. max. max (point); return this; // returns the two-dimensional rectangle boundary of the new coordinate value}. // The expandByVector method extends the minimum value of the two-dimensional rectangle boundary through the Vector2 object (vector parameter, maximum value, min, and max coordinate value. returns the two-dimensional rectangular boundary of the new coordinate value. /// NOTE: Both the expandByVector method and the expandByPoint method pass a Vector2 object. The expandByPoint method compares the maximum and minimum values of the x and y coordinates of the current boundary to obtain the new boundary, however, the expandByVector method adds the maximum value of the two-dimensional rectangle boundary with the parameter vector, and the minimum value minus the parameter vector. // NOTE: The expandByVector method differs from the expandByScalar method in that expandByVector () receives a vector, the expandByScalar () method receives a scalar. * //// <summary> expandByVector </summary> /// <param name = "vector" type = "Vector2"> Vector2 object </param> /// <returns type = "Box2"> returns the two-dimensional rectangular boundary of the new coordinate value </returns> expandByVector: function (vector) {this. min. sub (vector); this. max. add (vector); return this; // returns the two-dimensional rectangular boundary of the new coordinate value}. // The expandByVector method extends the minimum value of the two-dimensional rectangular boundary through the Vector2 object (vector parameter, maximum value, min, and max coordinate value. returns the two-dimensional rectangular boundary of the new coordinate value. /// NOTE: The expandByVector method is different from the expandByScalar method. expandByVector () receives a vector, and expandByScalar () method receives a scalar. * //// <summary> expandByVector </summary> /// <param name = "scalar" type = "Number"> value object </param> /// <returns type = "Box2"> returns the two-dimensional rectangular boundary of the new coordinate value </returns> expandByScalar: function (scalar) {this. min. addScalar (-scalar); this. max. addScalar (scalar); return this; // returns the two-dimensional rectangular boundary of the new coordinate value}, // The containsPoint method is used to obtain the parameter point (the two-dimensional coordinate of A Vector2) whether it is within the boundary of the current two-dimensional rectangle. * //// <summary> containsPoint </summary> // <param name = "point" type = "Vector2"> two-dimensional coordinate of Vector2 </param>/ // <returns type = "Boolean"> return true or false </returns> containsPoint: function (point) {if (point. x <this. min. x | point. x> this. max. x | point. y <this. min. y | point. y> this. max. y) {return false; // returns false if it is not within the boundary} return true; // returns true if it is within the boundary }, // * // The containsBox method is used to obtain whether the parameter box (A Box2 two-dimensional rectangle boundary) is within the current two-dimensional rectangle boundary. * //// <summary> containsBox </summary> /// <param name = "box" type = "Box2"> Box2 two-dimensional rectangle </param>/ // <returns type = "Boolean"> return true or false </returns> containsBox: function (box) {if (this. min. x <= box. min. x) & (box. max. x <= this. max. x) & (this. min. y <= box. min. y) & (box. max. y <= this. max. y) {return true; // return true} return false within the boundary; // return false if not within the boundary }, // * // The getParameter method is used to obtain the aspect ratio of the parameter point (the two-dimensional coordinate of A Vector2) at the current two-dimensional rectangle boundary. /// example: var point = new Vector2 (); // var min = new Vector2 (), max = new Vector2 ); /// var box = new Box2 (min, max); // a 4x4 boundary // var ot = new Vector2 (); // box. getParameter (point, ot); // ot = 3/4, 1/2 * //// <summary> containsBox </summary> /// <param name = "box" type = "Box2"> Box2 two-dimensional rectangle </param> /// <param name = "optionalTarget" type = "Vector2"> optional parameter, returns a two-dimensional vector containing the aspect ratio. </param> // <returns type = "Vector2"> returns a two-dimensional vector containing the aspect ratio. </returns> getParameter: function (point, optionalTarget) {// This can potentially have a divide by zero if the box // has a size dimension of 0. // NOTE: the divisor 0.var result = optionalTarget | new THREE. vector2 (); return result. set (point. x-this. min. x)/(this. max. x-this. min. x), (point. y-this. min. y)/(this. max. y-this. min. y); // returns a two-dimensional vector that contains the aspect ratio}. The/* // containsBox method is used to obtain the parameter box (A Box2 two-dimensional rectangle boundary) determines whether to interwork with the current two-dimensional rectangle boundary. * //// <summary> containsBox </summary> /// <param name = "box" type = "Box2"> Box2 two-dimensional rectangle </param>/ // <returns type = "Boolean"> return true or false </returns> isIntersectionBox: function (box) {// using 6 splitting planes to rule out intersections. if (box. max. x <this. min. x | box. min. x> this. max. x | box. max. y <this. min. y | box. min. y> this. max. y) {return false; // if the result is not intersecting, return false} return true; // if the result is intersecting, return true .}, /* // The clampPoint method is used to restrict the parameter point within the boundary of a two-dimensional rectangle. if the point is less than min, min is returned. If the point is greater than max, max is returned, otherwise, the two-dimensional coordinate of A Vector2 is returned. // <summary> clampPoint </summary> /// <param name = "point" type = "Vector2"> </ param> // <param name = "optionalTarget" type = "Vector2"> optional parameter, receive the returned result and return the cropped boundary point </param> // <returns type = "Vector2"> return the cropped boundary point. </returns> clampPoint: function (point, optionalTarget) {var result = optionalTarget | new THREE. vector2 (); return result. copy (point ). clamp (this. min, this. max); // return the cropped boundary point},/* // The distanceToPoint method is used to obtain the point to the minimum boundary within the boundary, the maximum boundary length (the length of the four sides of the box ). * //// <summary> distanceToPoint </summary> // <param name = "point" type = "Vector2"> two-dimensional coordinate of Vector2 within a boundary </ param> /// <returns type = "Number"> returns a point to the minimum boundary within the boundary, the maximum boundary length (the length of the four sides of the box ). </returns> distanceToPoint: function () {var v1 = new THREE. vector2 (); return function (point) {var clampedPoint = v1.copy (point ). clamp (this. min, this. max); return clampedPoint. sub (point ). length (); // return the minimum to a point in the boundary. The maximum boundary length (the length of the four sides of the box ).};} (), // * // intersect is used to calculate the intersection between the current two-dimensional rectangle boundary and the parameter box by shrinking the current two-dimensional rectangle boundary. * //// <summary> intersect </summary> /// <param name = "box" type = "Box2"> Box2 two-dimensional rectangle </param>/ // <returns type = "Boolean"> returns the intersection of the current two-dimensional rectangle boundary and the parameter box </returns> intersect: function (box) {this. min. max (box. min); this. max. min (box. max); return this; // returns the intersection of the current two-dimensional rectangle boundary and the parameter box}. // The intersect method is used to expand the current two-dimensional rectangle boundary by extending the current two-dimensional rectangle boundary, enclose the parameter box in the boundary of the current two-dimensional rectangle. returns the union of two boundaries * /// <summary> intersect </summary> /// <param name = "box" type = "Box2"> A Box2 two-dimensional rectangle. boundary </param> /// <returns type = "Boolean"> returns the union of the two boundary </returns> union: function (box) {this. min. min (box. min); this. max. max (box. max); return this; // returns the union of the two boundary}. The/* // translate method is used to move the position of the current two-dimensional rectangle boundary through the offset parameter. * //// <summary> translate </summary> // <param name = "offset" type = "Vector2"> offset </param> // <returns type = "Boolean"> returns the two-dimensional rectangular boundary of the new coordinate value </returns> translate: function (offset) {this. min. add (offset); this. max. add (offset); return this; // returns the two-dimensional rectangle boundary of the new coordinate value}, and the/* // equals method is used to obtain the box parameter (A Box2 two-dimensional rectangle boundary) whether it is completely equal to the current two-dimensional rectangle boundary. * //// <summary> equals </summary> /// <param name = "box" type = "Box2"> Box2 two-dimensional rectangular boundary </param>/ // <returns type = "Boolean"> return true or false </returns> equals: function (box) {return box. min. equals (this. min) & box. max. equals (this. max); // return true or false},/* clone method // clone method to clone a two-dimensional rectangular boundary object. * //// <summary> clone </summary> /// <returns type = "Box2"> returns a two-dimensional rectangular boundary object. </returns> clone: function () {return new THREE. box2 (). copy (this); // returns a two-dimensional rectangular boundary object }};

Wuji (http://blog.csdn.net/omni360)

This article follows the "signature-non-commercial use-consistency" creation public agreement

Reprinted please keep this sentence: Wuji-this blog focuses on Agile development and mobile and IOT device research: data visualization, GOLANG, Html5, WEBGL, THREE. JS. Otherwise, the post from this blog will not be reprinted or reprinted. Thank you for your cooperation.

The following code is a comment on the Math/Box2.js file in the THREE. JS source code file.

More updates in: https://github.com/omni360/three.js.sourcecode/blob/master/Three.js