我有一组hexahedron
(0.0, 0.0, 0.0)
(0.0, 1.5, 0.0)
(1.5, 1.5, 0.0)
(1.5, 1.5, 1.5)
(0.0, 1.5, 1.5)
(1.5, 0.0, 1.5)
(1.5, 0.0, 0.0)
(0.0, 0.0, 1.5)
我需要算法来按顺序排列这些点。例如,首先我要打印正面的4个点然后打印背面的其他4个点(均为顺时针方向)。上述点均匀分布(如cube
)。我需要hexahedron
的算法。
答案 0 :(得分:0)
您要求的“算法”实际上是对顶点进行简单排序,以便按照您想要的方式对它们进行排序。以下功能执行此操作:
void order_hexa(double points[8][3])
{
double tmp;
int i,j,k,l,m,n=8;
k= n-1; // k holds position of last interchange. All higher elements are sorted.
while (k > 0)
{
l= 0;
for (j=0; j < k; j++)
{
if ( /*z*/ points[j][2] > points[j+1][2]
|| ( /*x*/ points[j][2] == points[j+1][2] && points[j][0] > points[j+1][0])
|| ( /*y*/ points[j][2] == points[j+1][2] && points[j][0] == points[j+1][0] && points[j][1] > points[j+1][1]) )
{
for (m=0; m<3; m++) {
tmp = points[j] [m];
points[j] [m]= points[j+1][m];
points[j+1][m]= tmp;
}
l= j;
}
}
k= l;
}
}
这是一个简单的冒泡排序。虽然冒泡排序通常较慢(O(n ^ 2)),但它对小样本有效,例如此处只有8个元素。