3Dサンプル(sketch_3D_Parasol)パラソル面スケッチ
3Dサンプル(sketch_3D_Parasol)パラソル面スケッチは以下となります。
//sketch_3D_Z_Parasol
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(2,2,2);
//void Z_Parasol(int Sn,float R,float A)//パラソル面
Z_Parasol(4,72.5,60);//パラソル面
}
void Z_Parasol(int Sn,float R,float A)//パラソル面
{
int Pn=17;//ポイント数
float[][] X=new float[Sn+1][Pn];
float[][] Y=new float[Sn+1][Pn];
float[] Z=new float[Sn+1];
int i,j;
for(j=0;j<=Sn;j++)
{
float Aj=j*A*PI/(180*(Sn-1));
Z[j]=R*cos(Aj);
float Ry=R*sin(Aj);
for(i=0;i<Pn;i++)
{
float Ai = i*TWO_PI/(Pn-1);
X[j][i]=Ry*cos(Ai);
Y[j][i]=Ry*sin(Ai);
}
}
//void Z_Side_M(int Sn,int Pn,float X[][],float Y[][],float Z[])//多段側面
Z_Side_M(Sn,Pn,X,Y,Z);
}
void Z_Side_M(int Sn,int Pn,float X[][],float Y[][],float Z[])//多段側面
{
int i,j;
for(j=0;j<Sn-1;j++)
{
beginShape(QUAD_STRIP);
for (i = 0; i < Pn; i++)
{
vertex(X[j][i],Y[j][i], Z[j]);
vertex(X[j+1][i],Y[j+1][i], Z[j+1]);
}
endShape(CLOSE);
}
}