API Docs for: 最后更新日期:2014年8月25日
Google搜索   
Show:

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;
})();