3Dサンプル(sketch_3D_Z_Nut)六角ナットスケッチ
3Dサンプル(sketch_3D_Z_Nut)六角ナットスケッチは以下となります。
//sketch_3D_Z_Nut 六角ナット
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.1);
fill(255, 255, 255);
scale(5, 5,5);
Z_Nut(24,13,8);//六角ナット
}
void Z_Nut(float B,float T,float R)//六角ナット
{
int Pn=7;//ポイント数
float[] X=new float[Pn];
float[] Y=new float[Pn];
int i;
float r=B/(2*cos(30*PI/180));
for(i=0;i<Pn;i++)
{
float angle = i*TWO_PI/(Pn-1);
X[i]=r*cos(angle);Y[i]=r*sin(angle);
}
int Pn2=17;//ポイント数
float[] X2=new float[Pn2];
float[] Y2=new float[Pn2];
for(i=0;i<Pn2;i++)
{
float angle = i*TWO_PI/(Pn2-1);
X2[i]=R*cos(angle);Y2[i]=R*sin(angle);
}
pushMatrix();
Z_Side(Pn,X,Y,T);//側面
Z_Side(Pn2,X2,Y2,T);//側面
translate(0,0,-T/2);
beginShape();
Z_Polyon_P(Pn,X,Y);//多角形
beginContour();
Z_Polyon_M(Pn2,X2,Y2);//多角形
endContour();
endShape(CLOSE);
translate(0,0,T);
beginShape();
Z_Polyon_P(Pn,X,Y);//多角形
beginContour();
Z_Polyon_M(Pn2,X2,Y2);//多角形
endContour();
endShape(CLOSE);
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_P(int Pn,float X[],float Y[])//多角形反時計回り
{
int i;
for (i = 0; i < Pn; i++)
{
vertex(X[i],Y[i]);
}
}
void Z_Polyon_M(int Pn,float X[],float Y[])//多角形時計回り
{
int i;
for (i = Pn-1; i >= 0; i--)
{
vertex(X[i],Y[i]);
}
}