绘制指定尺寸(长度)的笔线

问题描述:

我似乎很难创建绘图笔线功能,用户点击一个按钮来创建一条线,然后在窗体中选取一个点并输入一个长度为一个文本框,这也将成为该行的长度,它的自我。绘制指定尺寸(长度)的笔线

有人可以帮忙吗?

你还必须考虑线的方向。这里有一些代码可以帮助你开始。您可以提供起始点,线的长度以及以度为零的角度朝向正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))