0

ユーザーがボタンをクリックして線を作成し、フォーム上のポイントを選択してテキストボックスに長さを入力すると、線の長さにもなります。自己。

誰かがこれを手伝ってくれますか?

4

1 に答える 1

1

線の方向も考慮する必要があります。始めるのに役立つコードを次に示します。始点、線の長さ、および角度を度単位で指定します。0度は正のx軸に向かっています。このメソッドは、線の終点のx、y座標を返します。

Sub Main()

    Dim start As New PointF(0, 0)
    Dim length As Double = 10
    Dim degrees As Double = 45

    Dim endPoint As PointF = getEndPoint(start, length, degrees)

    Console.WriteLine("Start point: {0}", start)
    Console.WriteLine("Length: {0}", length)
    Console.WriteLine("Angle: {0}", degrees)
    Console.WriteLine("End point: {0}", endPoint)


    Console.WriteLine("Press ENTER to exit...")
    Console.ReadLine()
End Sub

Private Function getEndPoint(ByVal startPoint As PointF, ByVal length As Double, ByVal angleInDegrees As Double) As PointF
    Dim x As Double = startPoint.X + length * Math.Cos(degreesToRadians(angleInDegrees))
    Dim y As Double = startPoint.Y + length * Math.Sin(degreesToRadians(angleInDegrees))

    Return New PointF(CType(x, Single), CType(y, Single))
End Function

Private Function degreesToRadians(ByVal degrees As Double) As Double
    Return (Math.PI / 180.0) * degrees
End Function

このコードは、標準のデカルト平面を想定しています。Windowsフォームの原点はフォームの左上にあり、正のY軸はフォームの下にあるため、フォームに線を引くために使用する場合は、このコードを調整して正しく機能させる必要があります。

Windowsフォームでは、角度は時計回りに増加するため、これを調整するgetEndPointメソッドの更新バージョンを次に示します(完全にはテストされていません)。

Private Function getEndPoint(ByVal startPoint As PointF, ByVal length As Double, ByVal angleInDegrees As Double) As PointF
    Dim x As Double = startPoint.X + length * Math.Cos(degreesToRadians(360.0 - angleInDegrees))
    Dim y As Double = startPoint.Y + length * Math.Sin(degreesToRadians(360.0 - angleInDegrees))
于 2011-12-16T15:00:09.877 に答える