35章:3Dサンプル(sketch_3D_Arc_Straight)円弧+直線

    作成2015.12.14

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

  1. 円弧+直線の寸法図
     円弧+直線の寸法図を以下に示します。



    *図35-1からパラソル面面の基本寸法はR1、R2、L、Hの4個のパラメータで形状が決まります。
    *パラメータは全てfloat型でmm単位で入力とします。


  2. 3Dサンプル(sketch_3D_Arc_Straight)円弧+直線スケッチ
     3Dサンプル(sketch_3D_Arc_Straight)円弧+直線スケッチは以下となります。
    //sketch_3D_Arc_Straight
    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);//パラソル面
      Z_Arc_Straight(40,20,70,20);
    }
    
    void Z_Arc_Straight(float R1,float R2,float L,float H)
    {
      int Pn1=6;//R2ポイント数
      int Pn2=6;//R1ポイント数
      int Pn=4*Pn1+2+2*Pn2+3;//R2ポイント数
      float[] X=new float[Pn];
      float[] Y=new float[Pn];
      float L0=R1*L/(R1-R2);
      float A=acos(R1/L0);
      int i;
      float Ai1;
      for(i=0;i<=Pn1;i++)
      {
        Ai1=i*A/Pn1;
        X[i]=R2*cos(Ai1)+L;
        Y[i]=R2*sin(Ai1);
      }
      float Ai2;
      float dA2=(PI-2*A)/Pn2;
      for(i=0;i<=Pn2;i++)
      {
        Ai2=A+i*dA2;
        X[Pn1+i+1]=R1*cos(Ai2);
        Y[Pn1+i+1]=R1*sin(Ai2);
      }
      for(i=0;i<=2*Pn1;i++)
      {
        Ai1=PI-A+i*A/Pn1;
        X[Pn1+Pn2+2+i]=R2*cos(Ai1)-L;
        Y[Pn1+Pn2+2+i]=R2*sin(Ai1);
      }
      for(i=0;i<=Pn2;i++)
      {
        Ai2=PI+A+i*dA2;
        X[3*Pn1+Pn2+i+3]=R1*cos(Ai2);
        Y[3*Pn1+Pn2+i+3]=R1*sin(Ai2);
      }
      for(i=0;i<=Pn1;i++)
      {
        Ai1=2*PI-A+i*A/Pn1;
        X[3*Pn1+2*Pn2+i+4]=R2*cos(Ai1)+L;
        Y[3*Pn1+2*Pn2+i+4]=R2*sin(Ai1);
      }
      Z_Side(Pn,X,Y,H);//側面
      Z_Polyon_PZS(Pn,X,Y,H/2);
      Z_Polyon_PZS(Pn,X,Y,-H/2);
      
    }
    
    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_PZS(int Pn,float X[],float Y[],float Z)//多角形Z指定タイプ
    {
      int i;
      beginShape();
      for (i = 0; i < Pn; i++)
      {
        vertex(X[i],Y[i],Z);
      }
      endShape(CLOSE);
    }
    


  3. 3Dサンプル(sketch_3D_Arc_Straight)円弧+直線テキストファイル
     3Dサンプル(sketch_3D_Arc_Straight)円弧+直線テキストファイルは以下から参照できます。
    「3Dサンプル(sketch_3D_Arc_Straight)円弧+直線テキストファイルファイル」 にいく。



  4. 3Dサンプル(sketch_3D_Arc_Straight)円弧+直線の実行
    (1)3Dサンプル(sketch_3D_Arc_Straight)円弧+直線を実行すると実行ウインドウに3D画像が表示されます。
    (2)マウスを動かすと表示角度が変化します。
    (3)表示画像例を以下に示します。





  5. 3Dサンプル(sketch_3D_Arc_Straight)円弧+直線まとめ
    (1)void Z_Arc_Straight(float R1,float R2,float L,float H)で描画に必要な3次元データを生成します。
    (2)void Z_Side(int Pn,float X[],float Y[],float L)//側面で次元データを元に側面を描画します。
    (3)void Z_Polyon_PZS(int Pn,float X[],float Y[],float Z)//多角形Z指定タイプで平面部分を描画します。




36章:com.jogamp.opengl.GLException: Method "glClearDepthf" not availableエラー対策に行く。

トップページに戻る。