如何用等距水平线填充闭合多义线?

Zie*_*ezi 0 c++ algorithm computational-geometry

我需要编写和算法用水平等距线填充闭合多义线.

我用矩形圆圈做了类似的事情,这里是后者的代码片段:

// circle parameters: center(point(0).x, point(0).y), radius
int offsetX = point(0).x + radius;
int offsetY = point(0).y + radius;
for(int i = -radius; i < radius; i += spacing){
    int ry = i;
    int rx = sqrt(double(radius*radius - ry*ry));
    // the parameters are pair of coordinates of the horizontal line
    fl_line(offsetX - rx, offsetY + i, 
            offsetX + rx, offsetY + i);
}
Run Code Online (Sandbox Code Playgroud)

闭合多义线的情况下,额外的难度(对我而言)是水平线的坐标不会从单个方程(圆,矩形的高度等)中提取,而是从方程中提取.具有相同"y"坐标的线,不会连续匹配.

题:

  1. 你能否提供一些有关如何创建一个用水平线填充封闭多边形线的算法的见解?

Ste*_*ein 5

这只是扫描线算法(用于填充多边形)的特例:http://www.tutorialspoint.com/computer_graphics/polygon_filling_algorithm.htm

使用所需的步长(间距)将y从yMin(多边形的顶部)迭代到yMax.

对于每个y,找到与多边形线段的交点,按x坐标排序,用线连接每隔一对