我有一个带有3个顶点的三角形,即:(x1,y1,z1); (x2,y2,z2)和(x3,y3,z3)。
我正在使用Bresenhams 3D Line算法,目前用于在三角形的两个顶点之间生成3D点,具体取决于分辨率大小(resSize)。
void Bresenham3Algo(float x0, float y0, float z0, float x1, float y1, float z1)
{
float dx = Math.Abs(x1 - x0);
float sx = x0 < x1 ? resSize : -resSize;
float dy = Math.Abs(y1 - y0);
float sy = y0 < y1 ? resSize : -resSize;
float dz = Math.Abs(z1 - z0);
float sz = z0 < z1 ? resSize : -resSize;
float dm = Math.Max(dx, Math.Max(dy, dz)), i = dm;
x1 = y1 = z1 = dm / 2;
for (; ; )
{
Console.WriteLine(x0,y0,z0); //Printing points here
if (i <= 0) break;
x1 -= dx; if (x1 < 0) { x1 += dm; x0 += sx; }
y1 -= dy; if (y1 < 0) { y1 += dm; y0 += sy; }
z1 -= dz; if (z1 < 0) { z1 += dm; z0 += sz; }
i -= resSize;
}
}
所以,截至目前,我正在调用上述函数三次,以在三个三角边的边界上生成3D采样点。
Bresenham3Algo(x1,y1,z1,x2,y2,z2);
Bresenham3Algo(x2,y2,z2,x3,y3,z3);
Bresenham3Algo(x3,y3,z3,x1,y1,z1);
我发现很难找到位于三角形内部的内部采样点。
例如,如果我有顶点(0,0,0); (5,0,0)和(3,3,0),在上述功能的帮助下,我在三个三角形边上找到3D点,即
(0,0,0),(1,0,0),(2,0,0),(3,0,0),(4,0,0),(5,0,0) - &GT;第一个边缘
(3,3,0),(4,1,0),(4,2,0),(5,0,0) - &gt;第二边
(0,0,0),(1,1,0),(2,2,0),(3,3,0) - >第三边缘
现在,我需要找到位于三角形内部的内部3D采样点,即(2,1,0),(3,1,0),(3,2,0)
如果有人可以帮我解决这个问题,我会很高兴的。
提前致谢!
答案 0 :(得分:0)
假设您没有被约束到常规网格,请执行以下操作: