Я унаследовал класс Control для создания пользовательского элемента управления, используемого для создания некоторых фигур, я хотел бы нарисовать треугольник внутри контрольных граней, и я рисую внутреннюю границу в треугольнике, но я испортил себе голову указатели, я не могу найти правильный расчет точек (математика не моя специальность), то вместо треугольника я получаю эту уродливую фигуру:Как нарисовать треугольник?
Ниже приводится соответствующая часть кода, который втягивает линии, проблема, я думаю, является четвертой. PointF
N otes
p
объект - это Pen
экземпляр, который я использую для рисования линий.
BorderWidth
свойство сетки свойств в изображении выше, это просто поставил перед p.Width
Code
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
Нарисовать треугольник обычно необходимо 3 балла. Почему у вас есть 4? –
Нет, вам нужно 4 очка. Вверх -> Нижняя часть 1 -> Нижняя 2 -> Верх. Вам нужно будет всего 3 набора, если вы работаете с отдельными линиями, но если вы рисуете как путь, вам нужно 4 очка. Однако это путь заполнения. Может потребоваться только 3. – TyCobb