Illustratorのスターツールで正星形多角形?を数値指定で作図する方法 2023/01/09
画面設計はこんな感じです。Labelの順番がグチャグチャなのは、設計なしで作成した結果で特に意味はありません。
ソースの「-----------------」は区切り線なので記述の必要はありません。
青字は自動入力部分で修正の必要はありません。
黒字が入力部分です。
赤字はコメント文なので記述の必要はありません。
比率ボタンごとに計算しているのでソースは簡単ですが、勘違いミスでしばらくプチパニックでした。
------------------
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
'N, X, agA, agB, agC, BL, BRをSingle宣言
'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, BRをSingle宣言
'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半径値を返します。
クリックするといきなりダウンロードが始まります。
実際のプログラム完成日は2022年8月27日です。
Windows版です。