39章:3Dサンプル(sketch_3D_Half_Pipe)半パイプ

    作成2015.12.19

     Processingの3D機能を利用して3D機械製図への応用を検討してみたいと思います。

  1. 半パイプの寸法図
     半パイプの寸法図を以下に示します。



    *図39-1から半パイプの基本寸法はR1、R2、Lの3個のパラメータで形状が決まります。
    *パラメータは全てfloat型でmm単位で入力とします。


  2. 半円板の寸法図
     半円板の寸法図を以下に示します。



    *図39-1から半円板の基本寸法はR1、Lの2個のパラメータで形状が決まります。
    *パラメータは全てfloat型でmm単位で入力とします。


  3. 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);
    }
    


  4. 3Dサンプル(sketch_3D_Half_Pipe)半パイプテキストファイル
     3Dサンプル(sketch_3D_Half_Pipe)半パイプテキストファイルは以下から参照できます。
    「3Dサンプル(sketch_3D_Half_Pipe) 半パイプテキストファイルファイル」にいく



  5. .3Dサンプル(sketch_3D_Half_Pipe)半パイプの実行
    (1).3Dサンプル(sketch_3D_Half_Pipe)半パイプを実行すると実行ウインドウに3D画像が表示されます。
    (2)マウスを動かすと表示角度が変化します。
    (3)表示画像例を以下に示します。





  6. 3Dサンプル(sketch_3D_Half_Pipe)半パイプまとめ
    (1)void Z_Half_Circle(float R1,float L)//Half_Pipe 半パイプで描画に必要な3次元データを生成します。
    (2)void Z_Side(int Pn,float X[],float Y[],float L)//側面で次元データを元に側面を描画します。
    (3)void Z_Polyon(int Pn,float X[],float Y[])//多角形で平面部分を描画します。




40章:3Dサンプル(sketch_3D_Engin)エンジンに行く。

トップページに戻る。