2.2椭球体基础

球是x,y,z轴的长度都相等;

椭球是x,y,z不一定相等。
如果椭球是两长一短,且两长相同,则为扁球体。短/长越小,则越扁。

月球可以认为是球体,火卫一奇形怪状。

地球wgs84椭球体属于扁球体。长半轴是赤道,短半轴是极点半径。

 

程序中处理地球形状的方法最好是采用椭球体基类,同时采用用户自定义半径。这样适应各种椭球体。

这个_oneOverRadiiSquared是用来计算大地表面法线的。具体方法如下:

在glsl上也可以计算大地表面法线

那什么是大地表面法线?

地球有两个法线,一个是地心法线,一个是大地表面法线。。

地心法线是地心到地面一点的向量;大地表面法线是该点与椭球体相切平面的法线。

可以认为是全局法线和局部法线的关系

一般,用大地表面法线,因为这是真实法线,计算经纬高所用。高度是对于局部来说的,抬头看看这个小鸟距离我有多高。

 

如果我站在一个大圆球上,一脚向下垂直踩下去,可以沿着地心法线,也是沿着大地表面法线。

然而,目前是踩在一个大鸭蛋上,一脚踩下去,将会沿着大地表面法线踩下去;而踩不到地心上,也就不在地心法线上。

 

所以,很明显,椭球体越扁,大地表面法线越偏离地心法线。

 

那么,计算高度时,为啥要用大地表面法线,而不是地心法线呢?

因为对于较高的物体,比如太空设备,沿着地心法线测量会产生较大误差。这个误差与地心法线和大地法线之间的角差别相关,角差别越大,误差越大;

那这个角差别是哪两个角的差别呢?

是纬度差别;也就是大地纬度和地心纬度的差别。

地心纬度和大地纬度如何计算呢?

地心纬度是指赤道平面和指定点地心法线的夹角。

大地纬度(地理纬度)是指赤道平面(例如,wgs84坐标系中xy平面)与该点大地表面法线的夹角。

 

而大地法线和地心法线之间角差别大约在纬度45度左右。

调试下,看看扁率对大地法线和地心法线偏离的影响。

球体时,两者重合

短轴减小时,

 

 

调试下

各种状态跳过,后续章节学习时再深入。

shader这一块后面再看

接下来是正式绘制

其它暂时不涉及到的,不进行跟踪了。

<think>嗯,用户想了解椭球体约束的数学定义和编程实现方法。首先,我需要回忆一下椭球体在数学上的定义。椭球体是三维空间中的二次曲面,类似于球体,但三个轴的长度可以不同。数学上,标准椭球体的方程应该是$(x/a)^2 + (y/b)^2 + (z/c)^2 = 1$,其中a、b、c是半轴长度。不过,如果椭球体不是轴对齐的,可能需要引入旋转矩阵,这时候方程会变成$(x - x_0)^T A (x - x_0) \leq 1$,其中A是一个正定矩阵,x_0是中心点。这部分可能需要查阅一下线性代数的内容,确保正确性。 接下来,椭球体约束在优化问题中的应用。用户提到的参考引用[3]是关于随机规划中的机会约束规划,可能椭球体约束在这里用于定义可行区域,特别是在鲁棒优化中。椭球体约束通常用来表示不确定性集合,比如在鲁棒优化中,参数的不确定性可以用椭球体来描述,这样优化问题需要在所有可能的参数情况下满足约束。这种情况下,椭球约束的数学形式可能需要用二次不等式表示。 关于编程实现,用户可能需要具体的代码示例。常见的优化工具包,比如MATLAB的YALMIP或CVX,Python的CVXPY,都可以处理二次约束。例如,使用CVXPY时,可以定义变量x,然后添加约束x.T @ P @ x <= 1,其中P是正定矩阵。需要确保用户了解如何构造正定矩阵,或者如何处理椭球体的参数。可能需要提到如何将椭球体的一般形式转化为优化库能够识别的约束形式。 另外,用户提供的引用[2]提到了微分方程模型和椭球插值器,可能涉及机器人或控制领域的应用。椭球体约束可能用于路径规划或状态估计中,确保机器人的运动轨迹在某个椭球体内,避免碰撞或满足物理限制。这时候椭球体的参数可能需要根据实际系统动态进行调整,比如考虑惯性或外力影响。 还需要考虑椭球体约束与其他类型约束的区别,比如盒子约束(box constraints)或球体约束。椭球体提供了更灵活的形状,可以更精确地描述复杂的不确定区域。在实现时,正定矩阵的选择会影响椭球的形状和方向,可能需要通过数据或系统特性来确定。 在数学定义部分,可能需要更严谨地写出椭球体的一般形式,包括中心点、形状矩阵以及正定性的要求。同时,椭球体在优化中的对偶形式或如何将线性变换应用于球体得到椭球体也是重要点。例如,任何椭球体都可以通过仿射变换从单位球体得到,这可能在编程实现中有用,比如先处理单位球体再应用变换。 编程实现示例部分,可能需要提供Python代码,使用常见的库如NumPy和CVXPY。代码应该包括定义优化变量、构建椭球体的形状矩阵、添加约束和目标函数,然后求解。需要确保示例简单明了,用户能够直接运行测试。例如,最小化线性目标函数在椭球体约束下的解。 最后,相关问题部分需要生成与椭球体约束相关的问题,可能涉及应用场景、与其他约束的比较、优化中的处理技巧等。这可以帮助用户进一步探索该主题。</think>### 椭球体约束的定义与实现 #### 数学定义 椭球体约束是优化问题中**描述可行域为椭球体**的约束形式。其数学定义为: $$(x - x_0)^T P (x - x_0) \leq 1$$ 其中: - $x \in \mathbb{R}^n$ 是优化变量 - $x_0 \in \mathbb{R}^n$ 是椭球中心 - $P \in \mathbb{R}^{n \times n}$ 是**对称正定矩阵**,控制椭球形状和方向[^2] 该约束表示变量$x$必须在以$x_0$为中心、由矩阵$P$定义的椭球范围内。当$P$为对角矩阵时,椭球与坐标轴对齐;非对角元素会产生旋转效果[^4]。 #### 编程实现(Python示例) 以**凸优化**场景为例,使用`cvxpy`库实现椭球体约束: ```python import cvxpy as cp import numpy as np # 定义变量 x = cp.Variable(3) # 三维空间中的优化变量 # 椭球参数 x0 = np.array([1, 2, 3]) # 椭球中心 P = np.array([[2, 0.5, 0], # 正定矩阵 [0.5, 3, 0.2], [0, 0.2, 4]]) # 构建优化问题 objective = cp.Minimize(x[0] + 2*x[1] + x[2]) # 目标函数 constraint = [cp.quad_form(x - x0, P) <= 1] # 椭球体约束 prob = cp.Problem(objective, constraint) prob.solve() print("最优解:", x.value) print("目标值:", prob.value) ``` #### 关键特性 1. **几何意义**:通过调整$P$的特征值和特征向量,可控制椭球轴长和方向 2. **凸性保证**:正定矩阵保证约束区域为凸集,适合凸优化求解 3. **鲁棒性应用**:常用于鲁棒优化中描述参数不确定性集合[^3]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值