C 六面体角点坐标的有序排列算法

C 六面体角点坐标的有序排列算法,c,algorithm,C,Algorithm,我有一组随机排列的8个六面体角涡 (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) 我需要算法来按顺序排列这些点。对于eg,首先我要打印正面的4个点,然后打印背面的其他4个点(都是顺时针方向)。上述点的间距是均匀的(就像一个立方体)。我需要六面体的算法,你要

我有一组随机排列的8个六面体角涡

(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)
我需要算法来按顺序排列这些点。对于eg,首先我要打印正面的4个点,然后打印背面的其他4个点(都是顺时针方向)。上述点的间距是均匀的(就像一个
立方体
)。我需要六面体的算法,你要求的“算法”实际上是对顶点的简单排序,这样它们就会按照你想要的方式排序。以下函数执行此操作:

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;
    }
}
void order_hexa(双倍积分[8][3])
{
双tmp;
int i,j,k,l,m,n=8;
k=n-1;//k保持最后一次交换的位置。所有较高的元素都已排序。
而(k>0)
{
l=0;
对于(j=0;j点[j+1][2]
||(/*x*/点[j][2]==点[j+1][2]&点[j][0]>点[j+1][0])
||(/*y*/点[j][2]==点[j+1][2]&点[j][0]==点[j+1][0]&点[j][1]>点[j+1][1]))
{

对于(m=0;m),则需要根据坐标系定义“前方”和“顺时针”的含义.但在任何情况下,您真的需要重新排列此特定列表吗?为什么不使用min/max获取六面体的范围,然后打印出代表这些面的新点?欢迎使用堆栈溢出。向我们展示代码,您已经完成的操作。是否有其他约束?六面体是否始终在(0,0,0)处有一个角这意味着使用这个词可能不是你想要的,因为它不需要有8个顶点。也许你应该使用这个词。