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