用于按顺序排列六面体角点坐标的算法

时间:2015-04-13 06:41:52

标签: c algorithm

我有一组hexahedron

随机排序的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)

我需要算法来按顺序排列这些点。例如,首先我要打印正面的4个点然后打印背面的其他4个点(均为顺时针方向)。上述点均匀分布(如cube)。我需要hexahedron的算法。

1 个答案:

答案 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个元素。