Coder Social home page Coder Social logo

quaternion's Introduction

四元数与三维旋转

简单地讲了一下四元数在计算机图形学中的应用,除此之外在 Bonus 章节中也讨论了一下 Gimbal Lock 的产生。

文档本身可以在这里找到:https://krasjet.github.io/quaternion/

Bonus 章节—Gimbal Lock:https://krasjet.github.io/quaternion/bonus_gimbal_lock.pdf

很久之前写的,所以错误可能会有很多。如果你发现有任何的错误或者对内容有建议,请到Issues中报告。

Demo

demo目录下你可以找到一些演示用的 MATLAB 代码。因为 MATLAB 不是免费的软件,所以我将每个动画都输出成了 GIF,你可以进入各个 Demo 的目录中观看(流量预警)。你也可以使用免费的 Octave 运行代码,但是性能可能不是很好。

更新

  • 8/17/2020:大幅度的排版修正
  • 2/18/2019:添加了第九章「附录 2:左手坐标系统下的旋转」
  • 2/25/2019:重写了第二章的开头

Some other stuff

If you like my works, you might also enjoy reading these:

quaternion's People

Contributors

krasjet avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

quaternion's Issues

勘误

image.png

20页 3.1.4 小节末尾这里的 ij 后面应该有加号吧?

勘误

第19页的

𝑖𝑗𝑘𝑘=−𝑘(等式两边同时右乘以𝑖)

应该将括号里的改 𝑖 成 𝑘,因为上一行是

𝑖𝑗𝑘=−1

3.1.8 逆和转置

该节内容提到四元数的逆,以及通过四元数的共轭计算其逆的方法。其中的“转置”概念在该节是如何体现的,没有明白

P42 nlerp 的两个输入向量必须是单位向量,否则差值结果不会经过初始和最终向量

您好,关于p42中「nlerp 的两个输入向量必须是单位向量,否则差值结果不会经过初始和最终向量」这段话我有点疑问:
由nlerp公式

$$q_t=\frac{(1-t)q_{0} + tq_{1}}{||(1-t)q_0+tq_1||}$$

两边同乘v得到

$$v_t=\frac{(1-t)v_{0} + tv_{1}}{||(1-t)q_0+tq_1||}$$

而不是文档里的

$$v_t=\frac{(1-t)v_{0} + tv_{1}}{||(1-t)v_0+tv_1||}$$

也就是说,v0,v1是不是单位向量都可以 nlerp 差值,都会经过初始和最终向量(t=0或1时,分母是单位四元数的模,都是1)

第21页一个错误

第21页向量u和v的叉乘结果应该是
(ch-dg)i - (bh-df)j+(bg-cf)k
原文写成了
(ch-bg)i - (bh-df)j+(bg-cf)k

43页 概念疑似错误

Snipaste_2019-07-30_10-45-01

IMG_0067

从速度三角形上来看,沿直线(v0v1)的速度固定,在vt=0~0.5的过程中,合速度大小应该是逐渐减小的,后半段同理是逐渐加速的。如果以上理解没有问题的话,教程中这部分应该是搞反了。

Quaternion 2.3节中的问题

这个等式的第二行是怎么推出来的,能否细讲下或给个Reference,我代数没啥基础

v′⊥=v′𝑣+v′𝑤
   =cos(θ)v⊥+sin(θ)w
   =cos(θ)v⊥+sin(θ)(u×v⊥)

两个小笔误

  1. “附录 1:四元数的指数映射”,p63
    展开RHS的时候,sin(theta)的展开式复制了cos(theta)的展开式,没有改过来。

  2. 文中提到的“Graßmann 积”是不是“Grassmann 积”?在网上我没有查到前者,查到了后者。

請問四元數一個證明q*q=qq*

因为 (q ∗ ) ∗ = [s, −(−v)] = [s, v] = q, q ∗ q = (q ∗ )(q ∗ ) ∗ = ∥q ∗ ∥ 2 = s 2 + x 2 + y 2 + z 2 = ∥q∥ 2 = qq∗ 所以我们得到,q ∗ q = qq∗.这个特殊的乘法是遵守交换律的.

請問為甚麼在q = (q ∗ )(q ∗ ) ∗ = ∥q ∗ ∥ 2
這裡的時候最後結果有一個共軛符號消失了

Graßmann 积

文章中页处,v·u与v×u这两个等式表达式的成立前提应该是ij=jk=ki=0,也就是传统上的三维坐标系三轴有的正交关系,但是四元数当中i,j,k不满足上述关系,为什么依然可以得到该结果?

勘误

四元树文档,第18页,3.1.4节:

如果是 𝑞1𝑞2,那么我们就说「𝑞2 左乘以 𝑞1」,如果是 𝑞2𝑞1,那我们就说「𝑞2 右乘以 𝑞1」.

左右乘的顺序是不是写反了?

29页Lemma2,v∥不是纯四元数也行吧?

首先阅读这本书真是非常感动愉快的体验,作者真的是用心了,太伟大了!
其次如标题所述,29页的Lemma2中,v∥是纯四元数似乎是多余的限制?如果是,不妨删掉
再次感谢作者^_^

想问一下方向余弦矩阵,坐标轴的转换为什么和单纯的向量旋转的矩阵不一样呢

主要想问一下您方向余弦矩阵,坐标轴的转换为什么和单纯的向量旋转的矩阵不一样呢

下面的附件是我结合我们的课程整理的笔记,我会在我的github上持续更新:https://github.com/Lovely-XPP/Notebook/笔记pdf 里面的航天器姿态动力学与控制.pdf。其中,我觉得向量和矩阵的转换有些部分比较奇怪,也想请教一下您帮忙看看有无错误,万分感谢!!

航天器姿态动力学与控制.pdf

勘误笔误 32页

32页3.3节下面第3行 “左乘一个四元数 𝑞 = 𝑎 + 𝑏𝑖 + 𝑐𝑗 + 𝑑𝑗”这句话,d后面应该乘的是k

7.3二重四元数是否能表示缩放

7.3在介绍二重四元数的时候有一句话,“除了普通的四元数之外,几何代数中还衍生出来了一个二重四元数(Dual Quater- nion).它不仅能够表示 3D 旋转,还能够表示平移和缩放”。
简单看了一些文档,用了glMatrix.js库做了简单实践,发现二重四元数并没有针对单轴缩放的能力,是否我没有找到正确的使用方法呢:)
另外,基于四元数插值的能力,二重四元数如果能整合旋转、平移、缩放为一体,在实践中应该是个蛮有用的技术,希望能多讲一讲,谢谢🙏

四元数转矩阵的公式是否有两种可能性

_第3.3小节得出的矩阵公式是{
{1 - 2y^2 - 2z^2, 2xy - 2wz, 2wy + 2xz},
{2xy + 2wz, 1 - 2x^2 - 2z^2, -2wx + 2yz},
{-2wy + 2xz, 2wx + 2yz, 1 - 2x^2 - 2y^2 }
}
不过在另一些文献和代码(gl-Matrix)里面看到的公式是{
{1 - 2y^2 - 2z^2, 2xy + 2wz, -2wy + 2xz},
{2xy - 2wz, 1 - 2x^2 - 2z^2, 2wx + 2yz},
{2wy + 2xz, -2wx + 2yz, 1 - 2x^2 - 2y^2 }
}
https://blog.csdn.net/loongkingwhat/article/details/88427828

是因为左手坐标和右手坐标的原因造成的吗?

计算机图形学新手,请指点,谢谢🙏

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.