Я делаю свой первый движок Raycasting и хочу повернуть линию на угол θ.
Как это сделать? Можно ли показать мне базовый код на C++ или псевдокод?
Это изображение описывает мою проблему:

Я решил сделать все это в graphics.h, потому что это простейший графический заголовок для C / C++.
Ссылка не работает, я получаю, что изображение не отображается.
Меня устраивает :/
Если вы занимаетесь линейной алгеброй, выберите библиотеку линейной алгебры и выразите ее, используя значения соответствующих типов. Затем вы можете написать код, который выглядит как математика B = P + M * (A - P);возможно, допустимый C++
Этот сайт может быть вам полезен: geomalgorithms.com





Один простой алгоритм:
-P так, чтобы P находился в точке (0, 0).A на угол, умножив его на матрица вращения.P, чтобы восстановить исходное положение.Все эти три шага можно выполнить с помощью одного умножения матрицы 3x3.
Вы хотите:
B = P + M * (A - P)
Где M - это двумерная матрица вращения:
M = | cos(ϴ) -sin(ϴ) |
| sin(ϴ) cos(ϴ) |
В C++ это можно было бы записать как:
float c = cos(theta), s = sin(theta);
float dx = ax - px, dy = ay - py;
float bx = px + c * dx - s * dy;
float by = py + s * dx + c * dy;
Скалярное произведение двух векторов обладает следующим свойством:
vec(PA) . vec(PB) = rho cos theta
Взяв определение наших двух векторов:
vec(PA) = (x_a-x_p, y_a-y_p)
vec(PB) = (x_b-x_p, y_b-y_p)
Мы можем получить:
(x_a-x_p)(x_b-x_p) + (y_a-y_p)(y_b-y_p) = rho cos theta (1)
Поскольку PA = PB, мы также имеем:
(x_a-x_p)^2 + (y_a-y_p)^2 = (x_b-x_p)^2 + (y_b-y_p)^2 (2)
Из (1) и (2) вы можете получить x_b и y_b с помощью некоторого арифметического автопилота.
Также интересно, потому что кросс-продукт работает только в 3-х измерениях.