求直线与圆交点问题,实在是搞不定了,达人请进...

starytx 2008-11-27 05:18:58
...全文
330 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
xbox112 2011-07-08
  • 打赏
  • 举报
回复
解上面的方程组即可。公式得出来以后按步骤求解就行了,注意“边界”值的处理
clever101 2011-07-08
  • 打赏
  • 举报
回复
这种情况比较容易,有没有任意直线和圆相交的算法?
Tinary3v0 2008-11-27
  • 打赏
  • 举报
回复
给你个函数:
PointF FGetPT( PointF s, PointF e, double r )
{
PointF ap; double xx; double yy; double x1; double x2; double y1; double y2; double k; double b;
if( s.X != e.X ){
k = ( s.Y - e.Y ) / ( s.X - e.X ); b = s.Y - k * s.X;
double A = k * k + 1; double B = 2 * b * k - 2 * s.Y * k - 2 * s.X; double C = s.X * s.X + ( b - s.Y ) * ( b - s.Y ) - r * r;
x1 = ( -1 * B - sqrt( B * B - 4 * A * C ) ) / A / 2; x2 = ( -1 * B + sqrt( B * B - 4 * A * C ) ) / A / 2;
y1 = k * x1 + b; y2 = k * x2 + b;
}else{ x1 = s.X; x2 = s.X; y1 = s.Y + r; y2 = s.Y - r; }
if( ( ( x1- e.X ) * ( x1 - e.X ) + ( y1 - e.Y ) * ( y1 - e.Y ) ) > ( ( x2 - e.X ) * ( x2 - e.X ) + ( y2 - e.Y ) * ( y2- e.Y ) ) ) { xx = x2; yy = y2; }else{ xx = x1; yy = y1; }
ap.X = REAL( xx ); ap.Y = REAL( yy ); return ap;
}

函数说明图:

上面这个函数就是求 点s与点e组成的线段上,距离s为r的点ap的,返回值就是ap的位置啦。 跟你的要求是一样的 起点必须是s 终点必须是e r的距离可以大于se之间的距离。算你命好我正好有这个函数 呵呵
我用的是GDI+的代码,你如果用的是GDI的话,把里面PointF换成CPoint 大写的X Y改成小写 REAL 改成float就可以了。
qt_freelancer 2008-11-27
  • 打赏
  • 举报
回复
你先用代数方法求出解,然后写过小程序应该没有问题吧
glacier3d 2008-11-27
  • 打赏
  • 举报
回复

float dx,dy,l;
dx = x2 - x1;
dy = y2 - y1;
l = sqrt(dx*dx + dy*dy);

x = x1 + a/l * dx;
y = y1 + a/l * dy;
starytx 2008-11-27
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 cxz1985 的回复:]
引用 8 楼 cxz1985 的回复:
先算 P1 P2的长度L
然后 XX1:X1X2 = a:L

改成 (X-X1):(X2-X1) = a:L
(Y-Y1):(Y2-Y1) = a:L
[/Quote]
MS老兄的方法比较简单一些,我一想圆的方程就晕阿,利用这种比例关系导出的x,y应该简单一些。
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 cxz1985 的回复:]
先算 P1 P2的长度L
然后 XX1:X1X2 = a:L
[/Quote]
改成 (X-X1):(X2-X1) = a:L
(Y-Y1):(Y2-Y1) = a:L
vcPlayer 2008-11-27
  • 打赏
  • 举报
回复
圆的方程:(x - x0)^2 + (y - y0)^2 = a^2;
直线的方程:Ax + By + C = 0;[从已知两点得到直线标准式不难吧?]

解上面的方程组即可。公式得出来以后按步骤求解就行了,注意“边界”值的处理。
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 cxz1985 的回复:]
先算 P1 P2的长度L
然后 XX1:X1X2 = a:L
[/Quote]
约束条件 X1 < X < X2
  • 打赏
  • 举报
回复
先算 P1 P2的长度L
然后 XX1:X1X2 = a:L
cnzdgs 2008-11-27
  • 打赏
  • 举报
回复
把直线方程转换为y=kx+b的形式,将kx+b代入圆的方程,然后解一元二次方程求出x,再带入直线方程求y。
starytx 2008-11-27
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 jimoguilai 的回复:]
算p1,p2的斜率,然后p1+斜率就能算出p了啊
[/Quote]
姐姐来帮忙推一下阿,不太明白:)
「已注销」 2008-11-27
  • 打赏
  • 举报
回复
使用角度把圆的方程列出来,直线方程也可以列出来,代进去可以分别求出P2的坐标
starytx 2008-11-27
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 cxz1985 的回复:]
P1是任意点 那是圆心不?
[/Quote]
呵呵,P1是圆心,P2位置任意,解方程就行啊,我推不出来
Chivalry 2008-11-27
  • 打赏
  • 举报
回复
算p1,p2的斜率,然后p1+斜率就能算出p了啊
  • 打赏
  • 举报
回复
P1是任意点 那是圆心不?
  • 打赏
  • 举报
回复
是要解方程 还是写程序?

19,464

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧