ブラウザの[戻る]を押してね!



< 本アプレットのJavaソースプログラム >

/*
3次元グラフィックス表示プログラム A
(とりあえず、図形をひとつだけ表示してみたもの)
*/

import java.applet.*;
import java.awt.*;

public class Graphics3D_A extends Applet implements Runnable {
  int icnt;                   // ループカウンタなど用のワーク変数
  int x3d, y3d, z;               // 3次元座標軸上でのx、y、zの値
  int x2d, y2d;                // 2次元座標軸上でのx、yの値
  int max[] = new int[400];        // 最大値格納用配列
  int min[] = new int[400];        // 最小値格納用配列
  Thread Th;                // スレッド
  int wait_time = 0;            // 待ち時間
  Graphics g;                // グラフィックス表示用クラス

  public void init() {
                         // 最大値/最小値配列の初期化
    for ( icnt=0; icnt<400; icnt++ ) {
      max[icnt] = 0;
      min[icnt] = 400;
    }
    Th = null;               // スレッドの初期化(停止させておく)
                        // 待ち時間の取り出し
    wait_time = Integer.parseInt(getParameter("WAIT_TIME"));
  }

  public void start() {           // スレッドを作成・開始
    if (Th == null){
      Th = new Thread(this);
      Th.start();
    }
  }

  public void run() {           // 3次元図形を表示
    g = getGraphics();
    g.drawString("3次元グラフィックス表示プログラム A",100,30);
                       // 3次元図形表示処理
    for ( y3d=0; y3d<128; y3d +=2 ) {
      for ( x3d=0; x3d<160; x3d +=2 ) {
                       // Z値算出処理(任意の関数 z=f(x3d, y3d) に置き換え可能)
        if (((x3d >= 20) && (x3d <= 140)) && ((y3d >= 20) && (y3d <= 108))) {
          z = ((x3d - 80) * (x3d - 80)) / 60 + ((y3d - 64) * (y3d - 64)) / 40;
        } else {
          z = 110;
        }
                       // 3次元→2次元座標変換処理
        x2d = 200 - (x3d - y3d);
        y2d = z + 290 - ((x3d / 4) + (y3d / 2) + 100);

                       // 陰線処理(最大値/最小値判定による)
        if ((y2d >= max[x2d]) || (y2d <= min[x2d])) {
          if (y2d >= max[x2d]) {
            max[x2d] = y2d;
          }

          if (y2d <= min[x2d]) {
            min[x2d] = y2d;
          }

          if ((y2d >= 0) && (y2d < 500)) {
                      // 直線を用いて点を描画する
            g.drawLine(x2d, y2d, x2d+1, y2d);

            if (wait_time != 0) {
              try { // 描画後、ちょっと待たせる
                Th.sleep(wait_time);
              }
              catch (InterruptedException ex) {
                ex.printStackTrace();
              }
            }
          }
        }
      }
    }
  }
}



< 本アプレットのHTMLソースプログラム (アプレット実行部分のみの抜粋) >

(Java プログラムの経験者なら判ると思いますが、下記のVALUEの値を変更することにより、
 グラッフィックの描画速度が変わります。ホームページをダウンロードして、試しに変更してみてね ☆彡)

<HTML>
<BODY>
  <APPLET CODE="Graphics3D_A.class" WIDTH="400" HEIGHT="400">
  <PARAM NAME="WAIT_TIME" VALUE="10">
  </APPLET>
</BODY>
</HTML>