必须有一组几何基元(即直线、曲线、圆、矩形,以及它们的填充形式)的矩阵表示。为了简单起见,您可能认为我们只处理行,所以答案已经在[SO]上了。因此矩形可以很容易地像素化不过,对于其他原语,我有两个问题:
1)如何对包含圆(闭合曲线)的曲线进行像素化?
2)如何对填充的简单/复杂形状(矩形、多个面片)进行像素化?
最简单的方法(目前正在使用)可能是利用可视化库(例如MatPlotLib
用于Python
)将结果(几何原语的映射)保存为磁盘(或ram)上的像素化图像,然后再将其用于感兴趣的目的。显然,这种方法可以处理任何复杂度,因为在背景中,不管它是什么(可视化器),输出都是2D image
,即2D matrix
。然而,在这种应用中出现了一些严重的问题:
1)程序很慢!
2)程序不规范,但严重依赖于可视化工具的设置,这通常是可视化工具的低级配置是不可能或难以设置的换言之,所使用的黑匣子缺乏对所需程序的控制。
最佳答案
你所做的叫做几何原语的“扫描转换”。
对于线段,您已经知道the Bresenham algorithm。
对于圆也有类似的方法,有点棘手(关于端点的处理)。
一般曲线是一个更广泛的话题你可以想到圆锥曲线,样条曲线或手绘一种方法是用折线近似它们。
要填充多边形,可以使用扫描线算法(考虑扫掠水平线并在与多边形轮廓的交点之间填充)。
要填充任意形状,一个选项是绘制轮廓并使用种子填充(从给定的内部点)。
您可以在http://www.cse.ohio-state.edu/~gurari/course/cis681/cis681Ch5.html找到相关材料。