繁体   English   中英

六面体角点坐标顺序排列算法

[英]algorithm for arranging coordinates of corner points of a hexahedron in order

我有一组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算法。

您要求的“算法”实际上是对顶点的简单排序,以便按照您想要的方式对其进行排序。 以下功能可以做到这一点:

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个元素)的样本,它是有效的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM