3Dサンプル(sketch_3D_Half_Pipe)半パイプスケッチ
3Dサンプル(sketch_3D_Half_Pipe)半パイプスケッチは以下となります。
//sketch_3D_Half_Pipe 半パイプ
void setup()
{
size(400, 400, P3D);
}
void draw()
{
background(255, 255, 255);
lights();
ortho(-width/2, width/2, -height/2, height/2); // Same as ortho()
translate(width / 2, height / 2);
rotateY(map(mouseX, 0, width, -PI/1, PI/1));
rotateX(map(mouseY, 0, height, PI/1, -PI/1));
//noStroke();
strokeWeight(0.5);
fill(255, 255, 255);
scale(1, 1,1);
pushMatrix();
Z_Half_Pipe(50,30,100);//Half_Pipe 半パイプ
translate(0,0,-60);
Z_Half_Circle(50,20);//Half_Pipe 半パイプ
popMatrix();
}
void Z_Half_Pipe(float R1,float R2,float L)//Half_Pipe 半パイプ
{
int Pn1=8;//R1,R2分割数
int Pn=2*Pn1+3;//全ポイント数
float[] X=new float[Pn];
float[] Y=new float[Pn];
int i;
float Ai;
for(i=0;i<=Pn1;i++)
{
Ai=i*PI/Pn1;
X[i]=R1*cos(Ai);
Y[i]=R1*sin(Ai);
}
for(i=0;i<=Pn1;i++)
{
Ai=PI-i*PI/Pn1;
X[i+Pn1+1]=R2*cos(Ai);
Y[i+Pn1+1]=R2*sin(Ai);
}
X[2*Pn1+2]=R1;Y[2*Pn1+2]=0;
pushMatrix();
Z_Side(Pn,X,Y,L);//側面
translate(0,0,-L/2);
Z_Polyon(Pn,X,Y);//多角形
translate(0,0,L);
Z_Polyon(Pn,X,Y);//多角形
popMatrix();
}
void Z_Half_Circle(float R1,float L)//Half_Pipe 半パイプ
{
int Pn1=8;//R1分割数
int Pn=Pn1+2;//全ポイント数
float[] X=new float[Pn];
float[] Y=new float[Pn];
int i;
float Ai;
for(i=0;i<=Pn1;i++)
{
Ai=i*PI/Pn1;
X[i]=R1*cos(Ai);
Y[i]=R1*sin(Ai);
}
X[Pn1+1]=R1;Y[Pn1+0]=0;
pushMatrix();
Z_Side(Pn,X,Y,L);//側面
translate(0,0,-L/2);
Z_Polyon(Pn,X,Y);//多角形
translate(0,0,L);
Z_Polyon(Pn,X,Y);//多角形
popMatrix();
}
void Z_Side(int Pn,float X[],float Y[],float L)//側面
{
int i;
beginShape(QUAD_STRIP);
for (i = 0; i < Pn; ++i)
{
vertex(X[i],Y[i], -L/2);
vertex(X[i],Y[i], L/2);
}
endShape(CLOSE);
}
void Z_Polyon(int Pn,float X[],float Y[])//多角形
{
int i;
beginShape();
for (i = 0; i < Pn; ++i)
{
vertex(X[i],Y[i]);
}
endShape(CLOSE);
}