3 维空间中,求过原点的直线的方向向量?

2022-02-23 22:38:43 +08:00
 zeronofreya

标准 XYZ 空间,只知道直线的旋转角度,怎么求方向向量?

比如旋转角度为:

(30, 30, 30)

工作几年后这些东西全忘了,也不知道该发哪,作业帮么……

有会的朋友指点一下吧,谢谢

1553 次点击
所在节点    UNITY
16 条回复
neteroster
2022-02-23 23:10:40 +08:00
这个旋转角度是什么?好像不太清晰
kokutou
2022-02-23 23:14:49 +08:00
看看 unity 的基础教程...
wudicgi
2022-02-23 23:24:53 +08:00
旋转角度分别是绕 x, y, z 轴旋转的度数吗?
thedrwu
2022-02-23 23:26:03 +08:00
affine transformation
注意顺序
zeronofreya
2022-02-23 23:46:17 +08:00
@wudicgi 是的
zeronofreya
2022-02-24 00:01:32 +08:00
@thedrwu 查了下,叫仿射变换来着,没看到相关性,我太菜了
zeronofreya
2022-02-24 00:07:27 +08:00
@kokutou 这是数学相关吧? unity 难度也太高了……
zeronofreya
2022-02-24 00:08:09 +08:00
@neteroster 补充了下,绕 xyz 轴旋转的角度
wudicgi
2022-02-24 00:13:10 +08:00
我没做过这方面工作,现查了一下
https://en.wikipedia.org/wiki/Rotation_matrix#Basic_rotations
这里边的 Basic rotations 是不是你需要的

比如初始的向量是 (1, 0, 0) 的话,依次乘 3 个旋转矩阵,出来的向量就是你需要的
secondwtq
2022-02-24 00:22:51 +08:00
“只知道直线的旋转角度”
这个问题本身就不明确,“旋转角度”有多种表示方式。

还好有图,楼主那个红框底下有个“XYZ Euler”,这个就是当前用的哪种旋转方式(貌似这功能我只在 Blender 上面见过)
然后再去 wiki 查就是了
wudicgi
2022-02-24 00:24:26 +08:00
好像底下 General rotations 里有 Basic rotations 中这 3 个旋转矩阵相乘的结果,直接用就可以了
注意好方向,和初始向量的值
wanglz111
2022-02-24 00:39:00 +08:00
(cosαsinγ, sinαsinγ, cosγ) 大概类似于三重积分三角换元的思路?
MCVector
2022-02-24 00:45:08 +08:00
向量乘上一个旋转矩阵就行了,如果只有旋转的话用 3x3 的旋转矩阵就可以啦。
旋转矩阵可以从旋转轴和角度构造,这个比较适合你。你也可以转化成比较通用的欧拉角和四元数。
基本上所有的图形库都可以帮你构造旋转矩阵,自己手撸的话也不复杂,就是几个正余弦函数填到相应的矩阵位置上就行了。
详情可以查你所用工具或者库的旋转矩阵构造。
MCVector
2022-02-24 00:53:42 +08:00
insraq
2022-02-24 02:06:34 +08:00
虽然我这块也不是很熟悉,但是写游戏还是用到一些。

第一个问题是 “旋转角度 (30, 30, 30)” 并不能清晰定义出一个旋转,这个取决于旋转 XYZ 轴的顺序。比如 Unity 一般是旋转 Z X Y https://docs.unity3d.com/ScriptReference/Quaternion.Euler.html

第二个问题是“方向向量”也不能清晰定义出一个旋转 - 同一个方向向量有好多种旋转方法。一般游戏中,类似问题这么处理:

用 Quaternion.Euler 拿到 Quaternion, 然后 Quaternion * Vector3.forward 拿到一个清晰定义的 Vector3
kokutou
2022-02-24 08:59:51 +08:00
@kokutou #2
就是那个初始教程里面的四元数...

那个讲的很清楚了...

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/836040

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX