線段交點交點
回答
你有一個方程組。該圓定義爲:x^2 + y^2 = r^2
。該行由y = y0 + [(y1 - y0)/(x1 - x0)]·(x - x0)
定義。替換第一個,你得到x^2 + (y0 + [(y1 - y0)/(x1 - x0)]·(x - x0))^2 = r^2
。解決這個問題,你會得到0-2的值。將它們插回到任何一個公式中以獲得y的值。
一般來說,
- 尋找P0之間的角度P1
- 逼平從P0在距離r這個角度線,它會給你P3
在僞代碼中,
theta = atan2(P1.y-P0.y, P1.x-P0.x)
P3.x = P0.x + r * cos(theta)
P3.y = P0.y + r * sin(theta)
從圓心和半徑可以寫出描述圓的方程。 從P0和P1兩點可以寫出描述線條的方程。
所以你有2個未知數的方程,你可以通過替換來解決。
設(X0,Y0)=點P0
和(X1,Y1)=點P1
和R =的圓的半徑的座標的座標。
爲圓的公式爲:
(x-x0)^2 + (y-y0)^2 = r^2
爲線的等式爲:
(y-y0) = M(x-x0) // where M = (y1-y0)/(x1-x0)
封堵第二方程到第一給出:
(x-x0)^2*(1 + M^2) = r^2
x - x0 = r/sqrt(1+M^2)
同樣你可以找到
y - y0 = r/sqrt(1+1/M^2)
點(x,y)是直線和圓之間的交點,(x,y)是您的答案。
P3 = (x0 + r/sqrt(1+M^2), y0 + r/sqrt(1+1/M^2))
尋求此代碼..其保存時間
private boolean circleLineIntersect(float x1, float y1, float x2, float y2, float cx, float cy, float cr) {
float dx = x2 - x1;
float dy = y2 - y1;
float a = dx * dx + dy * dy;
float b = 2 * (dx * (x1 - cx) + dy * (y1 - cy));
float c = cx * cx + cy * cy;
c += x1 * x1 + y1 * y1;
c -= 2 * (cx * x1 + cy * y1);
c -= cr * cr;
float bb4ac = b * b - 4 * a * c;
if(bb4ac<0){
return false; // No collision
}else{
return true; //Collision
}
}
這是爲線條,如果不同於線段。 – Stritof 2015-12-14 14:51:32
這只是返回一個布爾值,表示如果有交集,它不會返回交集本身 – 2017-05-08 16:11:43
MATLAB代碼
函數[標誌] = circleLineSegmentIntersection2(AX,AY,BX,BY,CX,CY,R)
%甲乙是線段的兩個端點,C是圓的中心,%R是圓的半徑。這個功能計算 的最近點氟利昂C到段%如果與 最近點> R返回0,否則,1
Dx = Bx-Ax;
Dy = By-Ay;
LAB = (Dx^2 + Dy^2);
t = ((Cx - Ax) * Dx + (Cy - Ay) * Dy)/LAB;
if t > 1
t=1;
elseif t<0
t=0;
end;
nearestX = Ax + t * Dx;
nearestY = Ay + t * Dy;
dist = sqrt((nearestX-Cx)^2 + (nearestY-Cy)^2);
if (dist > R)
flag=0;
else
flag=1;
end
端的距離
- 1. 線段交點
- 2. 線段和線段交點
- 3. 找到每個交點的線段和相交線段列表的交點
- 4. 線段和圓交點
- 5. 3D線段框交叉點
- 6. 圓錐線段交點2D
- 7. 圓線交點
- 8. 線段交叉點(僅限交叉點,不接觸)
- 9. 兩條線的點交點
- 10. 線條交叉點
- 11. 計算兩個線段的交點
- 12. 查找所有線段的交點
- 13. 查找線段矩形交點
- 14. 線段之間的交點問題
- 15. 計算線段之間的交點
- 16. 曲線的相交點!
- 17. 檢測線的交叉點
- 18. 矩形射線交叉點
- 19. 橢圓和線交點JAVA
- 20. Matlab:兩條線的交點
- 21. 沒有端點的線交點
- 22. 拋物線曲線和線段的交點
- 23. 線與折線之間的交點
- 24. 情節線和曲線交點?
- 25. CGAL交點圓和垂直線(不是線段)
- 26. 爪哇:交點檢測一個線段的對許多行段
- 27. 圓和線段交點檢測(LatLon點,儀表半徑和LatLon線)
- 28. 基於兩條線以上畫線的交點的生成點
- 29. 確定直線和點列表之間的交點與點
- 30. OBB-OBB交點
當你得到兩個解決方案,你將如何分辨哪一個是P3和哪一個是圓圈另一側的對應點? – 2011-05-23 01:32:11
找出每個點與P1之間的距離。你可以通過(x3-x1)^ 2 +(y3-y1)^ 2來計算距離的平方,無論那個最小的哪一個更接近P1。 – 2011-05-23 01:42:43