Первый шаг: вычислите «вектор» длиной 10 в направлении красной линии:
v = 10 * (x1-x2, y1-y2) / length of (x1-x2, y1-y2)
Длина вектора исходит от Пифагора: длина (X, Y) равна sqrt(X*X+Y*Y)
. Для этого есть стандартная функция математической библиотеки: std :: hypot.
Этот вектор должен указывать на ту же сторону, где вы хотите зеленые линии.
Второй шаг - вращение этого вектора. v под углом 45 градусов в обе стороны, давая вам векторы, представляющие две зеленые линии. Общая формулировка вращения даст вам следующее:
green1 = (v.x cos(45) - v.y sin(45), v.x sin(45) + v.y cos(45))
green2 = (v.x cos(45) + v.y sin(45), -v.x sin(45) + v.y cos(45))
Благодаря особому углу 45 градусов это значительно упростит: косинус и синус имеют одинаковое значение cos(45) = sin(45) = sqrt(1/2)
.
Если у вас есть эти два вектора, вам просто нужно добавить их в (x1, y1).
Собрать все вместе:
length_of_red = std::hypot(x1 - x2, y1 - y2);
sqrt_half = std::sqrt(.5);
x = 10*(x1 - x2) / length_of_red;
y = 10*(y1 - y2) / length_of_red;
x3 = x1 + sqrt_half*(x - y);
y3 = y1 + sqrt_half*(x + y);
x4 = x1 + sqrt_half*(x + y);
y4 = y1 + sqrt_half*(-x + y);