3Dサンプル(sketch_3D_sabani)スケッチ
3Dサンプル(sketch_3D_sabani)スケッチは以下となります。
//sketch_3D_Sabani
void setup()
{
size(640, 560, P3D);
}
void draw()
{
background(0, 256, 256);
lights();
translate(width / 2, height / 2);
rotateY(map(mouseX, 0, width, -PI/1, PI/1));
rotateX(map(mouseY, 0, height, PI/1, -PI/1));
//noStroke();
fill(240, 240, 230);
translate(0,0,200);
scale(3, 3, 3);
Sabani();//サバニ船型
}
void Sabani()//サバニ船型
{
int sides=5;//分割数
int Sn=28;//面数
int Nz=26;//Z分割数
float Pz=5.1;//Zピッチ
float Tan20=tan(20*PI/180);
float Kx[]={0.0201681,0.8286317,-0.0081566,0.0000220};
float Ky[]={16.307692,0.225165,-0.001703};
float[][] X=new float[5][Sn];
float[][] Y=new float[5][Sn];
float[] Z=new float[Sn];
float Zj;
int i,j;
for(i=0;i< 5;i++){X[i][0]=0;Y[i][0]=0;Z[0]=0;}
for(j=1;j< Sn;j++)
{
Zj=Pz*j;Z[j]=-Zj;
X[0][j]=abs(Kx[0]+Kx[1]*Zj+Kx[2]*Zj*Zj+Kx[3]*Zj*Zj*Zj);
Y[0][j]=0;
X[1][j]=-X[0][j];
Y[1][j]=0;
X[2][j]=X[1][j];
if(j==1){X[2][j]=0;}
Y[2][j]=abs(Ky[0]+Ky[1]*Zj+Ky[2]*Zj*Zj)-X[0][j]*Tan20;
X[3][j]=0;
Y[3][j]=abs(Ky[0]+Ky[1]*Zj+Ky[2]*Zj*Zj);
X[4][j]=-X[2][j];
Y[4][j]=Y[2][j];
Z[Sn-1]=Z[Sn-2];
}
Z[Sn-1]=Z[Sn-2];X[0][Sn-1]=0;Y[0][Sn-1]=0;X[1][Sn-1]=0;Y[1][Sn-1]=0;
X[2][Sn-1]=0;Y[2][Sn-1]=0;X[3][Sn-1]=0;Y[3][Sn-1]=0;X[4][Sn-1]=0;Y[4][Sn-1]=0;
pushMatrix();
for(j=0;j< Sn-1;j++)
{
beginShape(QUAD_STRIP);
for (i = 0; i < 5; ++i)
{
vertex(X[i][j],Y[i][j], Z[j]);
vertex(X[i][j+1], Y[i][j+1], Z[j+1]);
}
vertex(X[0][j],Y[0][j], Z[j]);
vertex(X[0][j+1], Y[0][j+1],Z[j+1]);
endShape(CLOSE);
}
popMatrix();
}