File: Trigonometry.h

package info (click to toggle)
glgrib 1.0-6
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 1,861,496 kB
  • sloc: cpp: 20,811; ansic: 6,530; perl: 2,902; sh: 513; makefile: 147; python: 58; sql: 18
file content (74 lines) | stat: -rw-r--r-- 1,521 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#pragma once

#include <cmath>
#include <glm/glm.hpp>

namespace glGrib
{

static const float rad2deg = 180.0f / M_PI;
static const float deg2rad = M_PI / 180.0f;
static const float twopi = 2.0f * M_PI;
static const float pi = M_PI;
static const float halfpi = M_PI / 2.0f;


static inline
void lonlat2xyz (float lon, float lat, float * x, float * y, float * z)
{
  float coslon = std::cos (lon), sinlon = std::sin (lon);
  float coslat = std::cos (lat), sinlat = std::sin (lat);
  *x = coslon * coslat; 
  *y = sinlon * coslat; 
  *z = sinlat;
}

static inline
void xyz2lonlat (float x, float y, float z, float * lon, float * lat)
{
  *lon = atan2 (y, x);
  *lat = std::asin (z);
}

static inline
const glm::vec3 lonlat2xyz (const glm::vec2 & lonlat)
{
  float x, y, z;
  lonlat2xyz (lonlat.x, lonlat.y, &x, &y, &z);
  return glm::vec3 (x, y, z);
}

static inline
const glm::vec2 xyz2lonlat (const glm::vec3 & xyz)
{
  float lon, lat;
  xyz2lonlat (xyz.x, xyz.y, xyz.z, &lon, &lat);
  return glm::vec2 (lon, lat);
}

static inline
const glm::vec3 lonlat2xyz (float lon, float lat)
{
  return lonlat2xyz (glm::vec2 (lon, lat));
}

static inline
const glm::vec2 xyz2lonlat (float x, float y, float z)
{
  return xyz2lonlat (glm::vec3 (x, y, z));
}

static inline
void xyz2lonlat (const glm::vec3 & xyz, float * lon, float * lat)
{
  xyz2lonlat (xyz.x, xyz.y, xyz.z, lon, lat);
}

static inline
void lonlat2xyz (const glm::vec2 & lonlat, float * x, float * y, float * z)
{
  lonlat2xyz (lonlat.x, lonlat.y, x, y, z);
}


}