三位空间坐标转换

news/2024/11/8 23:40:34/

轴系旋转矩阵及代码实现-python

绕Z轴旋转

旋转矩阵
[ c o s θ − s i n θ 0 s i n θ c o s θ 0 0 0 1 ] \begin{bmatrix} cos \theta & -sin \theta & 0 \\ sin \theta & cos \theta & 0 \\ 0 & 0 & 1 \end{bmatrix} cosθsinθ0sinθcosθ0001

    def z_rotation(x, y, z, thetaz):x1, y1 = x, yrz = math.radians(thetaz)outx = math.cos(rz) * x1 - math.sin(rz) * y1outy = math.sin(rz) * x1 + math.cos(rz) * y1outz = zreturn [format(outx, '.2f'), format(outy, '.2f'), format(outz, '.2f')]

绕Y轴旋转

旋转矩阵
[ c o s β 0 s i n β 0 1 0 − s i n β 0 c o s β ] \begin{bmatrix} cos\beta & 0 & sin\beta \\ 0 & 1 & 0 \\ -sin\beta & 0 & cos\beta \end{bmatrix} cosβ0sinβ010sinβ0cosβ

    def y_rotation(x, y, z, thetay):x1, z1 = x, zry = math.radians(thetay)outx = math.cos(ry) * x1 + math.sin(ry) * z1outy = youtz = math.cos(ry) * z1 - math.sin(ry) * x1return [format(outx, '.2f'), format(outy, '.2f'), format(outz, '.2f')]

绕X轴旋转

旋转矩阵
[ 1 0 0 0 c o s α − s i n α 0 s i n α c o s α ] \begin{bmatrix} 1 & 0 & 0 \\ 0 & cos \alpha & -sin \alpha \\ 0 & sin \alpha & cos\alpha \end{bmatrix} 1000cosαsinα0sinαcosα

    def x_rotation(x, y, z, thetax):y1, z1 = y, zrx = math.radians(thetax)outx = xouty = math.cos(rx) * y1 - math.sin(rx) * z1outz = math.cos(rx) * z1 + math.sin(rx) * y1return [format(outx, '.2f'), format(outy, '.2f'), format(outz, '.2f')]

绕任意轴旋转

具体推导过程这里不做详述,要注意公式中的( n x n_x nx, n y n_y ny, n z n_z nz)是单位向量,因此代码中要做转化处理

旋转矩阵
[ n x 2 ( 1 − c o s θ ) + c o s θ n x n y ( 1 − c o s θ ) + n z s i n θ n x n z ( 1 − c o s θ ) − n y s i n θ n x n y ( 1 − c o s θ ) − n z s i n θ n y 2 ( 1 − c o s θ ) + c o s θ n y n z ( 1 − c o s θ ) + n x s i n θ n x n z ( 1 − c o s θ ) + n y s i n θ n y n z ( 1 − c o s θ ) − n x s i n θ n x 2 ( 1 − c o s θ ) + c o s θ ] \begin{bmatrix} n^2_x(1-cos\theta)+cos\theta &n_xn_y(1-cos\theta)+n_zsin\theta&n_xn_z(1-cos\theta)-n_ysin\theta\\ n_xn_y(1-cos\theta)-n_zsin\theta&n_y^2(1-cos\theta)+cos\theta&n_yn_z(1-cos\theta)+n_xsin\theta\\ n_xn_z(1-cos\theta)+n_ysin\theta&n_yn_z(1-cos\theta)-n_xsin\theta&n_x^2(1-cos\theta)+cos\theta \end{bmatrix} nx2(1cosθ)+cosθnxny(1cosθ)nzsinθnxnz(1cosθ)+nysinθnxny(1cosθ)+nzsinθny2(1cosθ)+cosθnynz(1cosθ)nxsinθnxnz(1cosθ)nysinθnynz(1cosθ)+nxsinθnx2(1cosθ)+cosθ

    def any_axis(x, y, z, vx, vy, vz, theta):# (vx,vy,vz)转化为单位向量x1 = vx / ((vx * vx + vy * vy + vz * vz) ** 0.5)y1 = vy / ((vx * vx + vy * vy + vz * vz) ** 0.5)z1 = vz / ((vx * vx + vy * vy + vz * vz) ** 0.5)radian = math.radians(theta)c = math.cos(radian)s = math.sin(radian)outx = (x1 * x1 * (1 - c) + c) * x + (x1 * y1 * (1 - c) - z1 * s) * y + (x1 * z1 * (1 - c) + y1 * s) * zouty = (y1 * x1 * (1 - c) + z1 * s) * x + (y1 * y1 * (1 - c) + c) * y + (y1 * z1 * (1 - c) - x1 * s) * zoutz = (x1 * z1 * (1 - c) - y1 * s) * x + (y1 * z1 * (1 - c) + x1 * s) * y + (z1 * z1 * (1 - c) + c) * z# print(c,s)return [format(outx, '.2f'), format(outy, '.2f'), format(outz, '.2f')]

http://www.ppmy.cn/news/786715.html

相关文章

三极管稳压电路仿真分析案例(转)

描述 1、稳压原理 R3和Z1构成简单的稳压电路,当VIN的电压高于Z1的稳压值Vz时,Z1的负极被稳压在Vz;Z1的负极连接到三极管的基极,三极管发射极E是输出,形成了一个射极跟随器,也就是说,E极的电压随…

安卓逆向系列教程(一)Dalvik 指令集

安卓逆向系列教程(一)Dalvik 指令集 作者:飞龙 寄存器 Dalvik 指令集完全基于寄存器,也就是说,没有栈。 所有寄存器都是 32 位,无类型的。也就是说,虽然编译器会为每个局部变量分配一个寄存器…

车牌识别C#项目源代码

车牌识别C#项目源码 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.InteropServices; public class VzClientSDK { public VzClientSDK() { // // TODO: …

unity shader视口空间到屏幕空间各坐标的取值范围

模型空间->世界空间->视口空间: 比较容易理解,就是用矩阵进行缩放旋转和平移 视口空间(右手坐标系)-> 齐次裁剪空间(左手坐标系): 下文中的n代表near,f代表far,fov代表FOV 设视口空间坐标点为V…

Matlab中空间直角坐标系中三维速度Vxyz转Ven平面速度

关于空间直角坐标系中三维速度Vxyz转Ven平面速度,需要完成连个步骤的工作:①空间直角坐标XYZ转为大地坐标BLH;② 三维速度Vxyz转Ven平面速度; 一、空间直角坐标XYZ转为大地坐标BLH 二、三维速度Vxyz转Ven平面速度 三、正式Matla…

rviz

rbx1 下载安装 一.安装 (1).克隆gmapping和amcl git clone https://github.com/ros-perception/slam_gmapping.git git clone https://github.com/ros-planning/navigation.git(2).rbx1 package 的下载 cd ~/catkin_ws/src git clone https://github.com/pirobot/rbx1.git cd…

Linux基础 | nc 网络命令,通过TCP和UDP在两台主机间建立连接传递消息、文件

nc,全名叫 netcat,它可以用来完成很多的网络功能,譬如端口扫描、建立TCP/UDP连接,数据传输、网络调试等等,因此,它也常被称为网络工具的 瑞士军刀 。 使用方式 我们可以这样来使用它: nc [-46…

计算机图形学基础:实验5 OpenGL二维几何变换

1.实验目的: 理解并掌握OpenGL二维平移、旋转、缩放变换的方法。 2.实验内容: 阅读实验原理,掌握OpenGL程序平移、旋转、缩放变换的方法。根据示范代码,完成实验作业。 3.实验原理&#xff1…