VB6でのPSetをVB2008Expressで実現


初期のVBはPictureBoxに直接点描画が出来たので、簡単にグラフの作成が出来た。
VB.NETあたりからPSetが無くなってしまったようだけれども、GraphicsのDrawLineで1ピクセルの線を引けばなんとかなるのではと思って実験してみました。
画像は
y=30 * ( cos( Root( x^2 + z^2 ) ) + cos(3 * Root( x^2 + z^2 ) ) )
という三次元関数の回転変換による軸測投影
技術評論社 VisualBasic5.0 入門編 例題5)

以下はVB5のソースをVB2008 Express Editionでコンパイルできるように改造したもの。
640×480のピクチャーボックス(名前:Picture1)を置いてボタンクリックのイベントを記述。
背景色は白いものを選択しておくのが良いでしょう。

Imports System.Math

Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim ymin(640) As Integer, ymax(640) As Integer, px As Integer, py As Integer, y As Integer
        Dim Rd As Double
        Dim g As Graphics = Picture1.CreateGraphics()
        Rd = 3.14159 / 180
        For i = 0 To 639
            ymin(i) = 399 : ymax(i) = 0
        Next i
        For z = 200 To -200 Step -10
            For x = -200 To 200
                y = 30 * (Cos(Sqrt(x * x + z * z) * Rd) + Cos(3 * Sqrt(x * x + z * z) * Rd))
                px = 320 + x * Cos(-30 * Rd) + z * Sin(-30 * Rd)
                py = 200 - (y * Cos(30 * Rd) - (-x * Sin(-30 * Rd) + z * Cos(-30 * Rd)) * Sin(30 * Rd))
                If py < ymin(px) Then
                    ymin(px) = py
                    g.DrawLine(Pens.Black, px, py, px + 1, py + 1)
                End If
                If py > ymax(px) Then
                    ymax(px) = py
                    g.DrawLine(Pens.Black, px, py, px + 1, py + 1)
                End If
            Next x
        Next z
    End Sub
End Class

広告を非表示にする