椭球面系列---射线与椭球面的交点

射线与椭球体的交点问题的求解是一个非常常见和经典的问题,本文给出具体的计算原理和矩阵表达的过程,便于编程计算。

见下图,已知射线(点为 p 0 \textbf{p}_0 p0,单位方向为 d \textbf{d} d),那么与椭球面的交点 p \textbf{p} p) 的笛卡尔坐标。

在继续计算前,记住之前我们的假设:椭球面和直线等坐标都是在椭球为中心的笛卡尔坐标系下。

有关椭圆的基础性质,请参考:椭球面系列—基本性质!!

射线与椭球体的交点

首先,射线上任意一点 p \textbf{p} p p 0 \textbf{p}_0 p0的距离为 t t t,则 p \textbf{p} p可表示为:
p = p 0 + t d \begin{equation} \textbf{p}=\textbf{p}_0+t\textbf{d} \end{equation} p=p0+td

p \textbf{p} p在椭球面上,则需满足椭球面方程:
p T Cp = 1 \textbf{p}^T\textbf{C}\textbf{p}=1 pTCp=1

则有:
( p 0 + t d ) T C ( p 0 + t d ) = 1 (\textbf{p}_0+t\textbf{d})^T\textbf{C}(\textbf{p}_0+t\textbf{d})=1 (p0+td)TC(p0+td)=1
化简可得:
( d T Cd ) t 2 + 2 ( p 0 T Cd ) t + p 0 T C p 0 − 1 = 0 ​ (\textbf{d}^T\textbf{C}\textbf{d})t^2+2(\textbf{p}_0^T\textbf{C}\textbf{d})t+\textbf{p}_0^T\textbf{C}\textbf{p}_0-1=0 ​ (dTCd)t2+2(p0TCd)t+p0TCp01=0​
上式为典型的关于 t t t的一元二次方程:
a t 2 + b t + c = 0 at^2+bt+c=0 at2+bt+c=0
其中:
{ a = d T Cd b = 2 p 0 T Cd c = p 0 T C p 0 − 1 \begin{cases} a=\textbf{d}^T\textbf{C}\textbf{d} \\ b=2\textbf{p}_0^T\textbf{C}\textbf{d} \\ c=\textbf{p}_0^T\textbf{C}\textbf{p}_0-1 \end{cases} a=dTCdb=2p0TCdc=p0TCp01
最终得到距离 t t t的解(最多2个解):
t = − b ± b 2 − 4 a c 2 a t = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a} t=2ab±b24ac

显然:

  1. b 2 − 4 a c > 0 b^2 - 4ac>0 b24ac>0时,表示射线与椭球面有两个交点。

  2. b 2 − 4 a c = 0 b^2 - 4ac=0 b24ac=0时,表示射线与椭球面相切。

  3. b 2 − 4 a c < 0 b^2 - 4ac<0 b24ac<0时,表示射线与椭球面不相交。

t t t求得后,带入式(1)即可得到 p \textbf{p} p点的坐标。

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

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

相关文章

android内存管理机制概览

关于作者&#xff1a;CSDN内容合伙人、技术专家&#xff0c; 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 &#xff0c;擅长java后端、移动开发、人工智能等&#xff0c;希望大家多多支持。 目录 一、导读二、概览三、相关概念3.1 垃圾回收3.2 应用内存的分配与回…

50个免费的 AI 工具,提升工作效率(附网址)

上次我们已经介绍了20个精选的提高工作效率的免费AI工具&#xff0c;但如果你觉得这些AI工具还不过瘾的话&#xff0c;想进一步成为职场中最了解AI的人&#xff0c;本文将汇总介绍免费最新的50个AI工具。 DeepSwap DeepSwap 是一个基于 AI 的工具&#xff0c;适用于想要制作令人…

内存之-LeakCanary

关于作者&#xff1a;CSDN内容合伙人、技术专家&#xff0c; 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 &#xff0c;擅长java后端、移动开发、人工智能等&#xff0c;希望大家多多支持。 目录 一、导读二、概览三、使用四、原理分析4.1 自动初始化4.1.1 初始化…

改善OEE的关键:从反应性维护向预测性维护转变

科技的进步正在对企业的日常运营模式产生影响。许多制造企业已经采用了自动化生产流程&#xff0c;这不仅提高了产品质量&#xff0c;还简化了设备维护流程&#xff0c;并使得制造企业的设备维护方式从反应性维护转变为预测性维护。人们发现&#xff0c;设备维护方式的转变显著…

前端通过不同方式画等腰梯形

1.css画 说明&#xff1a;css画出倒梯形 <div class"outer-box"><div class"gradient_bg"></div></div> .outer-box{width: 50px;height: 50px;position: relative;//overflow: hidden; } /*使用transform属性后&#xff0c;梯形…

[kubernetes]Kube-APIServer

API Server API Server是什么 提供集群管理的REST API接口&#xff0c;包括认证授权、数据校验以及集群状态变更等提供其他模块之间的数据交互和通信的枢纽&#xff08;其他模块通过API Server查询或修改数据&#xff0c;只有API Server才直接操作etcd&#xff09; 访问控制…

统计学常见概率分布

1.离散型随机变量 E ( X ) ∑ i 1 n x i p i E(X)\sum_{i1}^{n}x_ip_i E(X)i1∑n​xi​pi​ D ( X ) σ 2 E ( X 2 ) − [ E ( X ) ] 2 D(X)\sigma^2E(X^2)-[E(X)]^2 D(X)σ2E(X2)−[E(X)]2 1.1 二项分布 n n n个相同试验&#xff1b;每次试验只有2个可能的结果&#xff1…

插入排序详解(C语言)

前言 插入排序是一种简单直观的排序算法&#xff0c;在小规模数据排序或部分有序的情况下插入排序的表现十分良好&#xff0c;今天我将带大家学习插入排序的使用。let’s go ! ! ! 插入排序 插入排序的基本思想是将待排序的序列分为已排序和未排序两部分。初始时&#xff0c…

介绍一个在线K8S练习平台

是不是有很多小伙伴想学习k8s&#xff0c;但是又没有机器去练习。使用自己的笔记本电脑或者主机只能搭建单机版本的k8s来练习。 现在福利来了&#xff0c;给大家介绍一个在线多节点k8s练习平台&#xff1a;Play with Kubernetes。 Play with Kubernetes 介绍 Play with Kube…

Modbus转Profinet网关解决设备通讯不稳的问题

通讯不稳定&#xff1a;表现为数据断断续续&#xff0c;多半是由于线路干扰、接口不匹配、程序不稳定、等原因造成。 解决方案&#xff1a;在原配电柜添加Modbus转Profinet网关&#xff08;XD-MDPN100/2000&#xff09;即可解决通迅该问题&#xff0c;Modbus转Profinet网关&…

isp代理/双isp代理/数据中心代理的区别?如何选择?

本文我们来详细科普一下几种不同的代理类型&#xff1a;isp代理/双isp代理/数据中心代理&#xff0c;了解他们的区别&#xff0c;选择更适合自己的代理类型。 在讲述这几种代理类型之前&#xff0c;我们先复习一下代理大类有哪几种。 一、机房代理和非机房代理 在做代理ip选…

Linux服务器流量监控、统计、限制、实时流量,按小时查询、按天数查询、按月数查询、按周数查询、查询TOP10等等各种纬度统计

Linux服务器流量监控、统计、限制、实时流量,按小时查询、按天数查询、按月数查询、按周数查询、查询TOP10等等各种纬度统计。 ServerStatus-V 是一个酷炫高逼格的云探针、云监控、服务器云监控、多服务器探针。使用方便,信息直观。ServerStatus-V 是 ServerStatus 中文版 项…