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

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

Вектор направления вычисляется простым вычитанием.

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

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

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

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