三维空间里一个点绕坐标轴旋转

本文介绍了如何在三维空间中围绕任意轴旋转一个点的方法。使用OpenGL中的glRotatef函数作为示例,详细解释了其背后的数学原理,并提供了计算新坐标的具体公式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原地址:http://blog.youkuaiyun.com/qiuchangyong/archive/2010/09/02/5859628.aspx

 

在三维空间里一个点绕X轴 Y轴 Z轴旋转一定弧度后新的点的坐标是容易计算的,问题是如果它所绕的旋转轴是一个任意矢量(x,y,z)的话,怎么知道旋转angle弧度后新的点的坐标呢?

在OPENGL里有一个函数glRotatef(angle,x,y,z)可以实现此功能,它的实现是左乘一个矩阵

x2(1-c)+c xy(1-c)-zs  xz(1-c)+ys

yx(1-c)+zs  y2(1-c)+c  yz(1-c)-xs

xz(1-c)-ys yz(1-c)+xs  z2(1-c)+c

假定坐标轴是右手系的(opengl的坐标轴是右手系的), 其中 c = cos(angle), s = sin(angle), angle是从矢量(x,y,z)的正向看去逆时针方向旋转所成的, 矢量(x,y,z)必须是已经单位化了的

new_x = (x2(1-c)+c) * old_x + (xy(1-c)-zs) * old_y + (xz(1-c)+ys) * old_z

new_y = (yx(1-c)+zs) * old_x + (y2(1-c)+c) * old_y + (yz(1-c)-xs) * old_z

new_z = (xz(1-c)-y) * old_x + (yz(1-c)+xs) * old_y + (z2(1-c)+c) * old_z

(old_x,old_y,old_z)是原来的点的坐标, (new_x,new_y,new_z)是旋转后的新的点的坐标

这个公式是怎么推导出来的我就不打算去深究了,这个问题困惑我好久了,比如一个矢量绕一个矢量旋转一定角度后得到新的矢量是什么,用它来计算就可以,可以分别计算矢量的起点和终点旋转后得到的新的点的坐标,也就得到了新的矢量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值