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

 追記2024年06月17日:VB2019使用の現時点、PSet関数はGraphics.SetPixel関数に置き換わっています。他にもサインコサインなどの三角関数平方根などはMath.Cos, Math.Sqrtなどとなっています。本のプログラムそのままを打ち込んでも動きませんが、単にベーシック言語の入門書とそしてではなく、アルゴリズムやデータ構造などの抽象的概念自体は言語が変わっても生きていると思います。ただね、右も左も分からないうちは「こう打ち込む」という具体的なプログラムコードの載った入門書の方が分かりよいと。そのため、自分のパソコンと使えるプログラム言語を確認して、時代に合ったものから入るのが良いのかなとは思いますが、古い本でも読んでみたい方はどうぞ。

 初版は河西出版でリンクの書籍は出版社が技術評論社となっていますが、恐らく同じ本と思われます。でもアンタ今ならVisualBasic2022でしょ。 俺の本じゃないけどこっちのほうがおススメよ?(無責任に)


🄫1999-2023 id:karmen