2

単純なコードを使用して六角形を描画していますが、予期しない結果が得られます。

コードは次のとおりです。

Public Class Form1

Dim bm As New Bitmap(640, 480)
Dim bmg As Graphics = Graphics.FromImage(bm)
Dim p As Pen = New Pen(Color.Black)
Dim sb As SolidBrush = New SolidBrush(Color.Black)


Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    DrawHex(80, 50)
End Sub

Public Sub DrawHex(x As Integer, y As Integer)

    Dim side As Integer = 25  '' the length of the side of a hex

    Dim ShortSide As Single = Convert.ToSingle(System.Math.Sin(30 * System.Math.PI / 180) * side)
    Dim LongSide As Single = Convert.ToSingle(System.Math.Cos(30 * System.Math.PI / 180) * side)

    Dim Points(6) As PointF
    Points(0) = New PointF(x, y)
    Points(1) = New PointF(x + side, y)
    Points(2) = New PointF(x + side + ShortSide, y + LongSide)
    Points(3) = New PointF(x + side, y + LongSide + LongSide)
    Points(4) = New PointF(x, y + LongSide + LongSide)
    Points(5) = New PointF(x - ShortSide, y + LongSide)
    bmg.DrawPolygon(p, Points)

End Sub

Private Sub Form1_Paint(sender As Object, e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint

    e.Graphics.DrawImage(bm, New Point(10, 10))

End Sub

クラス終了

六角形の5点で結構です。正しく描画されていないのは最後のポイントであり、その理由がわかりません:

ここに画像の説明を入力

「ShortSide」と「LongSide」は、六角形の外側にある直角三角形の線を表します。私は数学が正しいと確信しており、明らかな何かが欠けているように感じます.

ありがとうございました!

4

1 に答える 1

2

配列はゼロベースです。次のように変更します。

Dim Points(5) As PointF

あなたに6ポイントを与えます。最後のポイント (#7) はデフォルトで (0, 0) に設定されていました。

于 2012-08-20T23:30:09.960 に答える