gpt4 book ai didi

c++ - 使用旋转矩阵生成 3D 圆柱体

转载 作者:行者123 更新时间:2023-11-30 05:18:46 25 4
gpt4 key购买 nike

我正在尝试在 3D 空间中创建一个圆柱体。我在 3D 中获得起点和终点并放置顶点,我需要为圆柱体的底部和顶部创建 2 个圆。我考虑制作一个坐标为 (1,0,0) 的 vector u 并计算方向 vector dir = end - start。现在我做叉积得到一个 vector w = u x dir:这样我就与 w 的 dir vector 成 90 度角。问题是,我如何计算下一个位置 w' 与 w 和 w' 之间的任意角度。我读了很多关于旋转矩阵的文章,我可以用类似的东西绕 X 轴旋转:

Rx(angle) =   
(1 0 0 )
(0 cos(angle) -sin(angle))
(0 sin(angle) cos(angle) )

但方向可能类似于 (1.442, -3.22, 7.23)。所以它并不总是 x 轴,但也许我需要为每个轴上的每个新 w' 旋转。而且我不知道如何弄清楚我需要计算什么角度,如何计算以及哪个角度属于女巫旋转矩阵。

最佳答案

为此您需要基 vector (可以将其编码为变换矩阵)。

那么假设你得到了:


p0[3],p1[3] - 3D 中心点 (x,y,z)你的气缸底座
r - 半径

构建转换矩阵你需要


O[3] - 原点位置
X[3],Y[3],Z[3] - 基 vector

因此您可以利用叉积来获得垂直 vector :

O = p0;
Z = p1-p0;
Y = (1.0,0.0,0.0);
if (|dot(Y,Z)/|Z||>0.75) Y = (0.0,1.0,0.0); // this just make sure Z and Y are not parallel
X = cross(Y,Z);
Y = cross(Z,X);
X = r*X/|X|;
Y = r*Y/|Y|;

现在构建您的4x4 变换矩阵 M或使用 X,Y,Z,O直接计算顶点:

base0:

x=cos(a);
y=sin(a);
z=0.0;

base1:

x=cos(a);
y=sin(a);
z=1.0;

在哪里a = <0.0,2.0*PI>是角度。 XY平面平行于底面,z 是圆柱轴。转换这些 (x,y,z)到世界坐标使用:

(x',y',z') = M * (x,y,z)

这可以通过使用 MOpenGL 中本地完成作为 GL_MODELVIEW 的一部分或者改为这样做:

x' = O[0] + x*X[0] + y*Y[0] + z*Z[0];
y' = O[1] + x*X[1] + y*Y[1] + z*Z[1];
z' = O[2] + x*X[2] + y*Y[2] + z*Z[2];

查看相关的 QA:

关于c++ - 使用旋转矩阵生成 3D 圆柱体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41494329/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com