Pro*_*ack 5 language-agnostic algorithm math
对于由整数上的等式aX + bY <= c指定的直角三角形
我想以伪随机顺序一次一次地绘制三角形中的每个像素(*),而不存储先前命中点的列表.
我知道如何使用0到x之间的线段来完成此操作
沿着线选择一个随机点'o',
选择相对于x
重复的'p' 最多x次:O next =(O cur + P)MOD x
要对三角形执行此操作,我会
1.需要计算三角形sans列表中的像素数量
2.将整数0..points映射到ax,y对,它是三角形内的有效像素
我希望任何解决方案都可以推广到金字塔和更高维度的形状.
(*)我将CG项像素用于整数点X,Y对,使得满足等式.
由于您想保证访问每个像素一次且仅一次,因此最好根据像素而不是真正的三角形来考虑。您可以水平切片三角形并获得一堆水平扫描线。将扫描线连接在一起,您就将“三角形”转换成了一条长线。将点访问算法应用于长扫描线链。
顺便说一句,这种映射只需要发生在纸上,您所需要的只是一个可以沿虚拟扫描线给定 (t) 返回 (x, y) 的函数。
编辑:要将两个点转换为线段,您可以查找Bresenham 的扫描转换。将 3 条线段转换为一系列点后,您可以将所有点放入一个桶中,并按 y 对所有点进行分组。在相同的 y 值内,按 x 对点进行排序。y 值中最小的 x 是扫描线的起点,y 值中最大的 x 是扫描线的终点。这称为“扫描转换三角形”。如果你谷歌,你可以找到更多信息。