2011-12-16 11 views

答えて

1

また、行の方向も考慮する必要があります。始めに役立つコードがいくつかあります。開始点、線の長さ、および角度を0度で正のx軸に向けて指定します。この方法は、ラインの終点のy座標をXが返されます。

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)) 
関連する問題