当前位置: 首页 > news >正文

Cesium 内置变量 czm_ellipsoidInverseRadii

Cesium 内置变量 czm_ellipsoidInverseRadii

// 定义: 椭球体沿主轴 (x, y, z) 方向半径的倒数
// 类型: vec3
czm_ellipsoidInverseRadii
// 实现
ellipsoid._oneOverRadii = new Cartesian3(x === 0.0 ? 0.0 : 1.0 / x,y === 0.0 ? 0.0 : 1.0 / y,z === 0.0 ? 0.0 : 1.0 / z,
);
应用

ellipsoidSurfaceFunction

// 确定给定点是位于 3D 空间中椭球体表面的表面上、内部还是外部
float ellipsoidSurfaceFunction(vec3 point)
{// 归一化, 缩放到单位球上vec3 scaled = czm_ellipsoidInverseRadii * point;return dot(scaled, scaled) - 1.0;
}

椭球体: 一个以原点为中心、半轴长为 (a)、(b)、© 的椭球体的方程为:
x2a2+y2b2+z2c2=1\frac{x^2}{a^2} + \frac{y^2}{b^2} + \frac{z^2}{c^2} = 1 a2x2+b2y2+c2z2=1
这里的 a,b,ca,b,ca,b,c是椭球体沿x,y,zx,y,zx,y,z轴的半轴长度。

单位球体:单位球体是以原点为中心、半径为 1 的球体,其方程为:
x2+y2+z2=1x^2 + y^2 + z^2 = 1 x2+y2+z2=1

归一化的目标是通过坐标变换,将椭球体的方程转换为单位球体的方程。

要将椭球体归一化为单位球体,我们需要对坐标进行缩放,使得椭球体的半轴长度被归一化为 1。具体步骤如下:

定义一个新的坐标系 (x′,y′,z′)(x', y', z')(x,y,z),通过以下线性变换将原始坐标 (x,y,z)(x, y, z)(x,y,z) 映射到归一化坐标:
x′=xa,y′=yb,z′=zcx' = \frac{x}{a} , \quad y' = \frac{y}{b} , \quad z' = \frac{z}{c} x=ax,y=by,z=cz

这等价于将点 (x, y, z) 乘以一个对角缩放矩阵,其对角元素是椭球体半轴长度的倒数:

[x′y′z′]=[1/a0001/b0001/c][xyz]\begin{bmatrix} x' \ y' \ z' \end{bmatrix} = \begin{bmatrix} 1/a & 0 & 0 \\ 0 & 1/b & 0 \\ 0 & 0 & 1/c \\ \end{bmatrix} \begin{bmatrix} x \ y \ z \end{bmatrix} [x y z]=1/a0001/b0001/c[x y z]

代码实现:

// 实现了上述缩放变换,将输入点 point = (x, y, z) 转换为归一化坐标 scaled = (x', y', z') = (x/a, y/b, z/c)。
vec3 scaled = czm_ellipsoidInverseRadii * point;

因此,通过这种缩放,椭球体的表面被映射到单位球体的表面

// 计算变换后点的平方欧几里得距离
dot(scaled, scaled)

dot(scaled,scaled)=x′2+y′2+z′2=x2a2+y2b2+z2c2\begin{align} dot(scaled, scaled) &= x'^2 + y'^2 + z'^2 \\ &=\frac{x^2}{a^2} + \frac{y^2}{b^2} + \frac{z^2}{c^2} \end{align} dot(scaled,scaled)=x′2+y′2+z′2=a2x2+b2y2+c2z2

f(x,y,z)=x2a2+y2b2+z2c2−1f(x,y,z) = \frac{x^2}{a^2} + \frac{y^2}{b^2} + \frac{z^2}{c^2} - 1 f(x,y,z)=a2x2+b2y2+c2z21

  • f(x,y,z)=0f(x,y,z)=0f(x,y,z)=0, 原始点在椭球体表面
  • f(x,y,z)<0f(x,y,z)<0f(x,y,z)<0, 原始点在椭球体
  • f(x,y,z)>0f(x,y,z)>0f(x,y,z)>0, 原始点在椭球体

出处

// 计算点 point 相对于椭球体表面的距离
float cartesianToGeographic(vec3 cartesian)
{vec3 inverseRadii = czm_ellipsoidInverseRadii;float radiix = 1.0/inverseRadii.x;float radiiy = 1.0/inverseRadii.y;float radiiz = 1.0/inverseRadii.z;float scale = sqrt( 1.0 / (cartesian.x * cartesian.x / (radiix * radiix) + cartesian.y * cartesian.y / (radiiy * radiiy) + cartesian.z * cartesian.z / (radiiz * radiiz)));vec3 pos = scale * cartesian;float dis = distance(cartesian, pos);return dis;
}

类似的功能:

bool czm_ellipsoidContainsPoint(vec3 ellipsoid_inverseRadii, vec3 point)
{vec3 scaled = ellipsoid_inverseRadii * (czm_inverseModelView * vec4(point, 1.0)).xyz;return (dot(scaled, scaled) <= 1.0);
}
http://www.dtcms.com/a/427694.html

相关文章:

  • 做塑胶网站需要什么建设部网站被黑
  • 树莓派:微雪显示器7寸触摸屏使用
  • Spring AI alibaba Prompt模板Advisor自定义
  • 深圳龙华企业网站设计微信推广小程序怎么做
  • 什么是SEM?深入解析其核心优势
  • 主动学习和数据蒸馏在整个多模态大模型流程中的定位与价值
  • 计算机网路-OSPF协议
  • 使用网站效果网站建设用户体验
  • 【Rust GUI开发入门】编写一个本地音乐播放器(12. 国际化应用-多语言支持)
  • 温州企业网站设计制作一个网站多少钱啊
  • 网站开发卖东西网上找工程平台有哪些
  • 单细胞转录组:差异基因分析和富集分析
  • 长沙会议网站设计哪家专业wordpress如何使用主题
  • Javascript数组介绍?什么是数组以及数组的基本使用?
  • 2024年全国大学生信息安全竞赛安徽省赛网络系统建设与运维赛项-网络构建真题
  • 《道德经》第十章
  • 什么网站可以做兼职美工龙海网站开发
  • [学习笔记]对Exsi中的CentOS扩充磁盘空间
  • Linux网络--4、应用层协议Http
  • BIG-Bench:大规模语言模型能力的全面评估与挑战
  • h5网站制作介绍菠菜网站模板
  • 网站建设招聘简介ps建模教程
  • VRNN论文总结
  • 从0开始学vue:npm命令详解
  • C++模板函数:字典键值最值查找与去重算法
  • 河南企业网站排名优化价格国外 wordpress模板下载地址
  • [xboard] 20 kernel Makefile逐行分析2
  • 调试parlant的大模型配置,最终自己动手写了g4f的模块挂载
  • 如何解决Google Play商店提新包后仍旧提示存在政策问题
  • 企业网站倾向于wordpress可以大量免费发帖的网站