使用VB.NET的圆/省略中心

时间:2013-11-21 07:23:03

标签: vb.net graphics geometry ellipsis drawellipse

我正在尝试完成一个项目,在点击鼠标时,从点击的位置绘制200个圆圈作为中心点,从1个半径增大到200个。

我不需要帮助这个程序的鼠标部分。

我目前的障碍是看起来虽然在VB的早期版本中有圆圈方法,但VB.NET只使用System.CreateGraphics.DrawEllipse方法创建圆圈,此方法使用x和y坐标作为一个不可见矩形的左上角的起始位置,并使用另外两个整数/单个来决定向右和向下的距离(x +和y +),以确定圆的大小和位置。

我希望我只是缺少一种内置的方法来创建一个使用中心点的圆/省略号并从该中心点声明半径以完成我的程序。

有没有办法使用中心点作为参考点在FORM上绘制一个圆然后声明半径?

3 个答案:

答案 0 :(得分:1)

基本上,您唯一需要做的就是减少半径的点的XY值,并使用半径* 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

答案 1 :(得分:1)

  

我希望我只是缺少一种内置的创建方式   使用中心点并从中声明半径的圆/省略号   这个中心点是为了完成我的计划。

     

有没有办法使用中心点将圆形绘制到FORM上   参考点然后声明半径?

当然,只需在大小为(1,1)的位置创建一个Rectangle()并重复调用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

答案 2 :(得分:0)

如果您有中心点和半径,则可以轻松计算角点。 以下内容对您有帮助。

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