- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
最近,我一直在研究许多用于 WebGL 的矩阵库,以便更好地理解矩阵上执行的各种变换所涉及的数学。目前,我正在努力更好地理解用于旋转变换的数学。
具体来说,我已经了解了用于绕三个轴旋转的变换以及如何生成这些矩阵(如下所示)。
但是,我没有得到用于绕非 x、y 或 z 轴的任意轴旋转的方程式。
我目前正在通读 WebGL Programming Guide ,并且在提供的库中,他们使用以下 JS 绕任意轴旋转(其中 e
是包含 4x4 矩阵的数组):
len = Math.sqrt(x*x + y*y + z*z);
if (len !== 1) {
rlen = 1 / len;
x *= rlen;
y *= rlen;
z *= rlen;
}
nc = 1 - c;
xy = x * y;
yz = y * z;
zx = z * x;
xs = x * s;
ys = y * s;
zs = z * s;
e[ 0] = x*x*nc + c;
e[ 1] = xy *nc + zs;
e[ 2] = zx *nc - ys;
e[ 3] = 0;
e[ 4] = xy *nc - zs;
e[ 5] = y*y*nc + c;
e[ 6] = yz *nc + xs;
e[ 7] = 0;
e[ 8] = zx *nc + ys;
e[ 9] = yz *nc - xs;
e[10] = z*z*nc + c;
e[11] = 0;
e[12] = 0;
e[13] = 0;
e[14] = 0;
e[15] = 1;
据我所知,代码的第一部分用于规范化 3D 向量,但除此之外,老实说,我无法理解它。
例如,nc
, xy
, yz
, zx
, xs
, ys
和 zs
是什么意思?另外,举个例子,他们是如何得出公式 x*x*nc + c
来计算 e[0]
的?
根据 related SO post ,我确实找到了以下矩阵的引用,用于绕任意轴旋转:
这似乎与上面 JS 代码的作用有关(如果不相同的话)。
这个矩阵是如何生成的?关于如何绕任意轴旋转我想了很多,但我唯一能想到的就是将从原点延伸的 3D 矢量分解为其 x、y 和 z 分量,然后执行三种不同的旋转,这看起来效率很低。
拥有一个矩阵来为您完成所有这些似乎是最好的,但我真的很想了解该矩阵及其生成方式。
最后,虽然我不确定,但上面的矩阵似乎没有说明轴远离原点的平移。这是否可以通过简单地使用 4x4 矩阵而不是在适当位置使用 Tx、Ty 和 Tz 值来轻松处理?
谢谢。
最佳答案
请在此处找到数学概述:
http://paulbourke.net/geometry/rotate/
这里有详细的解释:
您关于旋转矩阵不考虑平移的说法是正确的。
是的,您可以通过将平移 x 旋转相乘来创建旋转然后平移矩阵:
1 0 0 t1 r11 r12 r13 0
T = 0 1 0 t2 R = r21 r22 r23 0
0 0 1 t3 r31 r32 r33 0
0 0 0 1 0 0 0 1
1 0 0 t1 r11 r12 r13 0 r11 r12 r13 t1
T x R = 0 1 0 t2 x r21 r22 r23 0 = r21 r22 r23 t2
0 0 1 t3 r31 r32 r33 0 r31 r32 r33 t3
0 0 0 1 0 0 0 1 0 0 0 1
如果您只想绕远离原点的任意轴旋转(即绕一条线),请在第二个 URL ( http://web.archive.org/web/20140515121518/http://inside.mines.edu:80/~gmurray/ArbitraryAxisRotation/ArbitraryAxisRotation.html ) 中查找项目“6.2 绕任意线旋转的归一化矩阵” .
关于matrix - 了解在 WebGL 中绕任意轴旋转背后的数学原理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22745937/
我正在编写国际象棋人工智能程序,并且在实现棋子方格表时遇到了问题。由于我只想每边有一张正方形 table ,因此我需要一个函数来翻转保存 x 轴值的一维数组。例如,这个数组: [ 2, 4, 5, 3
在应用程序中,在尝试使用触摸旋转对象时,我注意到一段时间后对象的位置发生了漂移(没有应用任何平移!!)。旋转仅围绕 z 轴,工作正常,但仅在旋转几次后才会发生漂移。 ds 将用于进行翻译(使用上下按钮
我正在尝试构建金字塔并为其设置动画。问题是在围绕 X 轴旋转它之后,我尝试围绕金字塔的高度(Y 轴)旋转它,但我每次都在移动。我基本上尝试了每个 transform-origin 选项,但它不起作用。
我需要绕其 x 轴(或 y 轴)旋转图像。我可以使用 avisynth 轻松创建这样的动画,但现在我需要使用 Python 的 moviepy 模块来实现该效果。我可以使用以下脚本轻松旋转图像,但需要
我有一个图像被分成两个相等的部分。我正在尝试在悬停时围绕 y 轴将图像的右侧部分旋转 -180°(逆时针)。 问题是有时(随机)图像旋转 180°(顺时针)而不是 -180°(逆时针)。这背后的原因可
如何使用CGAffineTransform(或其他)绕其Y轴旋转UIView?例如,我尝试过: self.image.transform = CGAffineTransform(rotationAng
我正在尝试围绕 y 轴旋转查看器。我有一个名为 tranform_eye() 的函数,它将计算 eyex、eyey 和 eyez 的下一个位置更新。 谁能帮我弄清楚如何计算 eyex、eyey 和 e
我无法解决我遇到的一个奇怪的错误,想知道是否有其他人遇到过类似的问题或可以提供解决方案。 我正在使用 javascript 访问 iOS 设备上的陀螺仪,并且对围绕 z 轴的旋转很感兴趣;我想要设备平
Qt 使用 3x3 变换矩阵进行透视变换和仿射变换。如果矩阵的最后一行等于 [0 0 1],则矩阵被认为是仿射的。由于这个原因,x 轴和 y 轴旋转矩阵是“非仿射”和透视失真结果。但还有进一步的影响。
我是一名优秀的程序员,十分优秀!