如何判断平面内的2个平行四边形是否相交?

skyblue2000 2018-03-20 09:21:13
请教大家,如何判断平面内的2个平行四边形是否相交?

特殊地,所有平行四边形之间都是有同一个倾斜率(侧面斜边倾斜角度一样)。 目前我用判断4条线段是否相交来实现,但似乎效率很低, 此判断是高频反复调用的,不知道是否有高效的算法实现。请赐教!

参考:
1.C语言平面几何6-判断线段是否与矩形范围有交集
http://blog.csdn.net/hbuxiaoshe/article/details/5833094

2.判断平行四边形相交的算法
https://bbs.csdn.net/topics/310263544

------------------------------------------------------------
我这又想到一个算法:
就是平行于x轴做射线,做射线的范围是两个图形在Y轴上的投影相交的部分。
如果第一次碰到第一图形,第二次碰到第二个图形,第三次又碰到第一个图形,那么两个图像相交。
我其中所说的碰到第一个图形,是只与第一个图形的线段相交。
如果第一次和第二次都是碰到的统一个图形,那么在做下一条射线。
遍历相交部分。
不知道我说清楚了吗?

------------------------------------------------------------
--以上描述是论坛一个帖子的留言方法,但我没看懂理解他的意思, 感觉射线投影这类可能有高效算法,请帮忙参考解释。

这个是经常遇到的问题吧,希望大家帮忙解决下, 有C/c++的关键逻辑代码更好。
...全文
1961 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
Symfund 2018-04-25
  • 打赏
  • 举报
回复
有那么复杂吗?两个平行四边形,共八个点,只需验证八个点中有一个点在另外一个平行四边形的内部即可,哈哈!!!!!
booksoon 2018-04-04
  • 打赏
  • 举报
回复
这样的运算量,就是用标准的线段相交判断还达不到性能的要求么?
真相重于对错 2018-03-28
  • 打赏
  • 举报
回复 1
把每个顶点投影到X轴,和Y轴上,判断区间重合。
sanredfish 2018-03-28
  • 打赏
  • 举报
回复
可以简化一下运算量: 先求平行四边形几何中心坐标,然后求两个中心的距离,如果你的平行四边形角度固定,你可以直接用两个乘法求到内接圆半径和外接圆半径,大于外接圆半径的一定不相交,小于内切圆半径的一定相交,剩下的再进行判决。 判决也可以简化只判两个图形内侧的点。(以几何中心为准的内侧)
tanta 2018-03-27
  • 打赏
  • 举报
回复
引用 8 楼 skyblue2000 的回复:
[quote=引用 7 楼 tanta 的回复:] [quote=引用 3 楼 skyblue2000 的回复:] 感谢2楼意见, 8次点在四边形内的运算不算少, 有没有其他的算法,
不要用通用的那种算法,那个复杂度太高,平行四边形本身特点,算点与对角斜率在临边斜率范围内即可,计算量不大。[/quote] 没理解你说的斜率范围, 能否给段关键的c代码,谢谢。[/quote] 懒得写了,给你写个伪码吧 设平行四边形顶点顺时针ABCD,点为O。 求AB、AD和CB、CD的斜率分别为Gab、Gad、Gcb、Gcd 求OA、OC的斜率分别是Goa、Goc 如果Goa在Gab、Gad之间,并且Goc在Gcb、Gcd之间 那么点O就一定在平行四边形ABCD内。
tanta 2018-03-26
  • 打赏
  • 举报
回复
引用 3 楼 skyblue2000 的回复:
感谢2楼意见, 8次点在四边形内的运算不算少, 有没有其他的算法,
不要用通用的那种算法,那个复杂度太高,平行四边形本身特点,算点与对角斜率在临边斜率范围内即可,计算量不大。
tanta 2018-03-26
  • 打赏
  • 举报
回复
引用 3 楼 skyblue2000 的回复:
感谢2楼意见, 8次点在四边形内的运算不算少, 有没有其他的算法,
平行四边形内部点的判断没那么复杂啊,不需要用到复杂的算法,算几次斜率而已。
skyblue2000 2018-03-26
  • 打赏
  • 举报
回复
引用 7 楼 tanta 的回复:
[quote=引用 3 楼 skyblue2000 的回复:] 感谢2楼意见, 8次点在四边形内的运算不算少, 有没有其他的算法,
不要用通用的那种算法,那个复杂度太高,平行四边形本身特点,算点与对角斜率在临边斜率范围内即可,计算量不大。[/quote] 没理解你说的斜率范围, 能否给段关键的c代码,谢谢。
skyblue2000 2018-03-25
  • 打赏
  • 举报
回复
引用 4 楼 ayalicer 的回复:
包含 算不算相交
算,包含是相交的一种
  • 打赏
  • 举报
回复
包含 算不算相交
skyblue2000 2018-03-23
  • 打赏
  • 举报
回复
感谢2楼意见, 8次点在四边形内的运算不算少, 有没有其他的算法,
tanta 2018-03-23
  • 打赏
  • 举报
回复
我有个想法,没有验证,不知可不可行。 原理:两个平行四边形相交,则其中一个平行四边形的某一顶点必在另一四边形内部或边界上(直觉,没证明过,不知道对不对) 如果上述原理正确,下面就很简单了,只要判断四边形的顶点是否在另一四边形内即可,共需循环8次。 判断某点是否在平行四边形内部也很简单,取平行四边形对角两个顶点与点的斜率是否在平行四边形顶点与相邻边斜率范围内即可。
skyblue2000 2018-03-22
  • 打赏
  • 举报
回复
好像没人气哦,顶一下,等回复。

33,027

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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