3 维空间中,求过原点的直线的方向向量? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
UNITY: Game Development Tool
License Comparisons
zeronofreya
V2EX    UNITY

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

  •  
  •   zeronofreya 2022-02-23 22:38:43 +08:00 3151 次点击
    这是一个创建于 1324 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    比如旋转角度为:

    (30, 30, 30) 

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

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

    第 1 条附言    2022-02-23 23:58:45 +08:00

    是指绕 xyz 轴旋转,演示软件为 Blender 补充:

    第 2 条附言    2022-02-24 00:04:12 +08:00
    我目前的想法是 根据三角函数算一个直线上的点,再向量化,不知道可不可以
    第 3 条附言    2022-02-24 13:58:42 +08:00

    感谢大家的回复,由于只有3次附言,这是最后一次了,帖子不能再更新,有兴趣可以看回复

    我的表达或许不到位,导致大家有点误解。我的最终目的是获得一个面的朝向,理由是blender的api:

    bmesh.ops.bisect_plane(bm, geom=bm.faces[:] + bm.edges[:] + bm.verts[:], clear_inner=True, clear_outer=True, use_snap_center=False, plane_co=(0, 0, 0), // 这是面的中心位置 plane_no=(0, 0, 1) // 这是面的朝向 ) 

    面的朝向可以理解成一个法向量,也能理解成 空间中一点(x,y,z) 与原点连成的直线的法向量。或许有错误,但这里这么理解没问题。 我为了简单,转化成了直线的旋转量(没考虑到有这么多坑……),经大家的指点发现对我来说这过于复杂,没学过高数,矩阵啥的看不懂。

    那就回到最开始,直接在blender里操作一个空物体,它的世界座标法向量化就是我要的。

    感谢各位的帮助

    此后无法更新主题,有问题回复见

    16 条回复    2022-02-24 08:59:51 +08:00
    neteroster
        1
    neteroster  
       2022-02-23 23:10:40 +08:00
    这个旋转角度是什么?好像不太清晰
    kokutou
        2
    kokutou  
       2022-02-23 23:14:49 +08:00
    看看 unity 的基础教程...
    wudicgi
        3
    wudicgi  
       2022-02-23 23:24:53 +08:00
    旋转角度分别是绕 x, y, z 轴旋转的度数吗?
    thedrwu
        4
    thedrwu  
       2022-02-23 23:26:03 +08:00 via Android
    affine transformation
    注意顺序
    zeronofreya
        5
    zeronofreya  
    OP
       2022-02-23 23:46:17 +08:00
    @wudicgi 是的
    zeronofreya
        6
    zeronofreya  
    OP
       2022-02-24 00:01:32 +08:00
    @thedrwu 查了下,叫仿射变换来着,没看到相关性,我太菜了
    zeronofreya
        7
    zeronofreya  
    OP
       2022-02-24 00:07:27 +08:00
    @kokutou 这是数学相关吧? unity 难度也太高了……
    zeronofreya
        8
    zeronofreya  
    OP
       2022-02-24 00:08:09 +08:00
    @neteroster 补充了下,绕 xyz 轴旋转的角度
    wudicgi
        9
    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
        10
    secondwtq  
       2022-02-24 00:22:51 +08:00
    “只知道直线的旋转角度”
    这个问题本身就不明确,“旋转角度”有多种表示方式。

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

    那个讲的很清楚了...
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3500 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 05:06 PVG 13:06 LAX 22:06
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86