我需要一种算法来孵化与X轴线平行的随机多边形。 我开始写我认为是解决方案。 我的算法实现类似于(粗体步骤可能不正确):
结果如下:result 我需要一种方法来确定多边形内部是什么,什么不是,或者至少是什么算法 (我知道这是一个现有的alogirthm,但我无法在任何地方找到它)
答案 0 :(得分:2)
- 使用多边形的minY和maxY确定线的Y轴级别
- 对于每个Y轴水平,确定交叉点的X坐标。
- 对每个级别的交叉点的X进行排序
- 为每对X
在每个级别上绘制线条 醇>
你有正确的想法。假设对于步骤#3,您有一个xs = [x0, x1, x2, x3]
列表。然后,您需要从(x0, y)
到(x1, y)
以及从(x2, y)
到(x3, y)
绘制线条。您不希望从(x1, y)
到(x2, y)
绘制一条线。
如果仔细观察模式,您应该能够推广算法以绘制线段。
答案 1 :(得分:0)
对于防弹解决方案:
For all equally spaced Y in the range Ymin to Ymax:
Try all edges PiPj in turn (j is the successor of i):
if (Y >= Yi) != (Y >= Yj):
There is an intersection, compute and store the corresponding X
Sort the X's left to right
Draw all segments (X[2i], Y) to (X[2i+1], Y)
请务必按上述方式编写交叉点条件,这样可以保证在所有情况下都是偶数。
对于多边的多边形,当您扫描每个级别的整个多边形时,这是非常低效的。更有效的方法是使用扫描线方法:通过增加最低端点的纵坐标来对边进行排序。然后,当您增加Y时,将保持与当前Y相交的边列表。每次增加Y时,删除具有较低上端点的边,并插入具有较低下端点的边(如果边缘相交这两个条件,它只是跳过了。)