三维坐标转换

如果坐标(x,y,z)->(y,-z,-x)可以使用坐标系:

import mathdef mat_vec_mult(matrix, vector):"""将 3x3 矩阵与 3x1 向量相乘。参数:matrix: 3x3 的旋转矩阵vector: 3x1 的向量返回:3x1 的结果向量"""result = [0, 0, 0]for i in range(3):result[i] = sum(matrix[i][j] * vector[j] for j in range(3))return resultdef rotation_matrix_intrinsic_xyz(alpha, beta, gamma, degrees=True):"""计算内旋顺序(绕 x、y、z 轴)下的旋转矩阵。参数:alpha: 绕 x 轴的旋转角度beta:  绕 y 轴的旋转角度gamma: 绕 z 轴的旋转角度degrees: 如果为 True,则输入角度为度;否则为弧度返回:3x3 的旋转矩阵,作为嵌套列表"""if degrees:alpha = math.radians(alpha)beta = math.radians(beta)gamma = math.radians(gamma)# 绕 x 轴的旋转矩阵Rx = [[1, 0, 0],[0, math.cos(alpha), -math.sin(alpha)],[0, math.sin(alpha),  math.cos(alpha)]]# 绕 y 轴的旋转矩阵Ry = [[ math.cos(beta), 0, math.sin(beta)],[0, 1, 0],[-math.sin(beta), 0, math.cos(beta)]]# 绕 z 轴的旋转矩阵Rz = [[math.cos(gamma), -math.sin(gamma), 0],[math.sin(gamma),  math.cos(gamma), 0],[0, 0, 1]]# 矩阵乘法:R = Rx * Ry * Rzdef mat_mult(A, B):result = [[0]*3 for _ in range(3)]for i in range(3):for j in range(3):result[i][j] = sum(A[i][k] * B[k][j] for k in range(3))return result# R = mat_mult(Rx, mat_mult(Ry, Rz))R=mat_mult(Rz, mat_mult(Ry, Rx))return R# 示例:绕 x 轴旋转 30 度,绕 y 轴旋转 45 度,绕 z 轴旋转 60 度
# alpha = -90  # 绕 x 轴的角度
# beta = 180  # 绕 y 轴的角度
# gamma = 45 # 绕 z 轴的角度alpha = -90  # 绕 x 轴的角度
beta = 0  # 绕 y 轴的角度
gamma = 90 # 绕 z 轴的角度rotation_matrix = rotation_matrix_intrinsic_xyz(alpha, beta, gamma)print("旋转矩阵:")
for row in rotation_matrix:print(row)a=[0,0,1]
# 应用旋转矩阵+
b = mat_vec_mult(rotation_matrix, a)print("旋转矩阵:",b)

这里,用内旋方法(每次都绕自己变化的轴转),R=Rz*Ry*Rx先绕x轴转,再绕y轴转,最后绕z轴转,可得到结果。

也可以用外旋的方法,绕x轴转,再绕y轴转,最后绕z轴转R=Rx*Ry*Rz,绕原来的坐标轴:

import mathdef mat_vec_mult(matrix, vector):"""将 3x3 矩阵与 3x1 向量相乘。参数:matrix: 3x3 的旋转矩阵vector: 3x1 的向量返回:3x1 的结果向量"""result = [0, 0, 0]for i in range(3):result[i] = sum(matrix[i][j] * vector[j] for j in range(3))return resultdef rotation_matrix_intrinsic_xyz(alpha, beta, gamma, degrees=True):"""计算内旋顺序(绕 x、y、z 轴)下的旋转矩阵。参数:alpha: 绕 x 轴的旋转角度beta:  绕 y 轴的旋转角度gamma: 绕 z 轴的旋转角度degrees: 如果为 True,则输入角度为度;否则为弧度返回:3x3 的旋转矩阵,作为嵌套列表"""if degrees:alpha = math.radians(alpha)beta = math.radians(beta)gamma = math.radians(gamma)# 绕 x 轴的旋转矩阵Rx = [[1, 0, 0],[0, math.cos(alpha), -math.sin(alpha)],[0, math.sin(alpha),  math.cos(alpha)]]# 绕 y 轴的旋转矩阵Ry = [[ math.cos(beta), 0, math.sin(beta)],[0, 1, 0],[-math.sin(beta), 0, math.cos(beta)]]# 绕 z 轴的旋转矩阵Rz = [[math.cos(gamma), -math.sin(gamma), 0],[math.sin(gamma),  math.cos(gamma), 0],[0, 0, 1]]# 矩阵乘法:R = Rx * Ry * Rzdef mat_mult(A, B):result = [[0]*3 for _ in range(3)]for i in range(3):for j in range(3):result[i][j] = sum(A[i][k] * B[k][j] for k in range(3))return resultR = mat_mult(Rx, mat_mult(Ry, Rz)) #外旋# R=mat_mult(Rz, mat_mult(Ry, Rx)) #内旋return R# 示例:绕 x 轴旋转 30 度,绕 y 轴旋转 45 度,绕 z 轴旋转 60 度
# alpha = -90  # 绕 x 轴的角度
# beta = 180  # 绕 y 轴的角度
# gamma = 45 # 绕 z 轴的角度alpha = -90  # 绕 x 轴的角度
beta = -90 # 绕 y 轴的角度
gamma = 0 # 绕 z 轴的角度rotation_matrix = rotation_matrix_intrinsic_xyz(alpha, beta, gamma)print("旋转矩阵:")
for row in rotation_matrix:print(row)a=[1,0,0]
# 应用旋转矩阵+
b = mat_vec_mult(rotation_matrix, a)print("旋转矩阵:",b)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/pingmian/83538.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C++高级主题】虚继承

目录 一、菱形继承:虚继承的 “导火索” 1.1 菱形继承的结构与问题 1.2 菱形继承的核心矛盾:多份基类实例 1.3 菱形继承的具体问题:二义性与数据冗余 二、虚继承的语法与核心目标 2.1 虚继承的声明方式 2.2 虚继承的核心目标 三、虚继…

什么是分布式锁?几种分布式锁分别是怎么实现的?

一:分布式锁实现思路 1.1 基本原理与实现方式 (1)分布式锁的实现方式 (2)基于Redis的分布式锁 获取锁 长时间无人操作,使锁自动过期 添加锁与设置过期时间需原子性 释放锁 1.2 实例 (1&…

Legal Query RAG(LQ-RAG):一种新的RAG框架用以减少RAG在法律领域的幻觉

人工智能正在迅速改变法律专业人士的工作方式——从起草合同到进行研究。但尽管大型语言模型(LLM)功能强大,它们在关键领域却常常出错:真实性。当人工智能在法律文件中“幻觉”出事实时,后果可能是严重的——问问那些无…

如何用AI高效运营1000+Tiktok矩阵账号

在当今数字化的时代,Tiktok 矩阵账号运营成为了众多企业和个人追求流量与变现的重要手段。然而,面对众多的账号管理,如何高效运营成为了关键。此时,AI 工具的出现为我们提供了强有力的支持。 一、Tiktok 矩阵账号的重要性 Tiktok…

数据结构与算法学习笔记(Acwing 提高课)----动态规划·树形DP

数据结构与算法学习笔记----动态规划树形DP author: 明月清了个风 first publish time: 2025.6.4 ps⭐️树形动态规划(树形DP)是处理树结构问题的一种动态规划方法,特征也很明显,会有一个树形结构,其实是DFS的优化。…

得物GO面试题及参考答案

动态规划的概念是什么? 动态规划(Dynamic Programming, DP)是一种通过将复杂问题分解为重叠子问题,并利用子问题的解来高效解决原问题的方法。其核心思想在于避免重复计算,通过存储子问题的解(通常使用表格…

扫地机产品--气压传感器器件异常分析

扫地机产品–气压传感器器件异常分析 文章目录 扫地机产品--气压传感器器件异常分析一.背景1‌.1 **标准大气压的定义与数值**‌二.分析故障2.1**万用表如何测量二极管**2.2 不良气压传感器的万用表二极管挡位测量结果分析。2.3 不良气压传感器的开盖分析2.4 结论2.5 后续措施三…

C#基础语法(2)

### 练习 一、变量和数据类型 - 1. 变量定义与赋值 cs using System; namespace Name { class Program { public static void Main(string[] args) { int age 20; double height 1.75; string name "张三…

连接关键点:使用 ES|QL 联接实现更丰富的可观测性洞察

作者:来自 Elastic Luca Wintergerst ES|QL 的 LOOKUP JOIN 现已进入技术预览阶段,它允许你在查询时对日志、指标和追踪进行丰富处理,无需在摄取时进行非规范化。动态添加部署、基础设施或业务上下文,减少存储占用,加速…

Unity 中实现可翻页的 PageView

之前已经实现过: Unity 中实现可复用的 ListView-CSDN博客文章浏览阅读5.6k次,点赞2次,收藏27次。源码已放入我的 github,地址:Unity-ListView前言实现一个列表组件,表现方面最核心的部分就是重写布局&…

[Java 基础]创建人类这个类小练习

请根据如下的描述完成一个小练习: 定义一个名为 Human 的 Java 类在该类中定义至少三个描述人类特征的实例变量(例如:姓名、年龄、身高)为 Human 类定义一个构造方法,该构造方法能够接收所有实例变量作为参数&#xf…

LeetCode 热题 100 739. 每日温度

LeetCode 热题 100 | 739. 每日温度 大家好,今天我们来解决一道经典的算法题——每日温度。这道题在 LeetCode 上被标记为中等难度,要求我们找到一个数组,其中每个元素表示从当前天开始,下一个更高温度出现的天数。如果之后没有更…

《仿盒马》app开发技术分享-- 商品搜索页(顶部搜索bar热门搜索)(端云一体)

开发准备 随着开发功能的逐渐深入,我们的应用逐渐趋于完善,现在我们需要继续在首页给没有使用按钮以及组件添加对应的功能,这一节我们要实现的功能是商品搜索页面,这个页面我们从上到下开始实现功能,首先就是一个搜索…

spring-ai入门

spring-ai入门 1、前语 hi,我是阿昌,今天记录针对目前当下ai火热的背景下,ai的主流使用语言为python,但市面上很大部分的项目是java开发的的背景下,那java就不能涉及ai领域的开发了嘛?有句调侃的话说的好…

复习——C++

1、scanf和scanf_s区别 2、取地址&#xff0c;输出 char ba; char* p&b; cout<<*p; cout<<p; p(char*)"abc"; cout<<*p; cout<<p; cout<<(void*)p; 取地址&#xff0c;把b的地址给p 输出*p&#xff0c;是输出p的空间内的值…

《TCP/IP 详解 卷1:协议》第5章:Internet协议

IPv4和IPv6头部 IP是TCP/IP协议族中的核心协议。所有TCP、UDP、ICMP和IGMP 数据都通过IP数据报传输。IP提供了一种尽力而为、无连接的数据报交付服务。 IP头部字段 IPv4 头部通常为 20 字节&#xff08;无选项时&#xff09;&#xff0c;而 IPv6 头部固定为 40 字节。IPv6 不…

树莓派系列教程第九弹:Cpolar内网穿透搭建NAS

在数字时代&#xff0c;数据存储与共享的需求无处不在。无论是家庭用户想要搭建一个便捷的私人云盘&#xff0c;还是小型团队需要一个高效的数据共享中心&#xff0c;NAS&#xff08;网络附加存储&#xff09;无疑是最佳选择之一。然而&#xff0c;传统的NAS搭建往往需要复杂的…

React 组件异常捕获机制详解

1. 错误边界&#xff08;Error Boundaries&#xff09;基础 在React应用开发中&#xff0c;组件异常的有效捕获对于保证应用稳定性至关重要。React提供了一种称为"错误边界"的机制&#xff0c;专门用于捕获和处理组件树中的JavaScript错误。 错误边界是React的一种…

python3GUI--车牌、车牌颜色识别可视化系统 By:PyQt5(详细介绍)

文章目录 一&#xff0e;前言二&#xff0e;效果预览1.实时识别2.ROI3.数据导出 三.相关技术与实现1.目标识别与检测2.可视化展示3.如何设置推流环境4.如何实现的车牌和颜色识别5.项目结构 四&#xff0e;总结 本系统支持黄牌、蓝牌、绿牌、黑牌、白牌&#xff0c;支持双层车牌…

python做题日记(12)

第二十七题 LeetCode第27题要求原地移除数组中所有等于给定值val的元素&#xff0c;并返回移除后数组的新长度。不能使用额外的数组空间&#xff0c;必须在原数组上修改&#xff0c;且元素的顺序可以改变。对于这道题的解法在之前的题目中也使用过&#xff0c;可以使用双指针法…