3D创意 C++

多面体

多面体函数:polyhedron,其中:points 是顶点,而 triangles 是顶点所围成的三角形。多面体就是不停的贴三角形而成的!这也是计算机处理立体几何的基本算法!

参考下面的代码,下面是一个三角体,有6个顶点,5个面,其中矩形的面由2个三角面组成,最后triangles 里就有8个三角面的数组;




function main(){

 var x=10;       //长

    var y=10;       //宽
    var h=2;        //高
    return polyhedron({      // openscad-like (e.g. pyramid)
  points: [ [0,0,0],[0,0,h],[x,0,h],[x,0,0], // the four points at base
            [0,y,0],[0,y,h] ],                                  // the apex point 
  triangles: [ [0,1,2],[0,2,3],
                [1,5,2],
                [0,3,4],
                [1,0,4],[1,4,5],
                [3,2,5],[5,4,3]// each triangle side
                ]
        

    }); 

}


一般多面体极其难以理解,需要通过函数的方式封装成通用函数才好调用。

例如:

//多面体测试
function getParameterDefinitions () {
  return ([
    {name: 'x', type: 'float', initial: 40, step: 0.5, caption: '底板长'},
    {name: 'y', type: 'float', initial: 40, step:0.5, caption: '上板长'},
    {name: 'h', type: 'float', initial: 3, step: 0.1, caption: '厚度'},
    {name: 'z', type: 'float', initial: 40, step: 0.5, caption: '三角件长'},
    {name: 'a', type: 'float', initial: 40, step: 0.5, caption: '长度'}
    //{name: 'z', type: 'choice',caption:'是否空心', initial:0, values: [0, 1], captions:['否','是']}
    ]);
}
function main(parameters){
    //return sjx(20,20,2);
    return zhijia(parameters.x,parameters.y,parameters.h,parameters.z,parameters.a).translate([-parameters.x/2,-parameters.a/2,0]);
}

//x:长;y:宽: h: 厚, z:角件的长度;m:宽度
function zhijia(x,y,h,z,m=10){
    var c=z; //角件长度
    //var r=[];
    var a=cube([x,m,h]);
    var b=cube([h,m,y]);
    var c1=sjx(c,c,h).rotateX(90).translate([0,h,0]);
    var c2=sjx(c,c,h).rotateX(90).translate([0,m,0]);
    var r=union(a,b,c1,c2);
    return r;
}
/*
用多面体重画三角体
x: 长;单位:mm
y: 宽; 单位:mm
h: 厚;  单位: mm
*/
function sjx(x,y,h){
    //一共是:6个定点,5个面,8个三角形面
    //计算需要用右手螺旋法则,即大拇指指向后,采取逆时针方向旋转才可以准确的求出多面体
    return polyhedron({      // openscad-like (e.g. pyramid)
  points: [ [0,0,0],[0,0,h],[x,0,h],[x,0,0], // the four points at base
            [0,y,0],[0,y,h] ],                                  // the apex point 
  triangles: [ [0,1,2],[0,2,3],
                [1,5,2],
                [0,3,4],
                [1,0,4],[1,4,5],
                [3,2,5],[5,4,3]// each triangle side
                ]
        
    }); 
}

上面的代码核心就是用三角体组成的各种复杂图形,而三角体已经封装成了函数!


一个简单的多面体模型:

var a=polyhedron({
        points:[[0,0,0],[50,0,0],[0,50,0],[0,0,50]],
        //triangles:[[0,1,2],[1,0,3],[2,1,3],[0,2,3]]
        triangles:[[0,1,2],[3,1,0],[2,1,3],[0,2,3]]
    });
    return a;
注意上面的注释掉的triangles ,2个都是对的,看第2个面为什么 [1,0,3]和[3,1,0]都可以,但[0,1,3]就不行了?因为多面体需要从外面包围成闭合面,也就是从外面往里面看,需要是顺时针成面,而如果逆时针成面的话,从反方向就可以看到面。仔细体会。

     

码圣代码编程

打字练习

3D创意C++

进入比赛

创客中心

关于傲亚

傲亚CMS

傲亚物联网

我要合作

创客平台

南昌市红谷滩区名门世家2期8号楼608
aoyakefu
TEL:18720086320
kefu@1wwz.com

扫码关注公众号

扫码添加创始人

企业微信服务商