代码之家  ›  专栏  ›  技术社区  ›  DWRoelands

Graphics.DrawPolygon绘制六边形?

  •  2
  • DWRoelands  · 技术社区  · 13 年前

    我正在使用一些简单的代码绘制六边形,结果出乎意料。

    代码如下:

    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
    

    结束类

    六边形的五个点是可以的。这是最后一点绘制不正确,我不明白为什么:

    enter image description here

    “ShortSide”和“LongSide”表示六边形外的直角三角形的线。我确信数学是正确的,我觉得我错过了一些显而易见的东西。

    非常感谢。

    1 回复  |  直到 13 年前
        1
  •  2
  •   LarsTech    13 年前

    数组是从零开始的。将其更改为:

    Dim Points(5) As PointF
    

    会给你6分。您的最后一点(#7)默认为(0,0)。

    推荐文章