【问题标题】:Center of circle/ellipsis using VB.NET使用 VB.NET 的圆心/省略号
【发布时间】:2013-12-05 13:27:00
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: vb.net graphics geometry ellipsis drawellipse


    【解决方案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
    

    【讨论】:

      【解决方案2】:

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

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

      当然,只需在该点创建一个大小为 (1,1) 的 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
      

      【讨论】:

        【解决方案3】:

        如果你有中心点和半径,那么你可以很容易地计算出角点。 以下内容可能会对您有所帮助。

        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
        

        【讨论】:

          猜你喜欢
          • 2020-09-05
          • 1970-01-01
          • 2013-06-27
          • 1970-01-01
          • 2019-06-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多