首页 > 解决方案 > 计算平面的所有离散点

问题描述

我希望填充由三个点定义的平面上的所有点,以便:

例如,给定由点A(3, 0, 0)B(0, 3, 0)C(0, 0, 3)定义的平面 P :

我尝试过应用Bresenham 的 3d 线算法并将其扩展到平面绘图,但我无法弄清楚。

标签: 3dcomputational-geometryrasterizing

解决方案


扫描填充解决方案:

将三角形投影到XY并扫描填充它(考虑和和Y之间的所有整数纵坐标,并通过与边的交点找到每个的和;取所有中间的)。YminYmaxYXminXmaxX

然后检查对应Z的是否为整数(平面方程为a.X + b.Y + c.Z + d = 0)。

工作量与三角形的投影面积成正比。

你可以稍微加快这个过程,注意对于一个常数Y,你只使用丢番图方程的解a.X + c.Z = - d - b.Y。这个方程只有在gcd(a, c)除法时才有解d + b.Y,这限制了可能的Y


在您的情况下,平面是X + Y + Z = 3和投影三角形(0, 0), (3, 0), (0, 3)

通过填充,有十个网格点,其中三个角,六个点在边缘,一个在里面。对于所有这些点,Z是一个整数。(加速技术在这里不适用。)

(0, 0, 3), (1, 0, 2), (2, 0, 1), (3, 0, 0), 
(0, 1, 2), (1, 1, 1), (2, 1, 0),
(0, 2, 1), (1, 2, 0), 
(0, 3, 0).

推荐阅读