Processing的shapes3d库中的shapes3d.utils.P_Bezier3D类

来源:互联网 发布:单片机和arm区别 编辑:程序博客网 时间:2024/06/10 03:27

以下是文字是根据帮助文件得来的,如果有出入请大神指正

这个类用于描述三维空间中的单条Bezier曲线(大于等于2阶--Bezier曲线的除数等于控制点数),其主要目的是用于方便的保持(maintain)三维空间中Bezier曲线的控制点集,该类的对象在shapes3d库中被BezTube类用于创建一个tube,这个tube沿着y轴[0,1,0]旋转弯曲。

阶次图形(Degree Shape)

2 直线

3 二次 bezier

4 三次 bezier

以此类推

也可以被用作Extrusion的路径

以下例程是本人测试用例,展示了BezTube类是如何被P_Bezier3D控制的

import peasy.*;import shapes3d.*;import shapes3d.utils.*;PVector[] v=new PVector[]{new PVector(10,0,0),new PVector(200,0,0)};BezTube bzt;P_Bezier3D pbz3d;PeasyCam cam;int degree;void setup(){  cam=new PeasyCam(this,300);size(800,600,P3D);//P_Bezier3D pbz3d=new P_Bezier3D(v,v.length);//bzt=new BezTube(this,pbz3d,20,10,15);//bzt.stroke(color(255));//bzt.drawMode(BezTube.WIRE);//frameRate(30);}void draw(){  background(0);  pbz3d=new P_Bezier3D(v,v.length);bzt=new BezTube(this,pbz3d,20,10,15);bzt.stroke(color(255));bzt.drawMode(BezTube.WIRE);lights();  bzt.draw();}void keyPressed(){ degree++; if(degree%3==0)  v=new PVector[]{new PVector(10,0,0),new PVector(200,0,0)};//两个控制点的Bezier是一条直线 if(degree%3==1)   v=new PVector[]{new PVector(10,0,0),new PVector(200,-100,0),new PVector(300,100,0)};//三个控制点的Bezier为二次曲线 if(degree%3==2)   v=new PVector[]{new PVector(10,0,0),new PVector(200,-100,0),new PVector(300,100,0),new PVector(400,0,0)};//四个控制点的Bezier为三次曲线}


0 0