我正在制造我的第一个光线投射引擎,并且希望将线旋转角度θ
这是怎么做到的?有可能给我看一些基本的C ++代码或一些伪代码吗?
此图描述了我的问题:
我决定在graphics.h
中进行所有操作,因为它是C / C ++最简单的图形头。
答案 0 :(得分:4)
您要
B = P + M * (A - P)
其中M
是2D旋转矩阵:
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;
答案 1 :(得分:2)
答案 2 :(得分:2)
两个向量的标量积具有以下性质:
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
。