Учитывая 2 пункта, как рисовать линию под прямым углом к ​​линии, образованной двумя точками?

Идеализм Я хочу снабдить последовательность точек и иметь линию, нарисованную под прямым углом в каждой точке (начиная со второй точки).

Направление каждой линии будет чередоваться, поэтому, если бы мне пришлось нарисовать кривую, состоящую из 6 точек, для каждой точки, начинающейся со второй точки, будет нарисована линия данной десятой, т.е. 5 дополнительных линий на чередующихся сторонах кривая, немного похожа на гусеницу с чередующимися ногами.

(Я понимаю, что линии не будут полностью находиться под прямым углом к ​​кривой, а скорее под прямым углом к ​​линии, образованной любыми двумя точками на кривой).

Ответ 1

Это вопрос векторная математика. Вы можете вычислить вектор направления между двумя точками A и B, вычитая B из A. В 2D и только в 2D вектор, направленный под углом к ​​этому вектору, можно получить, изменив x и y компоненту и получив одну компоненту отрицательной. Если вы отрицаете новый компонент x, вы сделаете левый поворот, отрицая y, вы сделаете правильный поворот. Затем вы можете уменьшить вектор направления до размера блока (= длины 1), разделив каждый компонент на длину вектора (sqrt (xx + yy)). Наконец, вы можете снова растянуть единичный вектор по желаемой длине и иметь один из требуемых размеров. Если вы добавите этот вектор в или B, вы получите точку, в которую вы хотите нарисовать свою линию.

Вот небольшая математическая помощь:

Это точки A и B, выраженные в виде вектора.

Направляющий вектор вычисляется простым вычитанием.

Нормальный вектор задается переворачиванием направляющего вектора, т.е. обратного преобразования компонентов и превращения одного компонента в отрицательный. nl = normal, перевернутый влево, nr = нормальный, перевернутый вправо

Единичный вектор нормального вектора задается делением каждой компоненты на длину вектора.

Вычисляет длину вектора

Если вы хотите нарисовать линию из B влево (при приближении от A), вы вычислите точку P, чтобы нарисовать линию как

Итак, вы хотите чередовать, что один раз вы рисуете влево и один раз вправо при повторении по точкам.

Если у вас есть точки, лежащие вне вашего холста, то длина, вероятно, слишком велика. Вы можете, конечно, рассчитать точку, в которой вектор в P пересечет границу, вычислив точку пересечения вектора BP и границы.