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






< Palm 版 Java でのソースプログラム内容 >

/*
3次元グラフィックス表示プログラム A(Palm 用バージョン)
(とりあえず、図形をひとつだけ表示してみたもの)
*/
import spotless.*;

public class Graphics3D_A extends Spotlet {
  int icnt;              // ループカウンタなど用のワーク変数
  int x3d, y3d, z;         // 3次元座標軸上でのx、y、zの値
  int x2d, y2d;           // 2次元座標軸上でのx、yの値
  int max[] = new int[200];  // 最大値格納用配列
  int min[] = new int[200];  // 最小値格納用配列
  int wait_time = 5;       // 待ち時間(初期値として設定しておく)
  Graphics g;          // グラフィックス表示用クラス

                  // Spotletの登録
  public static void main( String args[] ) {
    (new Graphics3D_A()).register();
  }
                  // Graphics3D_A のコンストラクタ
  public Graphics3D_A() {
                  // 最大値/最小値配列の初期化
    for ( icnt=0; icnt<200; icnt++ ) {
      max[icnt] = 0;
      min[icnt] = 200;
    }
                  // Graphicオブジェクトの取得
    g = Graphics.getGraphics();
    g.clearScreen();     // 画面の消去
    g.drawString("3D Graphics Display A",30,0);

                  // 3次元図形表示処理
    for ( y3d=0; y3d<64; y3d++ ) {
      for ( x3d=0; x3d<80; x3d++ ) {
                  // Z値算出処理(任意の関数 z=f(x3d, y3d) に置き換え可能)
        if (((x3d >= 10) && (x3d <= 70)) && ((y3d >= 10) && (y3d <= 54))) {
          z = ((x3d - 40) * (x3d - 40)) / 30 + ((y3d - 32) * (y3d - 32)) / 20;
        } else {
          z = 55;
        }
                  // 3次元→2次元座標変換処理
        x2d = 85 - (x3d - y3d);
        y2d = z + 140 - ((x3d / 4) + (y3d / 2) + 50);

                  // 陰線処理(最大値/最小値判定による)
        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 < 160)) {
                  // 直線を用いて点を描画する
            g.drawLine(x2d, y2d, x2d+1, y2d, g.PLAIN);

            if (wait_time != 0) {
                  // 描画後、ちょっと待たせる
              for (icnt=0; icnt < wait_time; icnt++) {
                ;
              }
            }
          }
        }
      }
    }
  }
}