1

マウスをクリックすると、クリックした場所から中心点として 200 個の円が描画され、半径が 1 から 200 に大きくなるプロジェクトを完成させようとしています。

このプログラムのマウス部分については、助けは必要ありません。

私の現在の障害は、VB の以前のリリースには circle メソッドがあったが、VB.NET は System.CreateGraphics.DrawEllipse メソッドのみを使用して円を作成し、このメソッドは開始位置として x 座標と y 座標を使用するように思われることです。見えない四角形の左上隅と、さらに 2 つの整数/単数を使用して右と下 (x + と y +) の距離を決定し、円のサイズと位置を決定します。

プログラムを完了するために、中心点を使用して円/楕円を作成し、その中心点からの半径を宣言する方法が組み込まれていないことを願っています。

中心点を参照点として使用して FORM に円を描き、半径を宣言する方法はありますか?

4

3 に答える 3

2

基本的に、あなたがする必要があるのは、半径でポイントの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
于 2013-11-21T07:45:02.983 に答える
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
于 2013-11-21T08:02:36.643 に答える
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
于 2013-11-21T07:46:13.433 に答える