![]() |
1
7
后续意见: 我试着用ASCII来画这个,但它可能看起来像积垢。Bresenham's可以用来绘制一个填充多边形,方法是拾取一个起始边,然后在画布上迭代移动一条与该点平行的Bresenham线。
所以。。。你用1-2线作为你的出发线。通过使用线1-3和2-4作为起点/终点来计算填充线的起点。为每个点开始一个bresenham计算,并在这两点之间绘制另一个bresenham。有点像:
等。。。直到你到达这两条线的尽头。在这种情况下,这将是当较低的起点达到(4)。在这一点上,你开始迭代4,3行,直到你到达点3和两个起点,你就完成了。
其中,虚线是沿1-3和2-4计算的起点,斜线是填充线。
|
![]() |
2
4
你可以看看 Michael Abrash's articles 关于Dobbs博士关于多边形填充/光栅等,它使用定点数学 |
![]() |
3
3
托马斯,如果你有一个Bresenham线绘制算法可用,那么使用它作为进一步增强的基础:用一条横切线穿过每个顶点,将多边形划分为子多边形。然后,使用Bresenham开始跟踪这些子多边形的左右两侧。这样你就有了多边形中每条扫描线的2个端点。 |
![]() |
4
1
我将首先将多边形转换为三角形的集合并渲染它们,因为三角形很容易通过扫描线渲染。尽管如此,还是有一些细节。
|
![]() |
5
1
把问题分成两部分可能更容易。首先,定位/编写绘制和填充三角形的算法。其次,编写一个算法,将任意多边形分解为三角形(使用不同的顶点组合)。
要绘制/填充三角形,请使用Bresenham的直线算法同时在点0和点1之间以及点1和点2之间绘制一条直线。对于每个输入点
编辑:
|
![]() |
user1424739 · 如何获得子地块的绘图区域大小? 2 年前 |
![]() |
Nor-s · 如何使用ASIMP正确加载模型? 2 年前 |
![]() |
Makogan · 3D纹理大小影响程序输出,不会引发错误 6 年前 |
![]() |
Karsten W. · 底部R中的旋转箭头 6 年前 |
|
168grani · Matplotlib图形的线条平滑 6 年前 |