已知一个多边形的所有顶点坐标,如果确定一点是不是在这个多边形内?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了已知一个多边形的所有顶点坐标,如果确定一点是不是在这个多边形内?相关的知识,希望对你有一定的参考价值。

已知一个多边形的所有顶点坐标,如果确定一点是否在这个多边形内?
最好给出数学公式,及详细说明。谢谢。。。。
我需要公式做一些其他方面的应用。。。

分两种情况:凸多边形,这种很好解决,分别将该点与各顶点连线,如果该直线与多边形各边交点为1,说明点在凸多边形内,否则在外面.

凹多边形:拆成多个凸多边形来处理.首先将凹进去部分提取成单独的凸多边形,用上边方法判断点是否在其中,如果在则该在原凹多边形外面;否则要接着处理,将原凹多边形补全成凸的后,仍用上面方法判断即可.

这里面涉及判断凸凹的问题,可以跟据内角来判断!(如果后一条边与前条边的内角>180说明为凹多边形,因此要将该点提取出来单独算处理,关在原凹多边形中剔除此点)
这个问题,由于边数不确定,用公式不是很好表达的,用程序反而好处理些~~~
参考技术A 先在多边形外部找一个点,用线段连接此点与要考察的点,计算此线段与多边形边界相交的次数。如果为奇数,则在内部;反之则在外部。

在计算交点时如果交点是多边形顶点,相交次数可能算1次也可能算2次,依据是与该顶点相关的两条边是在这个线段的同侧还是异侧。 同算2次,异算1次。
参考技术B 毕业多少年啦

说明公式我要不会啦

但你可以把它放在CAD里
那结果就出来了

如何确定坐标是不是在多多边形内?

【中文标题】如何确定坐标是不是在多多边形内?【英文标题】:How can I determine a coordinate is within a mutilpolygon or not?如何确定坐标是否在多多边形内? 【发布时间】:2011-02-08 21:58:40 【问题描述】:

我们有一个 CSV 格式的数据库,其中包含所有县(在美国)及其由 SRID 和 MULTIPOLYGON 定义的边界。如何确定任何给定坐标(十进制纬度和经度),它属于哪个县。我们计划使用 MySQL 来存储数据并进行查询。

【问题讨论】:

【参考方案1】:

如果您的形状众多且复杂,则最好使用空间数据库。 PostGIS 是免费的,可以在 MySQL 支持的大多数平台上运行。空间数据库具有用于存储多边形的空间数据类型、包括查询数据库中某个点是否在多边形中的空间查询,以及使一切都相当高效的空间索引。

OTOH,如果您只处理少量相当简单的多边形,您可以使用普通数据库进行管理。我做过一次。我的做法:

有一个多边形表。每个多边形记录都包含主键、您需要与每个多边形一起存储的任何信息,以及多边形的边界框 - 最大和最小 x 和 y 值。

多边形的点存储在点表中,即多边形的子项。每个点记录都包含它所属的多边形的主键、一个序列号以及一个 x 和一个 y 值。

要查找可能包含点的多边形,请查询多边形表以查找可能包含该点的多边形 - 即该点位于其边界框内的多边形。这些候选多边形被读入内存,并检查每个多边形是否包含该点。

有许多算法。 http://en.wikipedia.org/wiki/Point_in_polygon

我使用了光线投射法,因为它很简单。从该点向任意方向画一条线到无穷远,并计算您截取的线段数。如果你穿过一个奇数,你的点就在多边形内。

【讨论】:

【参考方案2】:

试试 mysql 的地理扩展

http://dev.mysql.com/tech-resources/articles/4.1/gis-with-mysql.html

虽然带有 PostGIS 的 Postgres 是一个更成熟的地理数据库,如果您有选择,我会使用它。

【讨论】:

【参考方案3】:

也许this reference 会有所帮助。

【讨论】:

以上是关于已知一个多边形的所有顶点坐标,如果确定一点是不是在这个多边形内?的主要内容,如果未能解决你的问题,请参考以下文章

已知任意一个多边形的各个顶点的坐标,怎么去求该多边形的面积?(写下代码和思想--C语言)

已知多面体(全是三角形)的顶点坐标,如何判断空间一点是不是在多面体内?

如何判断一个点在一个矩形里边,已知点和矩形的坐标点位置。

已知空间三角形,四边形,或者五边形的顶点的三维坐标,如何遍历多边形内部的每个点。

已知四点坐标如何求四边形面积

多边形面积公式