如何判断一个点是否在一个不保证为凸的多边形内呢??

nandizhu 2009-10-01 05:08:17
如题。。。。。。
...全文
458 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
chj_2003 2009-10-02
  • 打赏
  • 举报
回复
如果我们计算出这个非凸多边形的面积,那么问题更容易求解。
我们可以计算这个点与非凸多边形的任意两个顶点所围成的三角形面积之和。如果这个面积等于非凸多边形面积,则这一点在多边形内部。如果大于,则属于多边形外部。(很容易证明)
gamedragon 2009-10-02
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 arong1234 的回复:]
无论什么多边形,分割很容易啊?
以邻接三点为一组,可以构成三角形,这样(1,2,3), (3,4,5),(5,6,7)...分别构成三角形
这些三角形去了以后,内部又是一个多边形,采用上述方法再抽取三角形。
而下一次多边形的顶点数等于上一次多边形顶点数减去这一轮已经去掉的三角形的个数,因此这个算法是收敛的。
[/Quote]
一个“凹”字形就是个反例了。邻接三点构成的三角形,不一定就位于多边形内部。
最简单就是扫描线算法,也就是4楼5楼说的算法,跟顶点相交是作为一种特殊情况处理。
arong1234 2009-10-02
  • 打赏
  • 举报
回复
你说的对,我方法是错误的
[Quote=引用 12 楼 chj_2003 的回复:]
引用 2 楼 arong1234 的回复:
多边形首先分割成三角形,然后用这些三角形判断是否在内部


凸多边形可以这样解决,非凸多边形就未必了。因为在多边形的凹口的顶点和邻近两个顶点的三角形是在多边形外部的。所以,这个点既是在三角形内部,也不能说明在多边形内部。

方法1:先对非凸多边形进行补形,使之成为凸多边形,然后进行判断。如果在凸多边形外部,则一定非凸多边形外部。如果在凸多边形内部,再判断这个点是否在所补的这个图形内部,如果是,则表示这个点在非凸多边形外部,如果不是,则在内部。
这样,可以将这个问题转化成多个“ 判断一个点是否在一个凸多边形内??”的问题。

方法2:先判断非凸多边形的凹点是否相邻或唯一。如果凹点相邻或者唯一,则将凹点与任意一个不相邻的顶点连接,将非凸多边形转换成两个凸多边形。如果凹点不唯一且不相邻,则所有的邻近的凹点连接,构成一个新的多变形,和多个三角形。如果新的多变心仍然是非凸多边形,则重复上述步骤,直到新的多边形为凸多边形。这样,也可以将这个问题转化成多个“ 判断一个点是否在一个凸多边形内??”的问题。

[/Quote]
zeroieme 2009-10-02
  • 打赏
  • 举报
回复
奇偶性
wenzheng38 2009-10-02
  • 打赏
  • 举报
回复
题目都说是凸多边形了
用该点顺序链接多边形的定点,组成多个三角形
用面积公式判断,所有三角形面积之和大于凸多边形面积之和,说明该点在凸多边形外
否则就在凸多边形上或者里面
ACgirl 2009-10-02
  • 打赏
  • 举报
回复
你的所谓拆分三角形的办法不但编写复杂并且效率还低,还要向量叉乘判方向
ACgirl 2009-10-02
  • 打赏
  • 举报
回复
那个是特殊情况,不是极端情况,不是反例,谢谢
chj_2003 2009-10-02
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 arong1234 的回复:]
多边形首先分割成三角形,然后用这些三角形判断是否在内部

[/Quote]
凸多边形可以这样解决,非凸多边形就未必了。因为在多边形的凹口的顶点和邻近两个顶点的三角形是在多边形外部的。所以,这个点既是在三角形内部,也不能说明在多边形内部。

方法1:先对非凸多边形进行补形,使之成为凸多边形,然后进行判断。如果在凸多边形外部,则一定非凸多边形外部。如果在凸多边形内部,再判断这个点是否在所补的这个图形内部,如果是,则表示这个点在非凸多边形外部,如果不是,则在内部。
这样,可以将这个问题转化成多个“ 判断一个点是否在一个凸多边形内??”的问题。

方法2:先判断非凸多边形的凹点是否相邻或唯一。如果凹点相邻或者唯一,则将凹点与任意一个不相邻的顶点连接,将非凸多边形转换成两个凸多边形。如果凹点不唯一且不相邻,则所有的邻近的凹点连接,构成一个新的多变形,和多个三角形。如果新的多变心仍然是非凸多边形,则重复上述步骤,直到新的多边形为凸多边形。这样,也可以将这个问题转化成多个“ 判断一个点是否在一个凸多边形内??”的问题。
arong1234 2009-10-01
  • 打赏
  • 举报
回复
无论什么多边形,分割很容易啊?
以邻接三点为一组,可以构成三角形,这样(1,2,3), (3,4,5),(5,6,7)...分别构成三角形
这些三角形去了以后,内部又是一个多边形,采用上述方法再抽取三角形。
而下一次多边形的顶点数等于上一次多边形顶点数减去这一轮已经去掉的三角形的个数,因此这个算法是收敛的。
[Quote=引用 3 楼 gamedragon 的回复:]
引用 2 楼 arong1234 的回复:
多边形首先分割成三角形,然后用这些三角形判断是否在内部

那还要先解决非凸多边形分割问题。
[/Quote]
arong1234 2009-10-01
  • 打赏
  • 举报
回复
一个极端的情况:射线交于几个边以后交于一个顶点,这就错了
[Quote=引用 5 楼 acgirl 的回复:]
完全没必要搞这么复杂!!

只要以那个点向X方向做一条射线,看这条射线和那个多边形的边有多少个交点,奇数个则在里面,偶数个则在外面
[/Quote]
ACgirl 2009-10-01
  • 打赏
  • 举报
回复
完全没必要搞这么复杂!!

只要以那个点向X方向做一条射线,看这条射线和那个多边形的边有多少个交点,奇数个则在里面,偶数个则在外面
butwang 2009-10-01
  • 打赏
  • 举报
回复
以闭合直线多边形内一点为坐标原点,则x,y轴和多边形交点数都为偶(在一般情况下,),不考虑边,边的交点的情况。
gamedragon 2009-10-01
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 arong1234 的回复:]
多边形首先分割成三角形,然后用这些三角形判断是否在内部
[/Quote]
那还要先解决非凸多边形分割问题。
arong1234 2009-10-01
  • 打赏
  • 举报
回复
多边形首先分割成三角形,然后用这些三角形判断是否在内部
gamedragon 2009-10-01
  • 打赏
  • 举报
回复
扫描线算法

33,028

社区成员

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

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