File: geom/LRectangle.js
/** @language japanese
* <p>LRectangle オブジェクトは、その位置(左上隅のポイント (x, y) で示される)、および幅と高さで定義される領域です。</p>
* <p>LRectangle クラスの x、y、width、および height の各プロパティは、互いに独立しているため、あるプロパティの値を変更しても、他のプロパティに影響はありません。ただし、right プロパティと bottom プロパティはこれら 4 つのプロパティと不可分に関連しています。例えば、right プロパティの値を変更すると width プロパティの値も変更されます。bottom プロパティの値を変更すると、height プロパティの値も変更されます。</p>
* @class LRectangle
* @constructor
* @param {float} x 矩形の左上隅の x 座標です。
* @param {float} y 矩形の左上隅の y 座標です。
* @param {float} width 矩形の幅(ピクセル単位)です。
* @param {float} height 矩形の高さ(ピクセル単位)です。
* @since 1.4.1
* @public
*/
var LRectangle = (function () {
function LRectangle (x, y, w, h) {
var s = this;
s.x = x;
s.y = y;
s.width = w;
s.height = h;
s.setRectangle();
}
LRectangle.prototype = {
setRectangle : function () {
var s = this;
s.bottom = s.y + s.height;
s.right = s.x + s.width;
s.left = s.x;
s.top = s.y;
},
/** @language japanese
* 元の LRectangle オブジェクトと x、y、width、および height の各プロパティの値が同じである、新しい LRectangle オブジェクトを返します。
* @method clone
* @return {LRectangle} 元の LRectangle オブジェクトと x、y、width、および height の各プロパティの値が同じである、新しい LRectangle オブジェクトです。
* @since 1.4.1
* @public
*/
clone : function () {
var s = this;
return new LRectangle(s.x, s.y, s.width, s.height);
},
/** @language japanese
* 指定されたポイントがこの LRectangle オブジェクトで定義される矩形領域内にあるかどうかを判別します。
* @method contains
* @param {float} x ポイントの x 座標(水平位置)です。
* @param {float} y ポイントの y 座標(垂直位置)です。
* @return {Boolean} LRectangle オブジェクトに指定されたオブジェクトが含まれる場合は true を返します。含まれない場合は false を返します。
* @since 1.4.1
* @public
*/
contains : function (x, y) {
var s = this;
return x >= s.x && x <= s.right && y >= s.y && y <= s.bottom;
},
/** @language japanese
* rect パラメーターで指定された LRectangle オブジェクトがこの LRectangle オブジェクト内にあるかどうかを判別します。2 番目の LRectangle オブジェクトが最初の LRectangle オブジェクトの境界内に完全に収まる場合、最初の LRectangle オブジェクトは 2 番目の LRectangle オブジェクトを包含していると言います。
* @method containsRect
* @param {LRectangle} rect チェック対象の LRectangle オブジェクトです。
* @return {Boolean} 指定した LRectangle オブジェクトがこの LRectangle オブジェクトに含まれる場合は true を返します。含まれない場合は false を返します。
* @since 1.4.1
* @public
*/
containsRect : function (rect) {
var s = this;
return rect.x >= s.x && rect.right <= s.right && rect.y >= s.y && rect.bottom <= s.bottom;
},
/** @language japanese
* rect パラメーターで指定された LRectangle オブジェクトがこの LRectangle オブジェクト内にあるかどうかを判別します。2 番目の LRectangle オブジェクトが最初の LRectangle オブジェクトの境界内に完全に収まる場合、最初の LRectangle オブジェクトは 2 番目の LRectangle オブジェクトを包含していると言います。
* @method equals
* @param {LRectangle} toCompare チェック対象の LRectangle オブジェクトです。
* @return {Boolean} 指定した LRectangle オブジェクトがこの LRectangle オブジェクトに含まれる場合は true を返します。含まれない場合は false を返します。
* @since 1.4.1
* @public
*/
equals : function (v) {
var s = this;
return v.x == s.x && v.width == s.width && v.y == s.y && v.height == s.height;
},
/** @language japanese
* LRectangle オブジェクトのサイズを、指定された量(ピクセル単位)だけ大きくします。LRectangle オブジェクトの中心点は変わりませんが、サイズは dx 値に応じて左右に大きくなり、dy 値に応じて上下に大きくなります。
* @method inflate
* @param {float} dx LRectangle オブジェクトの左右に加わる値です。
* @param {float} dy LRectangle オブジェクトの上下に加わる値です。
* @since 1.4.1
* @public
*/
inflate : function (dx, dy) {
var s = this;
s.width += dx;
s.height += dy;
s.setRectangle();
},
/** @language japanese
* toIntersect パラメーターで指定された LRectangle オブジェクトがこの LRectangle オブジェクトと交差する場合に、交差領域を LRectangle オブジェクトとして返します。矩形が交差しない場合、このメソッドは、プロパティが 0 に設定された空の LRectangle オブジェクトを返します。
* @method intersection
* @param {LRectangle} toIntersect この LRectangle オブジェクトと交差するかどうかを調べる対象の LRectangle オブジェクトです。
* @return {Boolean} 交差領域と等しい LRectangle オブジェクトです。矩形が交差しない場合、このメソッドは x、y、width、および height の各プロパティが 0 に設定された空の LRectangle オブジェクトを返します。
* @since 1.4.1
* @public
*/
intersection : function (t) {
var s = this;
var ix = s.x > t.x ? s.x : t.x;
var iy = s.y > t.y ? s.y : t.y;
var ax = s.right > t.right ? t.right : s.right;
var ay = s.bottom > t.bottom ? t.bottom : s.bottom;
if (ix <= ax && iy <= ay) {
return new LRectangle(ix, iy, ax, ay);
}else{
return new LRectangle(0, 0, 0, 0);
}
},
/** @language japanese
* toIntersect パラメーターで指定されたオブジェクトがこの LRectangle オブジェクトと交差するかどうかを判別します。このメソッドは、指定された LRectangle オブジェクトの x、y、width、および height の各プロパティをチェックして、この LRectangle オブジェクトと交差するかどうかを調べます。
* @method intersects
* @param {LRectangle} toIntersect この LRectangle オブジェクトと比較する LRectangle オブジェクトです。
* @return {Boolean} 指定されたオブジェクトがこの LRectangle オブジェクトと交差する場合は true を返します。交差しない場合は false を返します。
* @since 1.4.1
* @public
*/
intersects : function (t) {
var s = this;
var ix = s.x > t.x ? s.x : t.x;
var iy = s.y > t.y ? s.y : t.y;
var ax = s.right > t.right ? t.right : s.right;
var ay = s.bottom > t.bottom ? t.bottom : s.bottom;
return ix <= ax && iy <= ay;
},
/** @language japanese
* この LRectangle オブジェクトが空かどうかを判別します。
* @method isEmpty
* @return {Boolean} LRectangle オブジェクトの幅と高さが 0 以下の場合は true を返します。それ以外の場合は false を返します。
* @since 1.4.1
* @public
*/
isEmpty : function () {
var s = this;
return s.x == 0 && s.y == 0 && s.width == 0 && s.height == 0;
},
/** @language japanese
* LRectangle オブジェクトの位置(左上隅で決定される)を、指定された量だけ調整します。
* @method offset
* @param {float} dx LRectangle オブジェクトの x 値をこの量だけ移動します。
* @param {float} dy LRectangle オブジェクトの y 値をこの量だけ移動します。
* @since 1.4.1
* @public
*/
offset : function (dx, dy) {
var s = this;
s.x += dx;
s.y += dy;
s.setRectangle();
},
/** @language japanese
* LRectangle オブジェクトのすべてのプロパティを 0 に設定します。その幅または高さが 0 以下の場合、LRectangle オブジェクトは空です。このメソッドは、x、y、width、および height の各プロパティの値を 0 に設定します。
* @method setEmpty
* @since 1.4.1
* @public
*/
setEmpty : function () {
var s = this;
s.x = 0;
s.y = 0;
s.width = 0;
s.height = 0;
s.setRectangle();
},
/** @language japanese
* LRectangle のメンバーを指定の値に設定します。
* @method setTo
* @param {float} xa 矩形に設定する値です。
* @param {float} ya 矩形に設定する値です。
* @param {float} widtha 矩形に設定する値です。
* @param {float} heighta 矩形に設定する値です。
* @since 1.4.1
* @public
*/
setTo : function (xa, ya, w, h) {
var s = this;
s.x = xa;
s.y = ya;
s.width = w;
s.height = h;
s.setRectangle();
},
toString : function () {
var s = this;
return "[object LRectangle(" + s.x + "," + s.y + "," + s.width + "," + s.height + ")]";
},
/** @language japanese
* 2 つの矩形間の水平と垂直の空間を塗りつぶすことにより、2 つの矩形を加算して新しい LRectangle オブジェクトを作成します。
* @method union
* @param {LRectangle} toUnion この LRectangle オブジェクトに追加する LRectangle オブジェクトです。
* @return {LRectangle} 2 つの矩形の和集合である新しい LRectangle オブジェクトです。
* @since 1.4.1
* @public
*/
union : function (t) {
var s = this;
return new LRectangle(s.x > t.x ? t.x : s.x, s.y > t.y ? t.y : s.y, s.right > t.right ? s.right : t.right, s.bottom > t.bottom ? s.bottom : t.bottom);
}
};
return LRectangle;
})();