我試圖檢測一條線在javascript中與圓相交的時間。我發現一個幾乎完美的功能,但我最近注意到,當相交線完全水平或垂直時,它不起作用。由於我對這個函數的實際工作原理沒有很好的理解,所以我不確定如何編輯它以獲得我想要的結果。垂直和水平線的線圓交點
function lineCircleCollision(circleX,circleY,radius,lineX1,lineY1,lineX2,lineY2) {
var d1 = pDist(lineX1,lineY1,circleX,circleY);
var d2 = pDist(lineX2,lineY2,circleX,circleY);
if (d1<=radius || d2<=radius) {
return true;
}
var k1 = ((lineY2-lineY1)/(lineX2-lineX1));
var k2 = lineY1;
var k3 = -1/k1;
var k4 = circleY;
var xx = (k1*lineX1-k2-k3*circleX+k4)/(k1-k3);
var yy = k1*(xx-lineX1)+lineY1;
var allow = true;
if (lineX2>lineX1) {
if (xx>=lineX1 && xx<=lineX2) {}
else {allow = false;}
} else {
if (xx>=lineX2 && xx<=lineX1) {}
else {allow = false;}
}
if (lineY2>lineY1) {
if (yy>=lineY1 && yy<=lineY2) {}
else {allow = false;}
} else {
if (yy>=lineY2 && yy<=lineY1) {}
else {allow = false;}
}
if (allow) {
if (pDist(circleX,circleY,xx,yy)<radius) {
return true;
}
else {
return false;
}
} else {
return false;
}
}
function pDist(x1,y1,x2,y2) {
var xd = x2-x1;
var yd = y2-y1;
return Math.sqrt(xd*xd+yd*yd);
}
對於初學者來說,'k1'計算直線的斜率。但垂直線沒有斜坡;試圖計算它將需要除以零。而'k3',斜率的倒數,將水平線除以零。 – Kevin 2014-09-12 14:23:55
@Kevin這是有道理的。在這種情況下我能做些什麼來檢查?你有什麼想法xx和yy代表什麼?謝謝。 – CountingStacks 2014-09-12 14:44:23