所以让我们假设我有一个10x10的网格(可以是任意大小,但只是为了示例10的缘故),有了这个网格,就有3个点标记三角形的顶点(同样可以是任意形状的任意数量的点)。
所以我的问题是…有没有一种方法可以只提供这些信息,以编程方式确定某个给定的坐标是否在该形状内?
以免说坐标是3,2-7,3-5,5。当我在给定的网格上迭代时,我能找出这些点内的单元格吗?
最佳答案
将p称为要检查的点,s1,s2,…,sn为形状的n个顶点。
假设所有i的P≠Si。
P在边界上吗?
如果1为否,则随机选择一条通过P的线L
选择一个在多边形之外的点f
从f开始,沿着l与形状的交集顺序,直到到达p(称为f,…,p顺序)
数一数序列f,…,p,将值存储为m
如果m是偶数,则p在多边形中,否则p不在多边形中
注:通过引入起点f,我们改变了the point in polygon algorithm description on wikipedia中提到的奇偶性。