2011-12-16 39 views
0

我似乎很難創建繪圖筆線功能,用戶點擊一個按鈕來創建一條線,然後在窗體中選取一個點並輸入一個長度爲一個文本框,這也將成爲該行的長度,它的自我。繪製指定尺寸(長度)的筆線

有人可以幫忙嗎?

回答

1

你還必須考慮線的方向。這裏有一些代碼可以幫助你開始。您可以提供起始點,線的長度以及以度爲零的角度朝向正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))