新手询问两个多边形相交的检测

beginera 2008-04-17 10:33:26
新手,想不出来啊,数学好烂,最好能给段关键代码,不要用API实现的。
搜了一下,好像都没有代码,都是理论,还是希望能看到理论和代码一起的东西啊,另外看到好像提到什么效率的问题,要先做box做检测,然后再检测多边形是么?不太懂,2D游戏学习新手,所以这第一关多边形检测就卡住了,请大家帮忙!
...全文
232 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
Kratos 2008-04-18
  • 打赏
  • 举报
回复
2d游戏没这么多检查吧,就是测矩形重叠状况,2L已经讲了。。
liveforme 2008-04-18
  • 打赏
  • 举报
回复
最简单就是判断点了,多边形每个点去判断下,要是不要求很高的效率的话,还是很实在的方法
Unknowm 2008-04-18
  • 打赏
  • 举报
回复
http://blog.csdn.net/Unknowm/archive/2006/05/08/713666.aspx
http://blog.csdn.net/Unknowm/archive/2006/05/14/728735.aspx
http://blog.csdn.net/Unknowm/archive/2006/05/15/740106.aspx
http://blog.csdn.net/Unknowm/archive/2006/05/18/743418.aspx
http://blog.csdn.net/Unknowm/archive/2006/05/23/752102.aspx
http://blog.csdn.net/Unknowm/archive/2006/06/04/773197.aspx
xbt746 2008-04-18
  • 打赏
  • 举报
回复
可以查一下地理信息算法
上面基本上都有
Dancing_Sea 2008-04-18
  • 打赏
  • 举报
回复
检测两组线是否相交。

平面线段相交就可以。
不必要判断凹凸性
ryfdizuo 2008-04-17
  • 打赏
  • 举报
回复

可以去Google一下:AABB2
判断多边形的凹凸性,
凹的还要分解,
andy_cai 2008-04-17
  • 打赏
  • 举报
回复
噢,我的方法居然也有人说
我是临时想到了...

帮你想想也是蛮费脑的呢

编写能用的代码的话要考虑各种情况,太烦

beginera 2008-04-17
  • 打赏
  • 举报
回复
6楼,您说的那个我有代码,也是做法线的,不过是鸟语的,不能完全看懂,其实根本原因是我数学有点烂...所以才发的这贴希望有人能理论和代码都讲一下。

7楼,您说的那个是点包含在多边形内吧?这个我也有代码,不过我想要的是两个多边形的判断,如果是多边形各点已经,比如五边形就要算和另一个多边形进行5次判断么?
beginera 2008-04-17
  • 打赏
  • 举报
回复
啊,另外二楼说的是rect是矩形吧,我想要多边形的,矩形的那个我理解,也有代码了。
beginera 2008-04-17
  • 打赏
  • 举报
回复
谢谢,我去搜搜计算几何一书,忘了说了,这个多边形就是突多边形就行。谢谢回复,我试试先。
haohaisen 2008-04-17
  • 打赏
  • 举报
回复
同意2楼,有空可看看《计算几何》——周培德
tgh621 2008-04-17
  • 打赏
  • 举报
回复
直接判断相互判断一个多边行的关键点是否在另一个多变兴中赛
andy_cai 2008-04-17
  • 打赏
  • 举报
回复
题目好大,多边形有各种方式的
个人觉得从相交点处理比较好,顺时针或者逆时针方向处理
从点出发顺着各自边走,判断各自边的法向分量(总结下规律)判断是不是重叠区域

如果多边形都未知的话,那就要先找出多边形的各点坐标了

有理论就已经很不错,有源代码估计大家也不会去怎么理睬理论
oo 2008-04-17
  • 打赏
  • 举报
回复
晕,想简单了
我说的是特例
tsst 2008-04-17
  • 打赏
  • 举报
回复
晕,楼上OO说的我怎么看不明白
tsst 2008-04-17
  • 打赏
  • 举报
回复
除去一些特殊情况的抽离外,基本的方法都是判断边与另一个多边形的关系了!
这样问题就转化为edge和poly的关系了嘿嘿!
具体实现有空探讨一下了,嘿!
oo 2008-04-17
  • 打赏
  • 举报
回复
更正一下,如果都为0,则相交于一个点。
oo 2008-04-17
  • 打赏
  • 举报
回复
left为两个rect最大的
right为两个rect最小的
top为两个rect最大的
bottom为两个rect最小的

width为right-left
height为bottom-top
如果width和height都为正则相交,如果一个为0,另一个为正则一条边重合,如果有负数则不相交
都为0?除非原来的不是rect

64,715

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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