 // 箱を組み合わせる(マウスで回転) [Gr3d2.java](JDK 1.0.2)
 import java.applet.Applet;
 import java.awt.*;
 //!import java.awt.event.*;   // JDK 1.1
 //!public class Gr3d2 extends Applet
 //!    implements MouseListener,MouseMotionListener { // JDK 1.1
 public class Gr3d2 extends Applet { //!
     int doX,doY;           // マウスの位置
     int angX=30,angY=30;   // 角度の初期値
     Box A = new Box();     //(*a)
     Box B = new Box();     //(*a)
     Box C = new Box();     //(*a)
     Color [] Col={Color.gray,Color.cyan,Color.green,
                   Color.red,Color.white,Color.orange,
                   Color.magenta,Color.pink};
  public void init() {     // ロード時の初期化メソッド
  //============== 座標データ ==============
     A.setdata(80.0,80.0,80.0);  //(*b)
     B.setdata(30.0,50.0,30.0);  //(*b)
     C.setdata(40.0,40.0,80.0);  //(*b)
  //!addMouseListener(this);                // JDK 1.1
  //!addMouseMotionListener(this);          // JDK 1.1
     setBackground(new Color(128,128,255)); // 背景色
  } //end init
  //!//============= JDK 1.1 イベント処理(マウス) =============
  //!public void mousePressed(MouseEvent e) {  // 押す JDK 1.1
  //!   doX=e.getX();        // マウスのボタンを押したx位置
  //!   doY=e.getY();        // マウスのボタンを押したy位置
  //!} //end mousePressed
  //!public void mouseDragged(MouseEvent e)  { // ドラッグ
  //!   angX=angX+(e.getY()-doY);   // xの回転角度
  //!   angY=angY+(e.getX()-doX);   // yの回転角度
  //!   doX=e.getX(); doY=e.getY(); // マウスの位置
  //!   repaint();
  //!} //end mouseDragged
  //!public void mouseReleased(MouseEvent e) { } // JDK 1.1
  //!public void mouseClicked(MouseEvent e)  { } // JDK 1.1
  //!public void mouseEntered(MouseEvent e)  { } // JDK 1.1
  //!public void mouseExited(MouseEvent e)   { } // JDK 1.1
  //!public void mouseMoved(MouseEvent e)    { } // JDK 1.1
  //============= JDK 1.0.2 イベント処理(マウス) =============
  public boolean mouseDown(Event e,int x,int y){ //! マウスを押した時の処理
     doX=x;            //!(a) マウスのボタンを押したx位置
     doY=y;            //!(a) マウスのボタンを押したy位置
     return true;      //!
  } //end mouseDown    //!
  public boolean mouseDrag(Event e,int x,int y){ //!ドラッグした時の処理
     angX=angX+y-doY;  //!(b) xの回転角度
     angY=angY+x-doX;  //!(b) yの回転角度
     doX=x; doY=y;     //! マウスの位置
     repaint();        //!
    return true;       //!
  } //end mouseDrag    //!
  //================= グラフィックスの表示 =================
  public void paint( Graphics g ) {
     for (int i=0; i<A.x.length; i++) {               //(*c)
       drawPG(g,A.x[i],A.y[i],A.z[i],150,200,Col[i]); //(*c)
       drawPG(g,B.x[i],B.y[i],B.z[i],150,120,Col[i]); //(*c)
       drawPG(g,C.x[i],C.y[i],C.z[i],230,200,Col[i]); //(*c)
     }
     g.setColor(Color.yellow);
     g.drawString("X="+angX%360+" Y="+angY%360,
                  10,size().height-30);
  //!             10,getSize().height-30);
  } //end paint
  //======= 後半部分は、[Gr3d1m.java]と同じ ==================
  public void drawPG(Graphics g,double []x,double []y,
                     double []z,int xp,int yp,Color co) {
     double x1,y1,z0;
     int len=x.length;                // 配列の大きさ
     int [] xx=new int [len];
     int [] yy=new int [len];
  //!final double RAD=Math.PI/180.0;  // ラジアンに変換
     double RAD=Math.PI/180.0;        //!ラジアンに変換
     double a=angX*RAD;               // x軸の回転角
     double b=angY*RAD;               // y軸の回転角
     double sinA=Math.sin(a),sinB=Math.sin(b); // 関数の計算
     double cosA=Math.cos(a),cosB=Math.cos(b); // 関数の計算
     for (int i=0; i<len; i++) {
        x1= x[i]*cosB+z[i]*sinB;    // x1の位置
        z0=-x[i]*sinB+z[i]*cosB;
        y1= y[i]*cosA-  z0*sinA;    // y1の位置
        xx[i]=xp+(int)Math.rint(x1);
        yy[i]=yp-(int)Math.rint(y1);
     }
     g.setColor(co);             // 色の設定
     g.drawPolygon(xx,yy,len);   // 多角形 ワイヤフレーム
  } //end drawPG
 } //end Gr3d2
