C++ 使用 glm 实现 Cartesian3.fromDegrees

C++ 使用 glm 实现 Cartesian3.fromDegrees

cpp 复制代码
#include <glm/glm.hpp>
#define _USE_MATH_DEFINES
#include <cmath>

namespace FastBVH
{
  float RADIANS_PER_DEGREE = M_PI / 180.0;
  // 定义地球半径的平方(可以用你自己的椭球模型)
  const glm::dvec3 defaultRadiiSquared = glm::dvec3(6378137.0f * 6378137.0f, 6378137.0f * 6378137.0f, 6356752.3f * 6356752.3f);

  class Cartesian3
  {
  public:
    static glm::dvec3 fromRadians(double longitude, double latitude, double height)
    {
      const glm::dvec3 &radiiSquared = defaultRadiiSquared;

      double cosLatitude = std::cos(latitude);
      glm::dvec3 scratchN(cosLatitude * std::cos(longitude), cosLatitude * std::sin(longitude), std::sin(latitude));

      scratchN = glm::normalize(scratchN);

      glm::dvec3 scratchK = radiiSquared * scratchN;

      double gamma = std::sqrt(dot(scratchN, scratchK));
      scratchK = scratchK / gamma;

      scratchN = scratchN * height;

      return scratchK + scratchN;
    }

    static glm::dvec3 fromDegrees(double longitude, double latitude, double height)
    {
      longitude = longitude * RADIANS_PER_DEGREE;
      latitude = latitude * RADIANS_PER_DEGREE;
      return fromRadians(longitude, latitude, height);
    }
  };
}
相关推荐
apihz几秒前
货币汇率换算免费API接口(每日更新汇率)
android·java·开发语言
gf13211113 分钟前
python_检测音频人声片段
开发语言·python·音视频
wangnaisheng8 分钟前
彩虹编码映射实现:C++与C#
c++·c#
waves浪游10 分钟前
进程控制(下)
linux·运维·服务器·开发语言·c++
xiaobuding_QAQ11 分钟前
51汇编仿真proteus8.15学习篇二(附源码)
开发语言·汇编·单片机·学习·proteus
兵哥工控15 分钟前
mfc两个线程的创建、启动、安全结束实例
c++·mfc·多线程·线程安全退出
Miketutu15 分钟前
Dart基础学习
开发语言·windows
小龙报15 分钟前
【算法通关指南:算法基础篇 】双指针专题:1.唯一的雪花 2.逛画展 3.字符串 4.丢手绢
c语言·数据结构·c++·人工智能·深度学习·算法·信息与通信
bybitq17 分钟前
Go中的闭包函数Closure
开发语言·后端·golang
FirstFrost --sy18 分钟前
Qt控件美化:LineEdit与CheckBox实战
开发语言·qt