椭球面系列---基本性质

10 篇文章 3 订阅
7 篇文章 0 订阅


在STK软件和Cesium中,地球表面的形状是一个椭球面,而不是球面,因此许多相关计算(如表面的弧长、大地经纬度和笛卡尔坐标之间的转换等)都必须依赖椭球面的几何性质。

最近在看有关椭球面(在表示时有时也称椭球体)计算的相关代码,还是有必要整理一下,待后续参考,今天为系列一:基本性质。

定义

椭球面(Ellipsoid)是一个在三维空间中的曲面,它由所有满足以下方程的点 (x, y, z) 组成:
x 2 a 2 + y 2 b 2 + z 2 c 2 = 1 \begin{equation}\frac{x^2}{a^2} + \frac{y^2}{b^2} + \frac{z^2}{c^2} = 1 \end{equation} a2x2+b2y2+c2z2=1
其中,a、b 和 c 是实数,分别代表椭球体沿着三个坐标轴的半轴长度。如果 a = b = c,则椭球体就是一个球体。椭球体的基本性质包括:

  1. 对称性:椭球体关于三个坐标平面(xy平面,yz平面和xz平面)以及通过中心的三个坐标轴都是对称的。

  2. 中心点:椭球体有一个唯一的中心点 (0, 0, 0),在这一点,椭球体的所有对称性都交汇。

  3. 轴线:椭球体有三个互相垂直的轴线,分别是x轴、y轴和z轴,它们通过椭球体的中心。椭球体在这三个轴线上的长度分别是 2a、2b 和 2c。

  4. 体积:椭球体的体积是由以下公式给出的:
    V = 4 3 π a b c V = \frac{4}{3}\pi abc V=34πabc

  5. 表面积:椭球体的表面积没有简单的封闭形式,但它可以通过椭圆积分来近似或精确计算。对于特殊情况,比如当椭球体是一个球体时,表面积为 4 π r 2 4πr^2 4πr2,其中 r 是半径。

  6. 焦点:对于任意的椭球体,其每一个主切面(x=0,y=0或z=0平面内的椭圆)都有一对焦点。对于旋转椭球体(两个半轴相等,如 a = b),在z轴上的焦点之间的距离为 2 √ ( a 2 − c 2 ) 2√(a^2 - c^2) 2√(a2c2)

  7. 椭球面上的点:可以通过参数方程使用三个角度参数来表述椭球面上的点。

基本假设

在后续的讨论中,为了简化方便,无论是椭球体还是点、直线等表达,都有:

  1. 椭球体的中心点为笛卡尔坐标系原点(0,0,0)。如果椭球体一开始不在坐标系中心,则需要经过平移和旋转,最后化为标准方程。
  2. 椭球体为旋转椭球体,即a=b。笛卡尔坐标系的X轴和Y轴的半轴长度为a或b,Z轴方向的半轴长度为c。
  3. XY平面称为赤道平面,Z轴一般称为极轴。因此 a a a为赤道半长轴, c c c称为极半长轴。
  4. 涉及到的点、矢量、直线等都表示在以椭球体中心为原点的笛卡尔坐标系中。

下图为三种基本旋转椭球体:

  • 左图: 扁球体(Oblate spheroid),即 a = b > c a=b>c a=b>c

  • 中图: 圆球体(Sphere),即 a = b = c a=b=c a=b=c

  • 右图: 长轴旋转椭球体(Prolate spheroid),即 a = b < c a=b<c a=b<c
    旋转椭球体
    后续过程文档中,使用以下基础的旋转椭球体参数:

  • 扁率: f = ( a − c ) / a f=(a-c)/a f=(ac)/a

  • 第3扁率: n = ( a − c ) / ( a + c ) = f / ( 2 − f ) n=(a-c)/(a+c)=f/(2-f) n=(ac)/(a+c)=f/(2f)

  • 偏心率: e 2 = ( a 2 − c 2 ) / a 2 e^2=(a^2-c^2)/a^2 e2=(a2c2)/a2

  • 第2偏心率: e ′ 2 = ( a 2 − c 2 ) / c 2 = e 2 / ( 1 − e 2 ) e'^2=(a^2-c^2)/c^2=e^2/(1-e^2) e′2=(a2c2)/c2=e2/(1e2)

    地球的形状为扁球体( a = b > c a=b>c a=b>c),其参数(WGS84模型)为:

  • 赤道半长轴 a a a: 6378137m

  • 极半长轴 b b b: 6356752.3142451793m

  • 扁率: f = 1 / 298.257223563 f=1/298.257223563 f=1/298.257223563

基本性质

曲面方程的隐式与显示表达方式

- 隐式表达方式:
告诉你空间中的点满足特定的关系,而不是告诉你点具体在哪。例如,三维球面上的任意一点都满足 : F ( x , y , z ) = x 2 + y 2 + z 2 − 1 = 0 F(x,y,z)=x^2+y^2+z^2-1=0 F(x,y,z)=x2+y2+z21=0
。只要找到所有的x,y,z满足F(x,y,z)=0,就能将图像画出来。

缺点:很难去描述复杂的物体。仅根据表达式F(x,y,z)很难直接看出来是是什么样子,面上都有哪些点也不容易知道,面上采样起来比较困难(找到所有点),下面例子有。

优点:
1.通常表示出来很容易(例如用一个函数就能表示)。
2.做某些查询容易(判断在物体里面还是外面,计算到表面的距离等)。给你一个点,判断在里面还是外面是很简单的。将点代入F(x,y,z),如果小于零在里面,大于零在外面,等于零在面上。
3.很容易对光线与表面求交。
曲面的隐式表示
-显式Explicit
典型一种方法的就是把每个点的位置都有明确的公式,自然就得到对象物体,这种方法直接给予。另一种方法是用参数映射的方法。

曲面的显示表示
优点:采样很简单,将所有的UV代入就能得到所有的点了
缺点:给你一个点,判断在表面的里面还是外面是很困难了

点是否在椭球体面外、内、上

根据上节的知识,我们知道椭球面的方程是隐形表达的。给定三维空间中的点P,坐标为 ( x , y , z ) (x,y,z) (x,y,z),则带入椭球面方程:
F ( x , y , z ) = x 2 a 2 + y 2 b 2 + z 2 c 2 − 1 \begin{equation} F(x,y,z)=\frac{x^2}{a^2} + \frac{y^2}{b^2} + \frac{z^2}{c^2} -1 \end{equation} F(x,y,z)=a2x2+b2y2+c2z21
则有:

  • F ( x , y , z ) = 0 F(x,y,z)=0 F(x,y,z)=0,则点P在椭球面上。
  • F ( x , y , z ) < 0 F(x,y,z)<0 F(x,y,z)<0,则点P在椭球面内部。
  • F ( x , y , z ) > 0 F(x,y,z)>0 F(x,y,z)>0,则点P在椭球面外部。

实际计算时,判断一个点是否在椭球面上,考虑到计算误差,不能精确的判断是否为0,而是有个小的允许误差,即 ∣ F ( x , y , z ) ∣ < ε |F(x,y,z)|<\varepsilon F(x,y,z)<ε,则点P在椭球面上。

椭球面的矩阵表示

根据椭球面定义,椭球面上任意一点P点 ( x , y , z ) (x,y,z) (x,y,z)的坐标(采用 p \textbf{p} p表示)满足公式(1)。
定义对角矩阵 C \textbf{C} C
C = [ 1 / a 2 1 / b 2 1 / c 2 ] \begin{equation} \textbf{C}= \left [ \begin{matrix} 1/a^2 & &\\ & 1/b^2 &\\ & & 1/c^2\\ \end{matrix} \right ] \end{equation} C= 1/a21/b21/c2
则逆矩阵 C − 1 \textbf{C}^{-1} C1
C − 1 = [ a 2 b 2 c 2 ] \begin{equation} \textbf{C}^{-1}= \left [ \begin{matrix} a^2 & &\\ & b^2 &\\ & & c^2\\ \end{matrix} \right ] \end{equation} C1= a2b2c2
则公式(1)可以写为以下形式:
[ x , y , z ] . [ 1 / a 2 1 / b 2 1 / c 2 ] . [ x y z ] = p T Cp = 1 \begin{equation} \left [\begin{matrix} x,y,z \end{matrix} \right]. \left [ \begin{matrix} 1/a^2 & &\\ & 1/b^2 &\\ & & 1/c^2\\ \end{matrix} \right ] . \left [ \begin{matrix} x\\y\\z\\\end{matrix} \right ] =\textbf{p}^T\textbf{C}\textbf{p}=1 \end{equation} [x,y,z]. 1/a21/b21/c2 . xyz =pTCp=1

为了以后表达方便,我们采用加粗字母表示矢量或者矩阵

​椭球面法线

为了找到椭球面上某一点的法线,可以先找到该点的切平面。切平面是通过该点,并且与椭球面在该点处相切的平面。

椭球面在 P P P ( x , y , z ) (x,y,z) (x,y,z)的法线即为垂直于P点切平面的向量,在数学上,可以使用梯度向量来表示法线方向。梯度向量是椭球面方程的梯度,它指向函数在某一点的最大增长方向。可由以下公式给出:
n = ∇ F = [ ∂ F ∂ x ∂ F ∂ y ∂ F ∂ z ] = [ 2 x / a 2 2 y / b 2 2 z / c 2 ] \textbf{n}=∇F =\left [ \begin{matrix} \frac{∂F}{∂x} \\ \frac{∂F}{∂y}\\ \frac{∂F}{∂z}\\ \end{matrix} \right ] = \left [ \begin{matrix} 2x/a^2 \\ 2y/b^2\\ 2z/c^2\\ \end{matrix} \right ] n=F= xFyFzF = 2x/a22y/b22z/c2
我们知道,向量的方向是最重要的,大小可以不一致,单位化后都为同一个单位向量。若我们将法向量写成如下格式:
n = [ n x n y n z ] = k [ x / a 2 y / b 2 z / c 2 ] \begin{equation} \textbf{n}=\left [ \begin{matrix} n_x \\ n_y\\ n_z\\ \end{matrix} \right ] =k\left [ \begin{matrix} x/a^2 \\ y/b^2\\ z/c^2\\ \end{matrix} \right ] \end{equation} n= nxnynz =k x/a2y/b2z/c2
则有:
a 2 n x 2 + b 2 n y 2 + c 2 n z 2 = k 2 ( x 2 a 2 + y 2 b 2 + z 2 c 2 ) = k 2 \begin{equation} a^2n_x^2+b^2n_y^2+c^2n_z^2=k^2(\frac{x^2}{a^2} + \frac{y^2}{b^2} + \frac{z^2}{c^2})=k^2 \end{equation} a2nx2+b2ny2+c2nz2=k2(a2x2+b2y2+c2z2)=k2
也就是说,如果我们知道椭球面一点P的法向量 n \textbf{n} n,则可以通过上式得到 k k k
​将上式写成矩阵表达方式,即k的求解由下式给出:
n T C − 1 n = k 2 \begin{equation} \textbf{n}^T\textbf{C}^{-1}\textbf{n}=k^2 \end{equation} nTC1n=k2
得到k的数值后,则 P P P点的坐标 ( x , y , z ) (x,y,z) (x,y,z)则可求出:
p = [ x y z ] = 1 k [ a 2 n x b 2 n y c 2 n z ] = 1 k C − 1 n \begin{equation} \textbf{p}=\left [ \begin{matrix} x \\ y\\ z\\ \end{matrix} \right ] =\frac1k\left [ \begin{matrix} a^2n_x \\ b^2n_y\\ c^2n_z\\ \end{matrix} \right ] =\frac1k\textbf{C}^{-1}\textbf{n} \end{equation} p= xyz =k1 a2nxb2nyc2nz =k1C1n

至此,我们通过公式(8)和(9),在已知椭球面的法向量 n \textbf{n} n的情况下,得到了具体的笛卡尔坐标 ( x , y , z ) (x,y,z) (x,y,z)

球坐标与切平面

椭球面上的点除了采用笛卡尔坐标系外,常常采用球坐标系,即大地经度( λ \lambda λ)和大地纬度 φ \varphi φ

则在椭球面上一点P的切平面(见图中绿色)中沿着纬度方向和经度方向的切向量为分别为:
( ∂ p ∂ φ , ∂ p ∂ λ ) (\frac{∂\textbf{p}}{∂\varphi},\frac{∂\textbf{p}}{∂\lambda}) (φp,λp)
在这里插入图片描述

椭球面离已知点最近距离的位置的法向量

给定空间中一点 p 0 \textbf{p}_0 p0,设此点离椭球面最近的点为 p \textbf{p} p(未定),那么 p \textbf{p} p点处的椭球面法线方向一定指向 p 0 \textbf{p}_0 p0。下面证明。

p p 0 \textbf{p}\textbf{p}_0 pp0的距离为 h h h,则有:
h 2 = ∣ p 0 − p ∣ 2 h^2=|\textbf{p}_0-\textbf{p}|^2 h2=p0p2
p \textbf{p} p点在椭球面上变化时,则距离h是一个非负、周期性、可微的函数,因此它一定会有一个全局最小值,此时的一阶导数值为0,即:
{ ∂ h 2 ∂ λ = 2 ( p 0 − p ) . ∂ p ∂ λ = 0 ∂ h 2 ∂ φ = 2 ( p 0 − p ) . ∂ p ∂ φ = 0 \begin{cases} \frac{∂h^2}{∂\lambda} =2(\textbf{p}_0-\textbf{p}).\frac{∂\textbf{p}}{∂\lambda}=0 & \\ \frac{∂h^2}{∂\varphi} =2(\textbf{p}_0-\textbf{p}).\frac{∂\textbf{p}}{∂\varphi}=0 \end{cases} {λh2=2(p0p).λp=0φh2=2(p0p).φp=0
一阶导数为0,则表示位置向量 p 0 − p \textbf{p}_0-\textbf{p} p0p一定与 ∂ p ∂ λ \frac{∂\textbf{p}}{∂\lambda} λp ∂ p ∂ φ \frac{∂\textbf{p}}{∂\varphi} φp切平面内的这两个向量垂直,这说明 p 0 − p \textbf{p}_0-\textbf{p} p0p就是椭球面的法向量。
点到椭球面最近的点

参考:
[1]: 计算机图形学入门(九)-几何(基本表示方法:隐式和显式)
[2]: 学习内容:求一个点到椭球面的距离(下)

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值