File: geom/LPoint.js
/** @language japanese
* 新しいポイントを作成します。LPoint オブジェクトは 2 次元の座標系の位置を表します。x は水平方向の軸を表し、y は垂直方向の軸を表します。
* @class LPoint
* @constructor
* @param {float} x 水平座標です。
* @param {float} y 垂直座標です。
* @example
* var myPoint = new LPoint(100,100);
* @since 1.7.7
* @public
*/
var LPoint = (function () {
function LPoint (x, y) {
var s = this;
/** @language japanese
* ポイントの水平座標です。
* @property x
* @type float
* @default 0
* @since 1.7.7
* @public
*/
s.x = x;
/** @language japanese
* ポイントの垂直座標です。
* @property y
* @type float
* @default 0
* @since 1.7.7
* @public
*/
s.y = y;
}
/** @language japanese
* [静的]p1 と p2 との距離を返します。
* @method distance
* @static
* @param {LPoint} p1 最初のポイントです。
* @param {LPoint} p2 2 番目のポイントです。
* @return {float} 最初のポイントと 2 番目のポイント間の距離です。
* @since 1.8.5
* @public
*/
LPoint.distance = function (p1, p2) {
return LPoint.distance2(p1.x, p1.y, p2.x, p2.y);
};
/** @language japanese
* [静的]p1 と p2 との距離を返します。
* @method distance2
* @static
* @param {LPoint} x1 最初のポイントの水平x座標です。
* @param {LPoint} y1 最初のポイントの水平y座標です。
* @param {LPoint} x2 2 番目のポイントの水平x座標です。
* @param {LPoint} y2 2 番目のポイントの水平y座標です。
* @return {float} 最初のポイントと 2 番目のポイント間の距離です。
* @since 1.8.5
* @public
*/
LPoint.distance2 = function (x1, y1, x2, y2) {
var x = x1 - x2, y = x1 - x2;
return Math.sqrt(x * x + y * y);
};
/** @language japanese
* [静的]2 つの指定されたポイント間にあるポイントを判別します。パラメーター f はパラメーター pt1 および pt2 で指定された 2 つの端点に対する、新しい補間ポイントの場所を決定します。パラメーター f の値が 1.0 に近づくほど、補間ポイントは最初のポイント(パラメーター p1)に近づきます。パラメーター f の値が 0 に近づくほど、補間ポイントは 2 番目のポイント(パラメーター p2)に近づきます。
* @method interpolate
* @static
* @param {LPoint} p1 最初のポイントです。
* @param {LPoint} p2 2 番目のポイントです。
* @param {float} f 2 つのポイント間の補間のレベルです。p1 と p2 間の線に沿って新しいポイントがある位置を示します。f=1 の場合は p1 が返されます。f=0 の場合は p2 が返されます。
* @return {LPoint} 新しい補間ポイントです。
* @since 1.8.5
* @public
*/
LPoint.interpolate = function (p1, p2, f) {
return new LPoint(p1.x + (p2.x - p1.x) * (1 - f), p1.y + (p2.y - p1.y) * (1 - f));
};
/** @language japanese
* [静的]極座標ペアを直交点座標に変換します。
* @method polar
* @static
* @param {float} len 極座標ペアの長さ座標です。
* @param {float} angle 極座標ペアの角度(ラジアン単位)です。
* @return {LPoint} 直交ポイントです。
* @since 1.8.5
* @public
*/
LPoint.polar = function (l, a) {
return new LPoint(l * Math.cos(a), l * Math.sin(a));
};
LPoint.prototype = {
toString : function () {
return '[object LPoint(' + this.x + ',' + this.y + ')]';
},
/** @language japanese
* (0,0) からこのポイントまでの線のセグメントの長さを戻す。
* @method length
* @return {float} (0,0) からこのポイントまでの線のセグメントの長さです。
* @since 1.8.5
* @public
*/
length : function () {
return LPoint.distance2(this.x, this.y, 0, 0);
},
/** @language japanese
* このポイントの座標に他のポイントの座標を加算して、新しいポイントを作成します。
* @method add
* @param {LPoint} v 追加するポイントです。
* @return {LPoint} 新しいポイントです。
* @since 1.8.5
* @public
*/
add : function (v) {
return LPoint(this.x + v.x, this.y + v.y);
},
/** @language japanese
* この LPoint オブジェクトのコピーを作成します。
* @method clone
* @return {LPoint} 新しい LPoint オブジェクトです。
* @since 1.8.5
* @public
*/
clone : function () {
return new LPoint(this.x, this.y);
},
/** @language japanese
* LPoint のメンバーを指定の値に設定します。
* @method setTo
* @param {float} x ポイントに設定するx座標値です。
* @param {float} y ポイントに設定するy座標値です。
* @since 1.8.5
* @public
*/
setTo : function (x, y) {
this.x = x, this.y = y;
},
/** @language japanese
* すべてのポイントデータを、ソース LPoint オブジェクトから、呼び出し元の LPoint オブジェクトにコピーします。
* @method copyFrom
* @param {LPoint} sourcePoint データのコピー元となる LPoint オブジェクトです。
* @since 1.8.5
* @public
*/
copyFrom : function (s) {
this.setTo(s.x, s.y);
},
/** @language japanese
* 2 つのポイントが等しいかどうかを判別します。x 値と y 値が同じ場合、2 つのポイントは等しいことになります。
* @method equals
* @param {LPoint} toCompare 比較するポイントです。
* @return {Boolean} オブジェクトがこの LPoint オブジェクトと等しい場合は true を返します。等しくない場合は false を返します。
* @since 1.8.5
* @public
*/
equals : function (t) {
return this.x == t.x && this.y == t.y;
},
/** @language japanese
* (0,0) と現在のポイント間の線のセグメントを設定された長さに拡大 / 縮小します。
* @method normalize
* @param {float} thickness 拡大 / 縮小値です。例えば、現在のポイントが (0,5) で、1 に正規化すると、返されるポイントは (0,1) になります。
* @since 1.8.5
* @public
*/
normalize : function (t) {
var s = this, scale = t / s.length();
s.x *= scale, s.y *= scale;
},
/** @language japanese
* LPoint オブジェクトを指定された量だけオフセットします。dx の値を x の元の値に加算して、新しい x 値を作成します。dy の値を y の元の値に加算して、新しい y 値を作成します。
* @method offset
* @param {float} dx 水平座標 x をオフセットする量です。
* @param {float} dy 垂直座標 y をオフセットする量です。
* @since 1.8.5
* @public
*/
offset : function (dx, dy) {
this.x += dx;
this.y += dy;
},
/** @language japanese
* このポイントの座標から他のポイントの座標を減算して、新しいポイントを作成します。
* @method subtract
* @param {LPoint} v 減算するポイントです
* @return {LPoint} 新しいポイントです。
* @since 1.8.5
* @public
*/
subtract : function (v) {
return new LPoint(this.x - v.x, this.y - v.y);
}
};
return LPoint;
})();