仿射变换-空间曲线绕定点旋转的公式推导
2009-02-13 09:34
603 查看
最近正好在写render的东西,顺便把这个推一下。
可能有些数学语言比较难懂,我会解释。
问题是由论坛上问到圆柱体旋转而起,下面文章也将圆柱体为主,其他曲线可以参考类推。
问题:
绕原点旋转的圆柱体公式。
思路1:
1 圆柱体公式表达
2 三维仿射变换
3 怎么求璇转角
1 圆柱体公式表达
空间任意曲线可以表示为:
xAxT=0 (1)
其中,x=[x y z 1] xT表示x的转置,把矩阵转一下,行变列,列边行。
A是一个正定的4*4的矩阵,且AT=A ,正定的意思是A
>0 对于球面,椭圆面等需要正定矩阵A
对于双曲面,抛物面等,不需要正定,也不需要AT=A
举两个例子
A=[1 0 0 0; 0 1 0 0; 0 0 1 0; 0 0 0 -c]; c是常数,c>0
代到公式(1)内
算出来为 x^2+y^2+z^2=c 这是球面
那么对于圆柱体公式
x^2+y^2=c
那么其对应的正定矩阵为
A=[1 0 0 0;0 1 0 0;0 0 0 0;0 0 0 -c];
A=[2 0 0 0;-2 1 0 0;-2 0 1 0;0 0 0 -c];
这个矩阵与上面相比较,第一列改了3个参数。大家自己乘一下
算出来(x-y)^2+(x-z)^2=c 这是什么?
这个是以y=z,x=0为对称轴的圆柱体
如果对这个还有问题,找线性代数的书,翻到正定二次型,看一下就好
2 三维仿射变换
上面的比较简单,只是抄了一下书。下面理解起来稍微有些困难,是我自己语言总结的 :)
三维仿射变换,其实是进行两次二维的仿射变换。每次仿射变换时,只需要考虑两个坐标。
二维仿射变换推导过程这里略过,网上有很多。
首先给出旋转点的公式,即二维的仿射变换
考虑点P(x,y),绕原点旋转了α 度后变成了P0(x0,y0),这里默认|P0|=|P|,因为我们只做旋转,不做伸缩
这是个简单的平面解析几何问题,很容易得到结果
x0=x*cosα-y*sinα
y0=x*sinα+y*cosα
这就是二维的旋转公式,也是最简单的仿射变换公式
写成矩阵形式
x0=Wx
其中,x0=[x0 y0]T x=[x y]T W=[cosα -sinα ; sinα cosα];
那么对于三维旋转而言,我们可以分解为两次二维的旋转(为什么要这样?因为只进行一次三位的变换会引起非线性项,这是我们不想看到的东西,有兴趣地可以自己推一下)
当然,将会有些小小的不同,两次二维的旋转是一次绕x轴,一次绕y轴
第一次,在yoz平面内旋转,即绕x轴旋转
x0=W0x
其中,x0=[x0 y0 z0 1]T x=[x y z 1]T W0=[1 0 0 0;0 cosα -sinα 0;0 sinα cosα 0;0 0 0 1];
可能有人奇怪,为什么向量最后多了一个1。这个1是给未来的伸缩作准备的。因为旋转的矩阵W只要稍加修改,便能成为既能旋转又能伸缩的矩阵,虽然我们现在不考虑伸缩,但将来可能会用到。况且要和之前的正定二次型做一个统一。
第二次,在xoz平面内旋转,即绕y轴旋转
x1=W1x0
其中,W1=[cosβ 0 -sinβ 0;0 1 0 0;sinβ 0 cosβ 0;0 0 0 1]; x1=[x1 y1 z1 1]T
至此,我们得到了旋转后的x1坐标
对于程序而言,只要把每个点乘上W0和W1即可。
剩下的问题是α和β怎么得到
3 怎么求旋转角
由上面的两次仿射变换,可以简单的得到旋转后的结果
由图示这里直接给出旋转角γ与α和β的关系
γ与α和β可以通过映射的原理求出来,当然还有一点,α所在平面和β所在平面是垂直的
cosγ=cosα+cosβ 有兴趣地可以自己推一下
这个公式有什么意义?
这个公式的意义在于我们可以随便找一个α,然后根据γ,解出β,然后进行两次的仿射变换
当然,要满足-1<cos<1的条件
4 总结
进行仿射变换步骤如下:
对于旋转角γ
任取α,根据cosγ=cosα+cosβ 解出β
根据α和β,进行两次仿射变换。将每个点乘以矩阵W0和W1
问题:
1 怎么保证两次旋转后能得到正确的旋转角?
2 怎么求出第一节中,(x-y)^2+(x-z)^2=c的仿射变换矩阵?
想通这两个问题,就可以理解整个过程了
提示:
1 自己手动推一遍,画几张图
2 只要做一次仿射变换就能得到答案了。
可能有些数学语言比较难懂,我会解释。
问题是由论坛上问到圆柱体旋转而起,下面文章也将圆柱体为主,其他曲线可以参考类推。
问题:
绕原点旋转的圆柱体公式。
思路1:
1 圆柱体公式表达
2 三维仿射变换
3 怎么求璇转角
1 圆柱体公式表达
空间任意曲线可以表示为:
xAxT=0 (1)
其中,x=[x y z 1] xT表示x的转置,把矩阵转一下,行变列,列边行。
A是一个正定的4*4的矩阵,且AT=A ,正定的意思是A
>0 对于球面,椭圆面等需要正定矩阵A
对于双曲面,抛物面等,不需要正定,也不需要AT=A
举两个例子
A=[1 0 0 0; 0 1 0 0; 0 0 1 0; 0 0 0 -c]; c是常数,c>0
代到公式(1)内
算出来为 x^2+y^2+z^2=c 这是球面
那么对于圆柱体公式
x^2+y^2=c
那么其对应的正定矩阵为
A=[1 0 0 0;0 1 0 0;0 0 0 0;0 0 0 -c];
A=[2 0 0 0;-2 1 0 0;-2 0 1 0;0 0 0 -c];
这个矩阵与上面相比较,第一列改了3个参数。大家自己乘一下
算出来(x-y)^2+(x-z)^2=c 这是什么?
这个是以y=z,x=0为对称轴的圆柱体
如果对这个还有问题,找线性代数的书,翻到正定二次型,看一下就好
2 三维仿射变换
上面的比较简单,只是抄了一下书。下面理解起来稍微有些困难,是我自己语言总结的 :)
三维仿射变换,其实是进行两次二维的仿射变换。每次仿射变换时,只需要考虑两个坐标。
二维仿射变换推导过程这里略过,网上有很多。
首先给出旋转点的公式,即二维的仿射变换
考虑点P(x,y),绕原点旋转了α 度后变成了P0(x0,y0),这里默认|P0|=|P|,因为我们只做旋转,不做伸缩
这是个简单的平面解析几何问题,很容易得到结果
x0=x*cosα-y*sinα
y0=x*sinα+y*cosα
这就是二维的旋转公式,也是最简单的仿射变换公式
写成矩阵形式
x0=Wx
其中,x0=[x0 y0]T x=[x y]T W=[cosα -sinα ; sinα cosα];
那么对于三维旋转而言,我们可以分解为两次二维的旋转(为什么要这样?因为只进行一次三位的变换会引起非线性项,这是我们不想看到的东西,有兴趣地可以自己推一下)
当然,将会有些小小的不同,两次二维的旋转是一次绕x轴,一次绕y轴
第一次,在yoz平面内旋转,即绕x轴旋转
x0=W0x
其中,x0=[x0 y0 z0 1]T x=[x y z 1]T W0=[1 0 0 0;0 cosα -sinα 0;0 sinα cosα 0;0 0 0 1];
可能有人奇怪,为什么向量最后多了一个1。这个1是给未来的伸缩作准备的。因为旋转的矩阵W只要稍加修改,便能成为既能旋转又能伸缩的矩阵,虽然我们现在不考虑伸缩,但将来可能会用到。况且要和之前的正定二次型做一个统一。
第二次,在xoz平面内旋转,即绕y轴旋转
x1=W1x0
其中,W1=[cosβ 0 -sinβ 0;0 1 0 0;sinβ 0 cosβ 0;0 0 0 1]; x1=[x1 y1 z1 1]T
至此,我们得到了旋转后的x1坐标
对于程序而言,只要把每个点乘上W0和W1即可。
剩下的问题是α和β怎么得到
3 怎么求旋转角
由上面的两次仿射变换,可以简单的得到旋转后的结果
由图示这里直接给出旋转角γ与α和β的关系
γ与α和β可以通过映射的原理求出来,当然还有一点,α所在平面和β所在平面是垂直的
cosγ=cosα+cosβ 有兴趣地可以自己推一下
这个公式有什么意义?
这个公式的意义在于我们可以随便找一个α,然后根据γ,解出β,然后进行两次的仿射变换
当然,要满足-1<cos<1的条件
4 总结
进行仿射变换步骤如下:
对于旋转角γ
任取α,根据cosγ=cosα+cosβ 解出β
根据α和β,进行两次仿射变换。将每个点乘以矩阵W0和W1
问题:
1 怎么保证两次旋转后能得到正确的旋转角?
2 怎么求出第一节中,(x-y)^2+(x-z)^2=c的仿射变换矩阵?
想通这两个问题,就可以理解整个过程了
提示:
1 自己手动推一遍,画几张图
2 只要做一次仿射变换就能得到答案了。
相关文章推荐
- 坐标旋转公式(推导)
- 关于感知学习模型机中空间任一点到超平面的距离公式的推导过程
- 关于感知学习模型机中空间任一点到超平面的距离公式的推导过程
- 空间中任一点到超平面的距离公式的推导过程
- 推导坐标旋转公式
- 【计算几何】推导坐标的旋转公式
- 关于感知学习模型机中空间任一点到超平面的距离公式的推导过程
- 关于感知学习模型机中空间任一点到超平面的距离公式的推导过程
- flash 高级坐标旋转公式推导
- 二维图形旋转公式的推导
- 关于感知学习模型机中空间任一点到超平面的距离公式的推导过程
- 关于感知学习模型机中空间任一点到超平面的距离公式的推导过程
- 3D坐标绕轴旋转公式推导
- 推导坐标旋转公式
- 关于感知学习模型机中空间任一点到超平面的距离公式的推导过程
- 空间两点绕某一固定点旋转公式
- 空间向量绕任意轴旋转推导
- 关于感知学习模型机中空间任一点到超平面的距离公式的推导过程
- 关于感知学习模型机中空间任一点到超平面的距离公式的推导过程
- 推导坐标旋转公式