3Dサンプル(sketch_3D_U_Bolt)Uボルトスケッチ
3Dサンプル(sketch_3D_U_Bolt)Uボルトスケッチは以下となります。
//sketch_3D_U_Bolt
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);
U_Bolt(6,45,68);//Uボルト
}
void U_Bolt(float r,float R,float H)//Uボルト
{
int sides=16;//分割数
int SnR=16;//面数
float[][] X=new float[SnR+1][sides+1];
float[][] Y=new float[SnR+1][sides+1];
float[][] Z=new float[SnR+1][sides+1];
int i,j;
for(j=0;j<=SnR;j++)
{
float Aj=j*PI/SnR;
for(i=0;i<=sides;i++)
{
float Ai=i*2*PI/sides;
X[j][i]=(R+r*cos(Ai))*cos(Aj);
Y[j][i]=r*sin(Ai);
Z[j][i]=(R+r*cos(Ai))*sin(Aj);
}
}
for(j=0;j< SnR;j++)
{
beginShape(QUAD_STRIP);
for (i = 0; i <= sides; ++i)
{
vertex(X[j][i],Y[j][i],Z[j][i]);
vertex(X[j+1][i],Y[j+1][i],Z[j+1][i]);
}
endShape(CLOSE);
}
pushMatrix();translate(R,0,-H/2);
Z_Bar(r,H);popMatrix();//Zバー
pushMatrix();translate(-R,0,-H/2);
Z_Bar(r,H);popMatrix();//Zバー
}
void Z_Bar(float r,float L)//Zバー
{
int sides=16;//分割数
int Sn=2;//面数
float Pz[]={-L/2,L/2};//z座標
float R[]={r,r};//回転物半径
int i,j;
float angleIncrement = TWO_PI/sides;
for(j=0;j< Sn-1;j++)
{
float angle = 0;
beginShape(QUAD_STRIP);
for (i = 0; i < sides + 1; ++i)
{
vertex(R[j]*cos(angle), R[j]*sin(angle), Pz[j]);
vertex(R[j+1]*cos(angle), R[j+1]*sin(angle), Pz[j+1]);
angle += angleIncrement;
}
endShape(CLOSE);
}
pushMatrix();translate(0,0,-L/2);
Z_Circle(r);popMatrix();//円
pushMatrix();translate(0,0,L/2);
Z_Circle(r);popMatrix();//円
}
void Z_Circle(float r)//円
{
int sides=16;//分割数
int i;
float angleIncrement = TWO_PI/sides;
float angle = 0;
beginShape();
for (i = 0; i < sides + 1; ++i)
{
vertex(r*cos(angle), r*sin(angle),0);
vertex(r*cos(angle), r*sin(angle),0);
angle += angleIncrement;
}
endShape(CLOSE);
}