我試圖按照此http://www.migapro.com/circle-and-rotated-rectangle-collision-detection/圈旋轉矩形碰撞檢測
我在這裏的jsfiddle添加http://jsfiddle.net/Z6KSX/2/的代碼來實現旋轉矩形和圓形之間的碰撞檢測。
我在這裏失蹤了什麼?
function check_coll (circle_x,circle_y, rect_x, rect_y, rect_width, rect_height, rect_angle)
{
// Rotate circle's center point back
var rect_centerX = rect_x /2 ;
var rect_centerY = rect_y /2 ;
var cx = (Math.cos(rect_angle) * (circle_x - rect_centerX)) - (Math.sin(rect_angle) * (circle_y - rect_centerY)) + rect_centerX;
var cy = (Math.sin(rect_angle) * (circle_x - rect_centerX)) + (Math.cos(rect_angle) * (circle_y - rect_centerY)) + rect_centerY;
// Closest point
var x, y;
// Find the unrotated closest x point from center of unrotated circle
if (cx < rect_x) {
x = rect_x;
}
else if (cx > rect_x + rect_width){
x = rect_x + rect_width;
}
else{
x = cx;
}
// Find the unrotated closest y point from center of unrotated circle
if (cy < rect_y){
y = rect_y;
}
else if (cy > rect_y + rect_height) {
y = rect_y + rect_height;
}
else {
y = cy;
}
// Determine collision
var collision = false;
var c_radius = 5;
var distance = findDistance(cx, cy, x, y);
if (distance < c_radius) {
collision = true; // Collision
}
else {
collision = false;
}
return collision;
}
function findDistance (x1, y1, x2, y2) {
var a = Math.abs(x1 - x2);
var b = Math.abs(y1 - y2);
var c = Math.sqrt((a * a) + (b * b));
return c;
}
我無法理解,您能否請添加一些細節 – user94437
從查看您的代碼中看起來有點難,但我的意思是圓與OOBB是相同的圓與AABB除了你需要旋轉矩形旋轉後的負圓的圓心,然後在碰撞測試之後(您將其測試爲圓與AABB相似),旋轉矩形的旋轉結果點,然後使用該點來檢查它是否在圓圈內。 – mitim