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);
    }
  };
}
相关推荐
MAGICIAN...1 小时前
【java-软件设计原则】
java·开发语言
gpfyyds6662 小时前
Python代码练习
开发语言·python
盐真卿2 小时前
python第八部分:高级特性(二)
java·开发语言
茉莉玫瑰花茶2 小时前
C++ 17 详细特性解析(5)
开发语言·c++·算法
lly2024062 小时前
《堆的 shift down》
开发语言
cpp_25012 小时前
P10570 [JRKSJ R8] 网球
数据结构·c++·算法·题解
cpp_25012 小时前
P8377 [PFOI Round1] 暴龙的火锅
数据结构·c++·算法·题解·洛谷
黎雁·泠崖2 小时前
【魔法森林冒险】2/14 抽象层设计:Figure/Person类(所有角色的基石)
java·开发语言
程序员老舅3 小时前
C++高并发精髓:无锁队列深度解析
linux·c++·内存管理·c/c++·原子操作·无锁队列
划破黑暗的第一缕曙光3 小时前
[C++]:2.类和对象(上)
c++·类和对象