首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >铯JS椭球切面计算

铯JS椭球切面计算
EN

Stack Overflow用户
提问于 2021-06-28 10:35:48
回答 1查看 357关注 0票数 2

问题

对于铯如何计算大地测量和地心表面法线,我有点困惑。由计算出的法线生成的平面在给定的点上实际上并不与椭球面相切,而大地曲面法线产生的平面与地心面法线产生的平面是完全相同的。

示例&为什么我需要这个

在这个沙堡中,当你点击地球表面时,会绘制出与椭球切线的XYZ轴。

我需要的是在给定的点上得到一个与椭球切线的XY平面,然后将其他点投影到这个平面上。问题是,正如我所看到的,平面与椭球面一点也不相切。

顺便说一句--当我使用内置方法: Cesium.EllipsoidTangentPlane();我也得到了奇怪的结果--平面仍然不与椭球切线,而且还漂浮在空间的某个地方。这是沙堡

感谢你的帮助,因为我不明白这里发生了什么。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-02 02:14:23

平面的法线定义在平面的局部坐标系上,其中x、y和z轴分别表示地球(世界或ECEF )的东、北、上方向。所以,如果一个平面的法线向量是在ECEF中给出的,你必须在平面的局部坐标系中转换它,就像这样。

代码语言:javascript
复制
    // get the local coordinate system of the plane
    var transform = Cesium.Transforms.eastNorthUpToFixedFrame(clickedPoint);
    // get invert matrix
    var inv = Cesium.Matrix4.inverseTransformation(transform, new Cesium.Matrix4());
    // in this case actually world normal coincide with up direction(z axis of coordinate system)
    // to avoid error we slightly extend it.
    var extendedWordNormal = Cesium.Cartesian3.multiplyByScalar(clickedPoint, 1.001, new Cesium.Cartesian3());
    
    // it will be nearly same as (0, 0, 1)
    var localNormal = Cesium.Matrix4.multiplyByPoint(inv, extendedWordNormal, new Cesium.Cartesian3());

    //var localNormal = new Cesium.Cartesian3(0, 0, 1);

请检查一下这个沙堡和这个示例

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68161849

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档