Ответ 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 и границы.