如何判断一个点是多边形内部纹理

问题描述:

这似乎是一个相当被问到的问题 - !(听我说完先:)如何判断一个点是多边形内部纹理

我已经创建了Perlin杂多边形形状,它看起来像这样:

enter image description here

我需要生成从该阵列的点的质地。 (我使用Monogame/XNA,但我认为这个问题有点不可知)。

无论如何,研究这个问题告诉我,很多人使用raycasting to determine how many times a line crosses over the polygon shape(如果一次,它在里面,两次或零次,它在外面)。这是有道理的,但我想知道是否有更好的方法,因为我有所有的要点。 为我想填充的每个像素做一个小型光线投射似乎过分 - 这是唯一/最好的方法吗?

如果我有一个小广场500px的形象,我需要填写,我需要25万个单个像素,这似乎是一个可怕的很多做了光线投射。

如果你想为每个像素做到这一点,你可以用一个扫线:

开始从最上层的协调,从左至右检查水平射线。计算与多边形的所有交点并按x坐标排序。然后迭代线上的所有像素,并记住你是否在进出。每当遇到交叉路口时,切换到另一侧。如果某个像素处于,请设置纹理。如果没有,请忽略它。对于每条可能的水平线,从上到下执行此操作。

交点计算可以通过几种方式加以改进。例如。通过使用诸如网格,四叉树等的加速度数据结构或者通过检查之前的多边形的相交或接触边缘。然后,当你扫过这条线时,你已经知道哪条边会引起相交。