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);
    }
  };
}
相关推荐
2301_8073671912 分钟前
C++中的解释器模式变体
开发语言·c++·算法
always_TT44 分钟前
C语言中的字符与字符串(char数组)
c语言·开发语言
forAllforMe1 小时前
LAN9252 从机寄存器配置--C语言举例
c语言·开发语言
weixin_537590451 小时前
《C程序设计语言》练习答案(练习1-4)
c语言·开发语言
chushiyunen2 小时前
python中的内置属性 todo
开发语言·javascript·python
麦麦鸡腿堡2 小时前
JavaWeb_请求参数,设置响应数据,分层解耦
java·开发语言·前端
2301_819414302 小时前
C++与区块链智能合约
开发语言·c++·算法
不想看见4042 小时前
Valid Parentheses栈和队列--力扣101算法题解笔记
开发语言·数据结构·c++
炸膛坦客2 小时前
单片机/C/C++八股:(十五)内存对齐、结构体内存对齐
c语言·开发语言·单片机
老约家的可汗2 小时前
C/C++内存管理探秘:从内存分布到new/delete的底层原理
c语言·c++