火曜日, 1月 10, 2023

Visual Studio Basic_32 
正星形多角形?の長半径と短半径を割り出す

以下の書き込みに連動し、マニアックな計算機を作成しました。



画面設計はこんな感じです。Labelの順番がグチャグチャなのは、設計なしで作成した結果で特に意味はありません。 


ソースの
「-----------------」は区切り線なので記述の必要はありません。

青字は自動入力部分で修正の必要はありません。 黒字が入力部分です。 赤字はコメント文なので記述の必要はありません。
比率ボタンごとに計算しているのでソースは簡単ですが、勘違いミスでしばらくプチパニックでした。
------------------
Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        'N, X, agA, agB, agC, BL, BRSingle宣言

        'N=N点の星形多角形の頂点数

        'X=N点の星形多角形内角の和

        'agA=角A

        'agB=B

        'agC=角C

        'BL=X / (N * 2)

        'BR=180 - (X / N)

        'lsc, lsb Double宣言

        'lsc=第n半径

        'lsb=外接円の直径

        Dim N, X, agA, agB, agC, BL, BR As Single
        Dim lsc, lsb As Double

            'TextBox1が未入力なら
            '「点の数と基準となる半径値を入力してください」を
            'Label3に表示
            If TextBox1.Text = Nothing Then
            Label3.Text = "点の数と基準となる半径値を入力してください"
            Exit Sub
        End If

        'Label3をリセットし
        'TextBox1の値を数値変換してNに代入
        'TextBox2の値を数値変換してlscに代入
        '180 * (N - 2)の結果をXに代入
        '360 / (N * 2)の結果をagAに代入
        '180 - (X / N)の結果をBRに代入
        'X / (N * 2)の結果をBLに代入
        'BR + BLの結果をagBに代入
        '(180 - (BR * 2)) / 2の結果をagCに代入
        'sin(agB * π / 180) / sin(agC * π / 180) * lscの結果を数値変換してlsbに代入
        'Label1に桁数指定でlsbを表示
        Label3.ResetText()
        N = Val(TextBox1.Text)
        lsc = Val(TextBox2.Text)
        X = 180 * (N - 2)
        agA = 360 / (N * 2)
        BR = 180 - (X / N)
        BL = X / (N * 2)
        agB = BR + BL
        agC = (180 - (BR * 2)) / 2
        lsb = Math.Sin(agB * Math.PI / 180) / Math.Sin(agC * Math.PI / 180) * lsc
        Label1.Text = Format(lsb, "0.00")

    End Sub
------------------
    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click

        'N, X, agA, agB, agC, BL, BRSingle宣言

        'N=N点の星形多角形の頂点数

        'X=N点の星形多角形内角の和

        'agA=角A

        'agB=B

        'agC=角C

        'BL=X / (N * 2)

        'BR=180 - (X / N)

        'lsc, lsb Double宣言

        'lsc=第n半径

        'lsb=外接円の直径

        Dim N, X, agA, agB, agC, BL, BR As Single

        Dim lsc, lsb As Double

            'TextBox1が未入力なら
            '「点の数と基準となる半径値を入力してください」を
            'Label3に表示
            If TextBox1.Text = Nothing Then
            Label3.Text = "点の数と基準となる半径値を入力してください"
            Exit Sub
        End If

        'Label3をリセットし
        'TextBox1の値を数値変換してNに代入
        'TextBox2の値を数値変換してlscに代入
        '180 * (N - 2)の結果をXに代入
        '360 / (N * 2)の結果をagAに代入
        '180 - (X / N)の結果をBRに代入
        'X / (N * 2)の結果をBLに代入
        'BR + BLの結果をagBに代入
        '(180 - (BR * 2)) / 2の結果をagCに代入
        'sin(agC * π / 180) / sin(agB * π / 180) * lscの結果を数値変換してlsbに代入
        'Label1に桁数指定でlsbを表示
        Label3.ResetText()
        N = Val(TextBox1.Text)
        lsb = Val(TextBox2.Text)
        X = 180 * (N - 2)
        agA = 360 / (N * 2)
        BR = 180 - (X / N)
        BL = X / (N * 2)
        agB = BR + BL
        agC = (180 - (BR * 2)) / 2
        lsc = Math.Sin(agC * Math.PI / 180) / Math.Sin(agB * Math.PI / 180) * lsb
        Label1.Text = Format(lsc, "0.00")

    End Sub
------------------
    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
        ' プログラム終了
        End
    End Sub
------------------
    Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
        ' Label1,3とTextBox1,2をリセット
        Label1.ResetText()
        Label3.ResetText()
        TextBox1.ResetText()
        TextBox2.ResetText()
    End Sub
End Class
------------------

起動直後のパレット

点の数と半径値を入力し[第2半径は?]をクリックすると、入力した半径値を第1半径値として第2半径値を返します。

点の数と半径値を入力し[第1半径は?]をクリックすると、入力した半径値を第2半径値として第1半径値を返します。

StarPolygon.zip
クリックするといきなりダウンロードが始まります。
実際のプログラム完成日は2022年8月27日です。
Windows版です。