3Dサンプル(sketch_3D_Z_Bolt_D)台形頭ボルト(アイボルト合成用)スケッチ
3Dサンプル(sketch_3D_Z_Bolt_D)台形頭ボルト(アイボルト合成用)スケッチは以下となります。
//sketch_3D_Z_Bolt_D 台形頭ボルト(アイボルト合成用)
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(4, 4,4);
Bolt_D(8,15.25,12.5,27);//台形頭ボルト(アイボルト合成用)(M16)
}
void Bolt_D(float r,float R,float H,float L)//台形頭ボルト(アイボルト合成用)
{
int Sn=4;//面数
int Pn=17;//ポイント数
float[][] X=new float[Sn][Pn];
float[][] Y=new float[Sn][Pn];
float[] Z=new float[Sn];
int i;
float R0=R-H*tan(PI*(90-82)/180);
Z[0]=H;
Z[1]=0;
Z[2]=0;
Z[3]=-L;
for(i=0;i<Pn;i++)
{
float angle = i*TWO_PI/(Pn-1);
X[0][i]=R0*cos(angle);Y[0][i]=R0*sin(angle);
X[1][i]=R*cos(angle);Y[1][i]=R*sin(angle);
X[2][i]=r*cos(angle);Y[2][i]=r*sin(angle);
X[3][i]=r*cos(angle);Y[3][i]=r*sin(angle);
}
pushMatrix();
Z_Side_M(Sn,Pn,X,Y,Z);//多段側面
translate(0,0,Z[0]);
beginShape();
Z_Polyon_P(Pn,X[0],Y[0]);//多角形反時計回り
endShape(CLOSE);
popMatrix();
pushMatrix();
translate(0,0,Z[3]);
beginShape();
Z_Polyon_P(Pn,X[3],Y[3]);//多角形反時計回り
endShape(CLOSE);
popMatrix();
}
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);
}
}
void Z_Polyon_P(int Pn,float X[],float Y[])//多角形反時計回り
{
int i;
for (i = 0; i < Pn; i++)
{
vertex(X[i],Y[i]);
}
}