У меня есть не прямая линия, определяемая серией координатных точек x, y.Я мог бы нарисовать прямую линию на экране прямо между этими точками без проблем.К сожалению, я должен нарисовать линию в отрезках равной длины.
Вот пример того, как мне нужно разбить непрямую линию с 3 точками на массив из нескольких равноотстоящих точек.(игнорируйте последнюю красную точку, это результат, когда линия не делится равномерно, и также является конечной точкой)
Обратите внимание на красную линию на «стыке».Предположим, что у меня есть прямая A-> B-> C с векторами AB и BC, образующими некоторый угол.По сути, линия изгибается в точке B.
Сегментация линии между точками A и B не представляет проблем вплоть до точки.Но когда AB не делится равномерно по длине сегмента, мне нужно сделать что-то особенное.Мне нужно взять оставшуюся длину и считать ее одной стороной треугольника.Постоянная длина сегмента - это другая сторона треугольника, которая соединяется с сегментом BC (красная линия выше).Мне нужно знать длину от точки B до этого пересечения.С помощью этой информации я могу продолжить вычисление отрезков на BC.
Вот треугольник, который я пытаюсь решить (далее я буду ссылаться на переменные, как они появляются на этом рисунке).Пока я разбил проблему с использованием закона косинусов.c 2 = a 2 + b 2 - 2ab * Cos ( y )
Проблема в том, что яуже знаю с, это длина сегмента.Мне нужно вычислить для a (я могу вычислить y).
Я дошел до написания полиномиального уравнения, но теперь я застрял: a 2 + b 2 - 2ab * Cos ( y ) - c 2 = 0
или топор 2 + Bx + C (A =1, B = -2b * Cos ( y ), C = b 2 - c 2 , x = a)
Этодаже правильный подход?Что мне делать дальше?Мне нужно реализовать это в Actionscript.
РЕДАКТИРОВАТЬ: Duh, я должен был бы использовать квадратную формулу.Итак, теперь я получаю:
a = b * Cos ( y ) +/- SqrRoot (c 2 - b 2 * Sin ( y ) 2 )
Теперь, как поместить это в код ...