Центр круга / многоточия с использованием VB.NET
Я пытаюсь завершить проект, в котором, по щелчку мыши, из выбранной точки рисуется 200 кругов в качестве центральной точки, увеличиваясь с 1 радиуса до 200.
Мне не нужна помощь с мышью в этой программе.
Мой текущий контрольно-пропускной пункт состоит в том, что, хотя казалось, что в предыдущих выпусках VB были методы окружности, VB.NET использует только метод System.CreateGraphics.DrawEllipse для создания окружностей, и этот метод использует координаты x и y в качестве начальной позиции для верхний левый угол невидимого прямоугольника и использует еще два целых числа / сингла, чтобы определить расстояние вправо и вниз (x + и y +), чтобы определить размер и местоположение круга.
Я надеюсь, что я просто упускаю эпический способ создания круга / эллипса с использованием центральной точки и объявления радиуса от этой центральной точки для завершения моей программы.
Есть ли способ нарисовать круг на ФОРМЕ, используя центральную точку в качестве точки отсчета, а затем объявить радиус?
3 ответа
По сути, единственное, что вам нужно сделать, это уменьшить X
а также Y
Значения точки с радиусом, а также радиус * 2 для ширины и высоты:
graphics.DrawEllipse(
pen, location.X - radius, location.Y - radius, radius * 2, radius * 2)
Учитывая это, довольно просто создать метод расширения, предоставляющий вам интерфейс, который вы ищете:
Imports System.Runtime.CompilerServices
Module GraphicsExtensions
<Extension()>
Public Sub DrawCircle(ByVal graphics As Graphics, pen As Pen, location As Point, radius As Integer)
graphics.DrawEllipse(
pen, location.X - radius, location.Y - radius, radius * 2, radius * 2)
End Sub
End Module
... и используйте его в вашей форме:
Dim pos As Point = Me.PointToClient(MousePosition)
Using g As Graphics = Me.CreateGraphics()
g.DrawCircle(Pens.Black, pos, 15)
End Using
Я надеюсь, что я просто упускаю эпический способ создания круга / эллипса с использованием центральной точки и объявления радиуса от этой центральной точки для завершения моей программы.
Есть ли способ нарисовать круг на ФОРМЕ, используя центральную точку в качестве точки отсчета, а затем объявить радиус?
Конечно, просто создайте Rectangle() в этой точке размером (1,1) и повторно вызовите метод Inflate():
Public Class Form1
Private Center As Point
Private MouseClicked As Boolean = False
Private Sub Form1_MouseDown(sender As Object, e As MouseEventArgs) Handles MyBase.MouseDown
If e.Button = Windows.Forms.MouseButtons.Left Then
MouseClicked = True
Center = New Point(e.X, e.Y)
Me.Refresh()
End If
End Sub
Private Sub Form1_Paint(sender As Object, e As PaintEventArgs) Handles Me.Paint
If MouseClicked Then
Dim rc As New Rectangle(Center, New Size(1, 1))
For i As Integer = 1 To 200
e.Graphics.DrawEllipse(Pens.Black, rc)
rc.Inflate(1, 1)
Next
End If
End Sub
End Class
Если у вас есть центральная точка и радиус, вы можете легко вычислить угловую точку. Следующее может помочь вам.
Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
Dim centerX, centerY As Integer
Dim cornerX, cornerY As Integer
Dim radius As Integer
centerX = 100
centerY = 100
Dim i As Integer
For i = 20 To 200 Step 20
radius = i
cornerX = centerX - radius / 2
cornerY = centerY - radius / 2
e.Graphics.DrawEllipse(Pens.Black, cornerX, cornerY, radius, radius)
Next
End Sub