社区
C++ 语言
帖子详情
求直线与圆的交点的问题
wy88221859
2008-11-07 02:55:03
我用圆的方程式和直线方程式连理起来求交点。。但是求出来的交点老是不对。。。圆心和半径都是已知的。。直线方程也是已知的。。谁知道有更好一点的方法啊。。。
...全文
3027
16
打赏
收藏
求直线与圆的交点的问题
我用圆的方程式和直线方程式连理起来求交点。。但是求出来的交点老是不对。。。圆心和半径都是已知的。。直线方程也是已知的。。谁知道有更好一点的方法啊。。。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
16 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
qq675927952
2008-11-14
打赏
举报
回复
up
xuedaoli
2008-11-07
打赏
举报
回复
主要问题是你的精度的问题,因为你在运算过程中涉及到了double
而传进去的点都是int型的。
建议把结果强制转成int,试下。。。
我简单的写了个
我的圆心(200,300)半径 50
直线起点 (100,260) 终点(400,450)
//下面这个函数得到交点,如果有2个就返回第一个求出的。
CPoint GetPoint(int cx,int cy,int r,int stx,int sty,int edx,int edy )
{
//(x - cx )^2 + (y - cy)^2 = r^2
//y = kx +b
//求得直线方程
double k = ((double)(edy - sty) ) / (edx - stx);
double b = edy - k*edx;
//列方程
/*
(1 + k^2)*x^2 - x*(2*cx -2*k*(b -cy) ) + cx*cx + ( b - cy)*(b - cy) - r*r = 0
*/
double x1,y1,x2,y2;
double c = cx*cx + (b - cy)*(b- cy) -r*r;
double a = (1 + k*k);
double b1 = (2*cx - 2*k*(b - cy));
//得到下面的简化方程
// a*x^2 - b1*x + c = 0;
double tmp = sqrt(b1*b1 - 4*a*c);
x1 = ( b1 + tmp )/(2*a);
y1 = k*x1 + b;
x2 = ( b2 - tmp)/(2*a);
y2 = k*x2 + b;
//判断求出的点是否在圆上
double res = (x1 -cx)*(x1 -cx) + (y1 - cy)*(y1 -cy);
CPoint p;
if( (int)res == r*r) //我这里 r = 50,res = 2500.632,还是比较准确的
{
MessageBox("get it");
p.x = x1;
p.y = y1;
}
else
{
p.x = x2;
p.y = y2;
}
return p;
}
在OnPaint里面验证下
CPaint dc(this);
Cpoint tmp = GetPoint(200,300,50,100,260,400,450);
//为了好看出来,画了个tmp为圆心,半径为3的圆
dc.Elipse(tmp.x + 3,tmp.y + 3, tmp.x - 3, tmp.y -3);
我自己测试过是对的
九桔猫
2008-11-07
打赏
举报
回复
兄弟,用这个圆弧的横纵坐标,和交点进行做差乘法运算,然后看正负
wy88221859
2008-11-07
打赏
举报
回复
现在我已经把两个交点求出来了,现在问题是怎么取得我想要的那个点,就是怎么判断这个圆上的一段指定圆弧和线的交点,而另一个交点没用,要过滤掉,,现在我老是求反了,把和圆弧的交点过滤了,把另一个没用的交点画出来了,每次都是反的啊。。。。不知道各位能否告诉我一个判断的方法啊。。谢谢各位回帖
jia_xiaoxin
2008-11-07
打赏
举报
回复
求直线上的每一个点到圆心的距离是否等于圆的半径。等于的就是要找的那个点。
giftfish
2008-11-07
打赏
举报
回复
ls 方法不错,up!
九桔猫
2008-11-07
打赏
举报
回复
楼主不用费事了,直接去我的blog,其中有个文章“直线圆裁剪程序”,那个有现成的
本人blog地址:http://blog.csdn.net/vbspine
fsy412
2008-11-07
打赏
举报
回复
世界坐标转本地坐标求交,然后再转回去.
Fighting Horse
2008-11-07
打赏
举报
回复
没有什么好办法,直接解方程组
wy88221859
2008-11-07
打赏
举报
回复
其实我主要是要求一段圆弧和线的交点。。。圆弧所在圆的圆心和半径我都求出来了。。直线方程我也求出来了。。。并且这条线可以肯定是和该圆弧有交点的。。只是想要一个快速求交点的算法和判断是哪一个交点和该圆弧相交(因为可以求出两个交点,一个和该圆弧相交,另一个和圆相交的点不需要)。。。
bdshr
2008-11-07
打赏
举报
回复
用圆上所有点,代入直线方程,方程成立则是交点,
xtting_8984313
2008-11-07
打赏
举报
回复
我感觉你说的不对,应该是点不能完全吻合吧,因为误差的原因。
现在的圆仿佛大多使用Bresenham算法,你模拟再花一遍圆(遍历圆上面的点),看经过的点是否满足你的直线方程,或许可以。当然要做一写优化。
Fighting Horse
2008-11-07
打赏
举报
回复
哦,说说看你是怎么做的吧
wy88221859
2008-11-07
打赏
举报
回复
有谁知道算法的可以告诉一下啊。。。。。。。最主要是速度要快。。。有代码最好了。。。。
wy88221859
2008-11-07
打赏
举报
回复
是啊。。。vc问题啊。。。
Fighting Horse
2008-11-07
打赏
举报
回复
这是程序设计问题吗
直线
与
直线
,
圆
,矩形
交点
用面向对象的思维设计相关类,从而实现
直线
与
直线
、
直线
与
圆
、
直线
与矩形的
交点
。用面向对象的思维设计相关类,从而实现
直线
与
直线
、
直线
与
圆
、
直线
与矩形的
交点
。用面向对象的思维设计相关类,从而实现
直线
与
直线
、
直线
与
圆
、
直线
与矩形的
交点
。
椭
圆
和
直线
交点
计算
椭
圆
的画法在gdi中提供了很多,但是没有取得焦点的类,这样画图不灵活
OpenCV3.2 Java图像处理视频学习教程
OpenCV3.2 Java图像处理视频...主要内容包括opencv像素操作、滤波、边缘提取、
直线
与
圆
检测、形态学操作与分水岭、图像金子塔融合重建、多尺度模板匹配、opencv人脸检测、OpenCV跟Tomcat使用实现服务器端图像处理服务。
用面向对象的思维设计相关类,从而实现
直线
与
直线
、
直线
与
圆
、
直线
与矩形的
交点
。
用面向对象的思维设计相关类,从而实现
直线
与
直线
、
直线
与
圆
、
直线
与矩形的
交点
。 要
求
各给出每个案例的至少一个示例的程序。
lineEllipse:获取
直线
与椭
圆
/
圆
的
交点
-matlab开发
该函数给出
直线
和椭
圆
的
交点
。 给定长轴(a),次轴(b), 椭
圆
的中心 (O(h,k)) 和位于
直线
上的两个点 (A(x1,y1), B(x2,y2))。 这个函数给出两点
交点
C1 和 C2。 如果
直线
和椭
圆
不相交,则相
交点
返回 NaN。 a = randperm(10,1); % 一些随机主轴b = randperm(10,1) ; % 一些随机短轴% 如果 a = b,我们得到
圆
O = randint(2,1) ; % 椭
圆
的随机中心 A = rand(1,2) ; B = randint(1,2) ; %
直线
的两个随机点 [C1,C2] = lineEllipse(a,b,O,A,B); % GEt
交点
%% 阴谋th = linspace(0,2*pi) ; x = O(1)+a*cos(th) ; y = O(2)+b*sin(th) ; 数字情节(x,y) 坚持,稍
C++ 语言
64,654
社区成员
250,484
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章