搜索
bottom↓
回复: 19

矩形内画三点圆弧,如何判断他们有没交点???

[复制链接]

出0入0汤圆

发表于 2015-5-7 15:13:53 | 显示全部楼层 |阅读模式
如题,有没有最简单方法算法呢?单片机计算的,联立解方程什么计算量太大了。各位有什么好的意见么?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2015-5-7 15:45:26 | 显示全部楼层
求圆心,求半径。这两个运算量都不大。圆心已知半径已知,接下来有无交点判断就容易了。前提是那个弧线确定额是一个圆

出0入0汤圆

 楼主| 发表于 2015-5-7 15:52:23 | 显示全部楼层
jacky_yhy 发表于 2015-5-7 15:45
求圆心,求半径。这两个运算量都不大。圆心已知半径已知,接下来有无交点判断就容易了。前提是那个弧线确定 ...

圆心、半径都知道了,就是判断相不相交,圆肯定好判断。现在是圆的一部分-圆弧。这个难搞。

出0入0汤圆

发表于 2015-5-7 16:00:44 | 显示全部楼层
本帖最后由 jacky_yhy 于 2015-5-7 16:02 编辑
huangguimina4 发表于 2015-5-7 15:52
圆心、半径都知道了,就是判断相不相交,圆肯定好判断。现在是圆的一部分-圆弧。这个难搞。 ...


圆心画个十字×,判断已知3点与刚才那叉叉和圆交点的关系应该就成。
十字叉两轴与矩形边框平行的那种。圆与矩形有交点的话,那个那4个点肯定有在矩形边上或矩形外

出0入0汤圆

 楼主| 发表于 2015-5-7 16:17:04 | 显示全部楼层
jacky_yhy 发表于 2015-5-7 16:00
圆心画个十字×,判断已知3点与刚才那叉叉和圆交点的关系应该就成。
十字叉两轴与矩形边框平行的那种。圆 ...

还是不怎么明白,是这样吗?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2015-5-7 16:27:52 | 显示全部楼层
求圆心半径,判断优弧/劣弧,取该圆弧Xmax,Xmin,Ymax,Ymin,再与矩形四边比较。

出0入0汤圆

发表于 2015-5-7 15:13:54 | 显示全部楼层
本帖最后由 jacky_yhy 于 2015-5-7 16:56 编辑
huangguimina4 发表于 2015-5-7 16:17
还是不怎么明白,是这样吗?


不是,你把那个圆弧画完整了,那个十字线会与圆弧有4个交点。你求出交点的坐标就行了啊。不管怎样圆与矩形有交点的话,那么这4个点中至少有一个在矩形边上或边外。
接下来你只要判断你的三个点和那四个点之间关系,分类讨论就能断定三点圆弧是否与矩形相交了。
你想想下在矩形框中挪动一个圆,不管怎样肯定是那四个点中的一个先与矩形接触的。
就像我楼上的那个回复。你就要通过这四个交点与你现有3个点的关系才能判断XY的最大最小值

出0入0汤圆

发表于 2015-5-7 17:36:37 | 显示全部楼层
jacky_yhy 发表于 2015-5-7 16:51
不是,你把那个圆弧画完整了,那个十字线会与圆弧有4个交点。你求出交点的坐标就行了啊。不管怎样圆与矩 ...

7楼说的对,可以先判断圆与矩形的位置关系,
因为你的前提是3个点都在矩形内,所以只要分以下两种情况讨论即可。
1、如果矩形与圆不相交,则弧与圆不相交。这个可以通过圆的参数方程。以矩形的一个点建立坐标系,已知半径和圆心,参数方程中的三角函数,用正负1代入,你就知道圆是否和矩形相交,或者哪个部分与矩形相交
2、如果圆与矩形相交,则判断3点构成的圆弧是否包含矩形与圆的交弧即可。(用坐标值一下子就能判断),包含则有交点,不包含则无焦点;

出0入0汤圆

发表于 2015-5-7 17:37:54 | 显示全部楼层
jzb8736 发表于 2015-5-7 17:36
7楼说的对,可以先判断圆与矩形的位置关系,
因为你的前提是3个点都在矩形内,所以只要分以下两种情况讨 ...

这种方法最终都不牵涉到计算,仅仅是建立坐标系,然后一堆比较大小的逻辑

出0入0汤圆

 楼主| 发表于 2015-5-7 18:41:14 | 显示全部楼层
jzb8736 发表于 2015-5-7 17:36
7楼说的对,可以先判断圆与矩形的位置关系,
因为你的前提是3个点都在矩形内,所以只要分以下两种情况讨 ...

好的,谢谢你的热心回答哈,明天试试

出0入0汤圆

 楼主| 发表于 2015-5-7 18:42:00 | 显示全部楼层
jacky_yhy 发表于 2015-5-7 16:51
不是,你把那个圆弧画完整了,那个十字线会与圆弧有4个交点。你求出交点的坐标就行了啊。不管怎样圆与矩 ...

好的,我明天试试,谢谢哈

出0入0汤圆

 楼主| 发表于 2015-5-7 18:46:03 | 显示全部楼层
tam2907 发表于 2015-5-7 16:27
求圆心半径,判断优弧/劣弧,取该圆弧Xmax,Xmin,Ymax,Ymin,再与矩形四边比较。 ...

楼下的方法感觉没问题哈,你的好像计算比较多。不过还是谢谢哈

出0入0汤圆

发表于 2015-5-7 19:36:39 | 显示全部楼层
jacky_yhy 发表于 2015-5-7 15:13
不是,你把那个圆弧画完整了,那个十字线会与圆弧有4个交点。你求出交点的坐标就行了啊。不管怎样圆与矩 ...

不对吧,有交点在外面并不等同于圆弧有交点,  但是有交点一定有点在边上或者外面, 这是个包含的集合,,

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2015-5-7 19:55:10 | 显示全部楼层
Vmao 发表于 2015-5-7 19:36
不对吧,有交点在外面并不等同于圆弧有交点,  但是有交点一定有点在边上或者外面, 这是个包含的集合, ...

仔细读

出0入0汤圆

发表于 2015-5-7 19:58:54 | 显示全部楼层
7楼的方法好,剩下的问题就是求极值,  方法建议采用 求出圆心 然后 用查表 法  结合画十字 分

弧在一个象限内  在两个象限内 三个象限内    四个现象内  这样就好求了 不用算方程 直接比较就行了

出0入0汤圆

发表于 2015-5-7 22:10:53 | 显示全部楼层
抱歉 我说的7楼 其实是现在5楼的@jacky_yhy   之前可能说网页刷新问题,jacky_yhy显示在7楼               

出0入0汤圆

发表于 2015-5-7 22:33:41 | 显示全部楼层
三点里面找两对 两点的垂直平分线 垂直平分线的交点就是圆心,然后算出半径,得出整圆的上下左右四个极限点的位置,就可以判断是否超出矩形区域了;
题外话:又看到LZ了,你的头像不知道恶心了我几次了!!!

出0入0汤圆

 楼主| 发表于 2015-5-8 11:48:17 | 显示全部楼层
youmu 发表于 2015-5-7 22:33
三点里面找两对 两点的垂直平分线 垂直平分线的交点就是圆心,然后算出半径,得出整圆的上下左右四个极限点 ...

哈哈哈,你的承受能力也太弱了吧
另外你的这个方法是判断圆,不是判断圆弧;圆弧毕竟不是一个完整的圆,比较费解一点。
代码我已经弄出来了:
                    if(!outside_rectangle && (x0+Arc_R)>(DF_draw_x_start+DF_draw_wide))
                    {
                        if((x3 > x1)||(x3 > x2)||((y0 > y1)&&(y0 > y2)||(y0 < y1)&&(y0 < y2)))
                            outside_rectangle = 1;  
                    }
                    if(!outside_rectangle && (y0+Arc_R)>(DF_draw_y_start+DF_draw_hight))
                    {
                        if((y3 > y1)||(y3 > y2)||((x0 > x1)&&(x0 > x2)||(x0 < x1)&&(x0 < x2)))
                            outside_rectangle = 1;  
                    }
                    if(!outside_rectangle && ((int)x0-(int)Arc_R)<DF_draw_x_start)
                    {
                        if((x3 < x1)||(x3 < x2)||((y0 > y1)&&(y0 > y2)||(y0 < y1)&&(y0 < y2)))
                            outside_rectangle = 1;
                    }
                    if(!en && ((int)y0-(int)Arc_R)<DF_draw_y_start)
                    {
                        if((y3 < y1)||(y3 < y2)||((x0 > x1)&&(x0 > x2)||(x0 < x1)&&(x0 < x2)))
                            outside_rectangle = 1;
                    }
(x1,y1)圆弧起点,(x2,y2)圆弧终点,(x3,y3)圆弧上的一个点,(x0,y0)圆弧中心坐标,
(DF_draw_x_start,DF_draw_y_start)矩形框起点坐标,(DF_draw_x_start+DF_draw_wide,DF_draw_y_start+DF_draw_hight)矩形框终点坐标。
outside_rectangle 为1则圆弧跟矩形有交点

出0入0汤圆

发表于 2015-5-8 12:58:54 | 显示全部楼层
huangguimina4 发表于 2015-5-8 11:48
哈哈哈,你的承受能力也太弱了吧
另外你的这个方法是判断圆,不是判断圆弧;圆弧毕竟不是一个完 ...

感觉全身有东西在挠一样,by the way,我理解错题目了

出85入85汤圆

发表于 2015-5-12 10:05:25 | 显示全部楼层
能不能转化为极坐标,然后统一处理?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 15:01

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表