< VB でのソースプログラム内容 >
'
' 3次元グラフィックス表示プログラム A
' (とりあえず、図形をひとつだけ表示してみたもの)
'
Dim icnt As Integer ' ループカウンタなど用のワーク変数
Dim x3d, y3d, z As Integer ' 3次元座標軸上でのx、y、zの値
Dim x2d, y2d As Integer ' 2次元座標軸上でのx、y、zの値
Dim max(400) As Integer ' 最大値格納用配列
Dim min(400) As Integer ' 最小値格納用配列
Dim wait_time As Integer ' 待ち時間
Private Sub Disp_Button_Click()
Picture1.Width = 6000
Picture1.Height = 6000
Picture1.ScaleWidth = 400
Picture1.ScaleHeight = 400
Picture1.ScaleLeft = 0
Picture1.ScaleTop = 0
Picture1.Cls
For icnt = 0 To 399 ' 最大値/最小値配列の初期化
max(icnt) = 0: min(icnt) = 400
Next icnt
wait_time = 32766 ' 待ち時間の設定
For y3d = 0 To 126 Step 2 ' 3次元図形表示処理
For x3d = 0 To 158 Step 2
' Z値算出処理(任意の関数
z=f(x3d, y3d) に置き換え可能)
If (((x3d >= 20) And (x3d <= 140)) And ((y3d >= 20)
And (y3d <= 108))) Then
z = ((x3d - 80) * (x3d - 80)) / 60 + ((y3d - 64) * (y3d
- 64)) / 40
Else
z = 110
End If
' 3次元→2次元座標変換処理
x2d = 200 - (x3d - y3d)
y2d = z + 290 - ((x3d / 4) + (y3d / 2) + 100)
' 陰線処理(最大値/最小値判定による)
If ((y2d >= max(x2d)) Or (y2d <= min(x2d))) Then
If (y2d >= max(x2d)) Then
max(x2d) = y2d
End If
If (y2d <= min(x2d)) Then
min(x2d) = y2d
End If
If ((y2d >= 0) And (y2d < 500)) Then
Picture1.PSet (x2d, y2d) ' 点の描画
' Picture1.Line (x2d, y2d)-(x2d + 1, y2d) ' 直線による点の描画
For icnt = 0 To wait_time: Next icnt ' 描画後、ちょっと待たせる
End If
End If
Next x3d
Next y3d
End Sub
Private Sub End_Button_Click()
End
End Sub