最佳答案
如果栅格适合您,请计算边与线的所有交叉点(每条线的交叉点列表)。在光栅线之间放置水平线,所以[对于正方形]上面的线没有边缘交叉点,下面的线有两个交叉点。
现在每个交叉点从左到右遍历每一行,从“外部”开始,然后反转当前状态的每个交叉点。
(顺便说一句,您可能会断言您也在“外部”结束......当然我说的是无限 x-res,您可能会进一步将其限制为某个固定分辨率,但计算从任何地方开始是第一个路口,我会跑到最后一个路口,只是为了那个断言检查)
正确获得几乎水平的线和两个边缘之间的连接可能很棘手(想象星形的尖锐末端,在相同的光栅像素处上下移动,只有 0.1 像素的 x 坐标差异等) .
我可能会在纸上画一些图,如果简单的数学就可以了,或者需要一些极端情况的逻辑,然后进行大量的单元测试。
如果你想要完整的 vector ,它基本上是一样的,只是它不是每条线,而是每条边的每一端 y 坐标(创建虚拟线)来计算与其他边的所有交点。
实际上,这可能更容易编写,但将结果应用到光栅图像上可能会更难。恕我直言(远非“确定”,我已经很久没有这样做了)。
关于c++ - 如何用奇偶规则填充多边形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38569250/