以随机顺序访问三角形中的点

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对,使得满足等式.

Eug*_*ota 3

由于您想保证访问每个像素一次且仅一次,因此最好根据像素而不是真正的三角形来考虑。您可以水平切片三角形并获得一堆水平扫描线。将扫描线连接在一起,您就将“三角形”转换成了一条长线。将点访问算法应用于长扫描线链。

顺便说一句,这种映射只需要发生在纸上,您所需要的只是一个可以沿虚拟扫描线给定 (t) 返回 (x, y) 的函数。

编辑:要将两个点转换为线段,您可以查找Bresenham 的扫描转换。将 3 条线段转换为一系列点后,您可以将所有点放入一个桶中,并按 y 对所有点进行分组。在相同的 y 值内,按 x 对点进行排序。y 值中最小的 x 是扫描线的起点,y 值中最大的 x 是扫描线的终点。这称为“扫描转换三角形”。如果你谷歌,你可以找到更多信息。