社区
数据结构与算法
帖子详情
如何判断一个点是否在一个不保证为凸的多边形内呢??
nandizhu
2009-10-01 05:08:17
如题。。。。。。
...全文
460
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
打赏
举报
回复
扫描线算法
凸
多边形
的三角剖分
设P是
一个
有n个顶点的
凸
多边形
,P中的弦是P中连接两个非相邻顶点的线段。用P中的(n-3)条弦将P剖分成(n-2)个三角形(如下图所示)。使得(n-3)条弦的长度之和最小的三角形剖分称为最优三角剖分。
opencv 随机
凸
多边形
构建源代码
用opencv构建
凸
多边形
的源代码工程,有详细的源代码和创建好的工程项目
一种简单的
凸
多边形
三角形网格生成
一种基于delaunay算法的
凸
多边形
三角网格划分的实现
射线法
判断
点在
多边形
内[可运行源码]
本篇博客详细介绍了使用射线法
判断
一个
点
是否
位于
多边形
内部的算法,并通过C++代码实现了该算法。射线法的核心思路是从目标点引出一条水平射线,计算该射线与
多边形
各边的交点数量。若交点数量为奇数,则点在
多边形
内;若为偶数,则在
多边形
外。文章还特别讨论了射线经过
多边形
顶点时的特殊情况处理,并提供了完整的C++实现代码,包括点在线段上的
判断
、线段相交
判断
以及主函数中的
多边形
定义和测试用例。该算法适用于凹
多边形
和
凸
多边形
,具有较好的通用性和实用性。
【在
凸
多边形
的图像中查找顶点】估计具有已知顶点数的像素化
凸
多边形
角点研究附Matlab代码.rar
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
数据结构与算法
33,028
社区成员
35,337
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章