C++ 如何围绕直线的一个顶点旋转直线
我正在制作我的第一个光线投射引擎,我想把一条线旋转一个角度θ 如何做到这一点?是否可以给我一些基本的C++代码或一些伪代码? 此图像描述了我的问题:C++ 如何围绕直线的一个顶点旋转直线,c++,algorithm,geometry,raycasting,cartesian-coordinates,C++,Algorithm,Geometry,Raycasting,Cartesian Coordinates,我正在制作我的第一个光线投射引擎,我想把一条线旋转一个角度θ 如何做到这一点?是否可以给我一些基本的C++代码或一些伪代码? 此图像描述了我的问题: 可选问题 我决定在graphics.h中完成这一切,因为它是C/C++最简单的图形头。一个简单的算法: 移动圆圈-P,使P位于(0,0) 将A旋转角度乘以 移动圆P以恢复其原始位置 所有这三个步骤都可以使用一个3x3矩阵乘法完成。您需要: B = P + M * (A - P) 其中M是二维旋转矩阵: M = | cos(ϴ) -sin(
可选问题 我决定在
graphics.h
中完成这一切,因为它是C/C++最简单的图形头。一个简单的算法:
-P
,使P
位于(0,0)A
旋转角度乘以P
以恢复其原始位置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\u b
和y\u b
。也感兴趣,因为叉积只在三维中起作用链接不起作用,我得到的图像无法显示。它对我有效:/如果你在做线性代数,选择一个线性代数库,并使用适当类型的值表示它。然后您可以编写类似于数学B=P+M*(A-P)的代码代码>可以是有效的C++此网站可以为您提供帮助: