如何绘制三角形?

时间:2014-11-09 10:57:56

标签: .net vb.net math geometry gdi+

我继承了Control类来创建一个用于放置一些形状的自定义用户控件,我想在控件中绘制一个三角形,我在三角形中绘制一个内边框但是我用指针搞砸了我的脑袋,我无法找到正确的点数计算(数学不是我的专长),而是一个三角形,我得到了这个丑陋的数字:

enter image description here

下面是绘制线条的代码的相关部分,我认为问题是第四个PointF

  

注释

p object是我用来绘制线条的Pen实例。

上图中属性网格的BorderWidth属性只是设置p.Width

  

代码

Case Figures.Triangle
    Dim trianglePoints As PointF() =
        {
            New PointF(p.Width / 4.0F, CSng(Me.Height) + (p.Width / 2.0F)),
            New PointF(CSng(Me.Width) / 2.0F, p.Width),
            New PointF(CSng(Me.Width) - (p.Width / 4.0F), CSng(Me.Height) + (p.Width / 2.0F)),
            New PointF(-CSng(Me.Height) + p.Width, CSng(Me.Width / 2) - p.Width)
        }

    Using gp As New Drawing2D.GraphicsPath(FillMode.Alternate)

        gp.AddLines(trianglePoints)
        gp.CloseFigure()

        With e.Graphics

            If Not Me._InnerColor = Color.Transparent Then

                Using b As New SolidBrush(Me._InnerColor)
                    .FillPath(b, gp)
                End Using

            End If

            .DrawLines(p, trianglePoints)

        End With

    End Using

1 个答案:

答案 0 :(得分:2)

数组的最后一个元素必须与第一个元素相同(关闭图形)

Dim trianglePoints As PointF() =
    {
        New PointF(p.Width / 2.0F, CSng(Me.Height) - (p.Width / 2.0F)),
        New PointF(CSng(Me.Width) / 2.0F, p.Width / 2F),
        New PointF(CSng(Me.Width) - (p.Width / 2.0F), CSng(Me.Height) - (p.Width / 2.0F)),
        New PointF(p.Width / 2.0F, CSng(Me.Height) - (p.Width / 2.0F))
    }