计算球体上一点指向球心的姿态

news2024/9/17 8:27:43

背景:最近有个需求,需要用相机拍摄一个物品,初始状态下相机在该物体正上方,随后相机的坐标按一定规律变化,要求它的视野中心一直固定在该物体上。这个问题可以理解为:以物品建立一个坐标系,相机在该空间下的姿态为[x,y,z, α \alpha α, β \beta β, γ \gamma γ]。其中X、Y、Z为相机在物体坐标系下的坐标, α \alpha α β \beta β γ \gamma γ为相机绕三轴旋转的夹角。而X、Y、Z为已知量, α \alpha α β \beta β γ \gamma γ为待求量。

关于求角度的问题,可以转换为球体的角度问题:

在这里插入图片描述
对于球体上的一点,我们可以通过三维直角坐标系表示,同时也可以球坐标系表示。假设球体上一点的初始坐标在[0,0,r],其中 r r r为球体的半径。则我们可以通过两次旋转将该点转动到球体上的任意位置,因此该点的表示方式为:[ r r r ϕ \phi ϕ θ \theta θ]。 r r r是球面坐标点到球心的距离; ϕ \phi ϕ为是赤道面(由 x 轴与 y 轴确定的平面)上起始于 x 轴,沿逆时针方向量出的角度; θ \theta θ是 z 轴与 r 的夹角。

回到最初的问题上,该问题可以理解为:初始状态下,相机的姿态为[0,0,0,3.14,0,0],即相机在Z轴正上方位置,相机的Z轴朝下。则如果此时我们需要将相机转动到球体上的[ r r r ϕ \phi ϕ θ \theta θ]位置时,得到相机的新的角度值为[3.14+ θ \theta θ,0, ϕ \phi ϕ],这样,我们就能知道相机相对于物品的姿态了。

那么接下来就是求一下 ϕ \phi ϕ θ \theta θ两个角度就可以了,根据三维直角坐标系表示方法与球坐标系表示方法之间的关系:
{ x = r s i n θ c o s φ , y = r s i n θ s i n φ , z = r c o s θ \begin{cases} x=rsinθcosφ, \\ y=rsinθsinφ, \\ z=rcosθ \end{cases} x=rsinθcosφ,y=rsinθsinφ,z=rcosθ

可知,当已知球体上一个点的坐标[X、Y、Z],则可以根据上式求出绕两个轴的旋转角度:
{ θ = a r c c o s ( z / r ) φ = a r c s i n ( y / ( r s i n θ ) ) \begin{cases} θ=arccos(z/r) \\ φ=arcsin(y/(rsinθ)) \end{cases} {θ=arccos(z/r)φ=arcsin(y/(rsinθ))
则根据上式可以得知在任意位置上的相机姿态为:[X、Y、Z、3.14+ θ \theta θ,0, ϕ \phi ϕ]。

根据TF发布一下结果:
在这里插入图片描述
在这里插入图片描述

可以看到虽然相机的位置是一直在发生变化的,但是相机的Z轴是始终指向circle的中心的,则可以满足开始的需求。

参考:

唯心识学061·简单介绍一下球坐标系

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

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

相关文章

C++ 类和对象篇(三) 空类和默认成员函数

目录 一、空类 二、6个默认成员函数 一、空类 1.是什么? 如果一个类中没有显示定义任何成员,简称为空类。 class A {};//一个空类 2.空类中的成员? 空类中真的什么都没有吗? 并不是,任何类在什么都不写时&#xff0c…

quickping探查在线设备的缺陷

在单位工作的一部分是网络维护,发现在单位淘汰win7后,大量win10,win11设备使用后,探查在线设备用的quickping越来越不靠谱,发现有时使用后探查后,没有使用的ip,配置后会出现ip冲突,决…

[Pytorch]卷积运算conv2d

文章目录 [Pytorch]卷积运算conv2d一.F.Conv2d二.nn.Conv2d三.nn.Conv2d的运算过程 [Pytorch]卷积运算conv2d 一.F.Conv2d torch.nn.functional.Conv2d()的详细参数: conv2d(input: Tensor, weight: Tensor, bias: Optional[Tensor]None, stride: Union[_int, _s…

Apache RocketMQ 远程代码执行漏洞(CVE-2023-33246)

漏洞简介 RocketMQ 5.1.0及以下版本,在一定条件下,存在远程命令执行风险。RocketMQ的NameServer、Broker、Controller等多个组件外网泄露,缺乏权限验证,攻击者可以利用该漏洞利用更新配置功能以RocketMQ运行的系统用户身份执行命…

BAPI_GOODSMVT_CREATE 更改凭证的创建人

凭证创建时(创建人)需要更改为其它人员 1. 复制BAPI_TE_XMKPF, 增加字段USNAM 2. SE18: BADI名称 - MB_BAPI_GOODSMVT_CREATE 创建badi实施 3. 增强代码编辑如下: method if_ex_mb_bapi_goodsmvt_create~extensionin_to_matdoc.data: lt_extension type standard table …

力扣320. 列举单词的全部缩写

单词的 广义缩写词 可以通过下述步骤构造:先取任意数量的 不重叠、不相邻 的子字符串,再用它们各自的长度进行替换。 例如,“abcde” 可以缩写为: “a3e”(“bcd” 变为 “3” ) “1bcd1”(“a…

Linux第六章之vim与gcc使用

一、Linux编辑器-vim使用 vi/vim的区别简单点来说,它们都是多模式编辑器,不同的是vim是vi的升级版本,它不仅兼容vi的所有指令,而且还有一些新的特性在里面。例如语法加亮,可视化操作不仅可以在终端运行,也…

【数据分享】1999—2021年地级市各类交通工具的客货运量和拥有量数据(Shp/Excel格式)

1999-2021年地级市的人口相关数据、各类用地面积数据、污染物排放和环境治理相关数据、房地产投资情况和商品房销售面积、社会消费品零售总额和年末金融机构存贷款余额、地方一般公共预算收支状况、工业企业数、固定资产投资和对外经济贸易数据、科技创新指标数据、劳动力就业及…

软考中级信息安全工程师2023下半年报名时间及报名入口官网

软考中级信息安全工程师2023下半年考试时间: 2023年下半年软考中级信息安全工程师的考试时间为11月4日、5日。考试时间在全国各地一致,建议考生提前备考。共分两科,第一科基础知识考试具体时间为9:00-11:30;第二科应用技术考试具…

【Android Framework系列】第9章 AMS之Hook实现登录页跳转

1 前言 前面章节我们学习了【Android Framework系列】第5章 AMS启动流程和【Android Framework系列】第6章 AMS原理之Launcher启动流程,大概了解了AMS的原理及启动流程,这一章节我们通过反射和动态代理对不同Android版本下的AMS进行Hook,实现…

Ansible —— playbook 剧本

Ansible —— playbook 剧本 一、playbook的概述1.playbook简介2.什么是Ansible playbook剧本?3.Ansible playbook剧本的特点4.如何使用Ansible playbook剧本?5.playbooks 本身由以下各部分组成 二、playbook示例1.运行playbook2.定义、引用变量3.指定远…

低代码PAAS平台源码,采用对象式和勾选式实现企业应用程序开发

管理后台低代码PaaS平台是一款基于 Salesforce Platform 的开源替代方案,旨在为企业提供高效、灵活、易于使用的低代码开发平台。低代码PaaS平台的10大核心引擎功能:1.建模引擎 2.移动引擎 3.流程引擎 4.页面引擎 5.报表引擎 6.安全引擎 7.API引擎 8.应用…

C++多线程环境下的单例类对象创建

使用C无锁编程实现多线程下的单例模式 贺志国 2023.8.1 一、尺寸较小的类单例对象创建 如果待创建的单例类SingletonForMultithread内包含的成员变量较少,整个类占用的内存空间较小,则可以使用如下方法来创建单例对象(如果类的尺寸较大则不…

【Linux命令200例】用rcp复制远程文件到本地

🏆作者简介,黑夜开发者,全栈领域新星创作者✌,阿里云社区专家博主,2023年6月csdn上海赛道top4。 🏆本文已收录于专栏:Linux命令大全。 🏆本专栏我们会通过具体的系统的命令讲解加上鲜…

再添新证书!数据库云管平台 zCloud 与 OceanBase 完成产品兼容互认证

近日,云和恩墨 zCloud 数据库云管平台(简称:zCloud)与北京奥星贝斯科技有限公司(简称:OceanBase)完成产品兼容性互认证。本次测试结果表明:zCloud 具备对 OceanBase 的纳管、监控告警…

工业机器视觉系统开发流程简介

工业机器视觉系统的开发过程主要包括以下几个阶段: 需求分析和系统设计:与用户合作,明确系统的功能和性能需求,并设计系统的整体架构。 软、硬件选型:根据需求分析结果,选择适合的软、硬件设备&#xff0…

NASA和uAvionix在AAM测试场部署SkyLine C2指挥和控制服务

蒙大拿州比格福克和弗吉尼亚州汉普顿2023年07月28日——美国宇航局和uAvionix签署了一项太空法案协议,为城市环境中的无人机系统 (UAS)开发先进的超视距(BVLOS)指挥和控制(C2)技术。根据协议,NASA将与uAvionix合作,利用基于互联网的基础设施和…

qiankun框架vue3项目,子应用什么情况下会卸载

1.手动卸载 2.路由不匹配的时候,会自动卸载

STM32基础入门学习笔记:基础知识和理论 开发环境建立

文件目录: 一:基础知识和理论 1.ARM简介 2.STM32简介 3.STM32命名规范 4.STM32内部功能* 5.STM32接口定义 二:开发环境建立 1.开发板简介 2.ISP程序下载 3.最小系统电路 4.KEIL的安装 5.工程简介与调试流程 6.固件库的安装 7.编…

K3s vs K8s:轻量级对决 - 探索替代方案

在当今云原生应用的领域中,Kubernetes(简称K8s)已经成为了无可争议的领导者。然而,随着应用规模的不断增长,一些开发者和运维人员开始感受到了K8s的重量级特性所带来的挑战。为了解决这一问题,一个名为K3s的…