我想确定线段与圆相交的点。例如,给定P0和P3之间的任何点(并假设您知道半径),确定P3的最简单方法是什么?线段交点交点
线段交点交点
回答
你有一个方程组。该圆定义为: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. 3D线段框交叉点
- 5. 圆锥线段交点2D
- 6. 两条线的点交点
- 7. 线段之间的交点问题
- 8. 查找所有线段的交点
- 9. 计算线段之间的交点
- 10. Matlab:两条线的交点
- 11. 抛物线曲线和线段的交点
- 12. 圆和线段交点检测(LatLon点,仪表半径和LatLon线)
- 13. 单点交叉
- 14. 两条移动线段(或一条移动线段和一个点)的交集
- 15. P5.JS - Calulcate 3点交点
- 16. Ruby中两点的交点
- 17. MATLAB:两个圆锥曲线的交点
- 18. 直线与三角形边的交点
- 19. 功能为2线设计的交点
- 20. 光线跟踪盒交叉点
- 21. voronoi图与一条线的交点
- 22. 基于点的线/平面相交
- 23. 线和对象的交点 - Matlab
- 24. pascal中的线路交叉点代码
- 25. 样条和直线之间的交点
- 26. 从Python列表中计算线交点
- 27. Java-多边形和线的交点
- 28. Android中的线路交叉点渲染
- 29. 什么是射线交点间隔?
- 30. 获取矩形和线的交点
当你得到两个解决方案,你将如何分辨哪一个是P3和哪一个是圆圈另一侧的对应点? – 2011-05-23 01:32:11
找出每个点与P1之间的距离。你可以通过(x3-x1)^ 2 +(y3-y1)^ 2来计算距离的平方,无论那个最小的哪一个更接近P1。 – 2011-05-23 01:42:43