js矩形の位置と大きさから頂点位置(回転付き)を取得
1037 ワード
ゲーム開発では任意の角度で回転する矩形間の衝突を検出する必要がある
定義:r:回転円弧.x,y矩形位置,x 1,y 1時計回り第2頂点,x 2,y 2時計回り第3頂点.x 3,y 3時計回りの4番目の頂点.
任意の角度回転はr>=0&&rに変換できます
定義:r:回転円弧.x,y矩形位置,x 1,y 1時計回り第2頂点,x 2,y 2時計回り第3頂点.x 3,y 3時計回りの4番目の頂点.
任意の角度回転はr>=0&&rに変換できます
function(r) {
//
r.r = r.r - parseInt((r.r + Math.PI / 2) / Math.PI) * Math.PI;
//
let atan = Math.atan(r.h / r.w);
let lc = Math.sqrt(r.w * r.w + r.h * r.h);
let piv2 = Math.PI / 2;
return {
x: r.x,
y: r.y,
x1: r.x + r.w * Math.cos(r.r),
y1: r.y + r.w * Math.sin(r.r),
x2: r.x + lc * Math.cos(r.r + atan),
y2: r.y + lc * Math.sin(r.r + atan),
x3: (function() {
if (r.r >= 0) {
return r.x - r.h * Math.cos(piv2 - r.r);
} else {
return r.x + r.h * Math.cos(piv2 + r.r);
}
})(),
y3: (function() {
if (r.r >= 0) {
return r.y + r.h * Math.sin(piv2 - r.r);
} else {
return r.y + r.h * Math.sin(piv2 + r.r);
}
})(),
w: r.w,
h: r.h,
r: r.r
}
}