huangguimina4 发表于 2015-5-7 15:13:53

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

如题,有没有最简单方法算法呢?单片机计算的,联立解方程什么计算量太大了。各位有什么好的意见么?

jacky_yhy 发表于 2015-5-7 15:45:26

求圆心,求半径。这两个运算量都不大。圆心已知半径已知,接下来有无交点判断就容易了。前提是那个弧线确定额是一个圆

huangguimina4 发表于 2015-5-7 15:52:23

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

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

jacky_yhy 发表于 2015-5-7 16:00:44

本帖最后由 jacky_yhy 于 2015-5-7 16:02 编辑

huangguimina4 发表于 2015-5-7 15:52
圆心、半径都知道了,就是判断相不相交,圆肯定好判断。现在是圆的一部分-圆弧。这个难搞。 ...

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

huangguimina4 发表于 2015-5-7 16:17:04

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

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

tam2907 发表于 2015-5-7 16:27:52

求圆心半径,判断优弧/劣弧,取该圆弧Xmax,Xmin,Ymax,Ymin,再与矩形四边比较。

jacky_yhy 发表于 2015-5-7 15:13:54

本帖最后由 jacky_yhy 于 2015-5-7 16:56 编辑

huangguimina4 发表于 2015-5-7 16:17
还是不怎么明白,是这样吗?

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

jzb8736 发表于 2015-5-7 17:36:37

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

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

jzb8736 发表于 2015-5-7 17:37:54

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

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

huangguimina4 发表于 2015-5-7 18:41:14

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

好的,谢谢你的热心回答哈,明天试试{:lol:}

huangguimina4 发表于 2015-5-7 18:42:00

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

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

huangguimina4 发表于 2015-5-7 18:46:03

tam2907 发表于 2015-5-7 16:27
求圆心半径,判断优弧/劣弧,取该圆弧Xmax,Xmin,Ymax,Ymin,再与矩形四边比较。 ...

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

Vmao 发表于 2015-5-7 19:36:39

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

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

jacky_yhy 发表于 2015-5-7 19:55:10

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

仔细读{:sweat:}

Vmao 发表于 2015-5-7 19:58:54

7楼的方法好,剩下的问题就是求极值,方法建议采用 求出圆心 然后 用查表 法结合画十字 分

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

jzb8736 发表于 2015-5-7 22:10:53

抱歉 我说的7楼 其实是现在5楼的@jacky_yhy   之前可能说网页刷新问题,jacky_yhy显示在7楼               

youmu 发表于 2015-5-7 22:33:41

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

huangguimina4 发表于 2015-5-8 11:48:17

youmu 发表于 2015-5-7 22:33
三点里面找两对 两点的垂直平分线 垂直平分线的交点就是圆心,然后算出半径,得出整圆的上下左右四个极限点 ...

哈哈哈,你的承受能力也太弱了吧{:lol:}
另外你的这个方法是判断圆,不是判断圆弧;圆弧毕竟不是一个完整的圆,比较费解一点。
代码我已经弄出来了:
                  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则圆弧跟矩形有交点

youmu 发表于 2015-5-8 12:58:54

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

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

zwhzwh_11 发表于 2015-5-12 10:05:25

能不能转化为极坐标,然后统一处理?
页: [1]
查看完整版本: 矩形内画三点圆弧,如何判断他们有没交点???