Центр круга / многоточия с использованием 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():

Rectangle.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
Другие вопросы по тегам