Вы также должны учитывать направление линии.Вот код, который поможет вам начать.Вы указываете начальную точку, длину линии и угол в градусах, причем нулевые градусы направлены к положительной оси 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))