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

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

这个类用于描述三维空间中的单条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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值