YAC 3.12.0
Yet Another Coupler
Loading...
Searching...
No Matches
test_geometry.c
Go to the documentation of this file.
1// Copyright (c) 2024 The YAC Authors
2//
3// SPDX-License-Identifier: BSD-3-Clause
4
5#include <stdlib.h>
6#include <stdio.h>
7#include <math.h>
8#include "tests.h"
9
10#include "geometry.h"
11
17int main (void) {
18
19 {
20 double base_point[2] = {2.253 * YAC_RAD, 3.25 * YAC_RAD};
21 double point_a[2] = {2 * YAC_RAD, 2 * YAC_RAD};
22 double point_b[2] = {1 * YAC_RAD, 3 * YAC_RAD};
23
24 double base_vector[3], vector_a[3], vector_b[3];
25
26 LLtoXYZ(base_point[0], base_point[1], base_vector);
27 LLtoXYZ(point_a[0], point_a[1], vector_a);
28 LLtoXYZ(point_b[0], point_b[1], vector_b);
29
30 double distance_a, distance_b;
31
32 distance_a = get_vector_angle(base_vector, vector_a);
33 distance_b = get_vector_angle(base_vector, vector_b);
34
35 if (distance_a >= distance_b)
36 PUT_ERR("error in distance calculation\n");
37 }
38
39 {
40 double const tol = 1e-10;
41 double angles[] = {-M_PI_2 + tol, -M_PI_4, -tol, 0,
42 tol, M_PI_4, M_PI_2 - tol};
43 double offsets[] = {-6.0*M_PI, -4.0*M_PI, -2.0*M_PI, 0,
44 2.0*M_PI, 4.0*M_PI, 6.0*M_PI};
45 double start[] = {-M_PI, -M_PI_2, -M_PI_4, -M_1_PI, -tol, 0,
46 tol, M_1_PI, M_PI_4, M_PI_2, M_PI};
47
48 for (size_t i = 0; i < sizeof(angles) / sizeof(angles[0]); ++i) {
49 for (size_t j = 0; j < sizeof(offsets) / sizeof(offsets[0]); ++j) {
50 for (size_t k = 0; k < sizeof(offsets) / sizeof(offsets[0]); ++k) {
51 for (size_t l = 0; l < sizeof(start) / sizeof(start[0]); ++l) {
52
53 double a_lon = start[l] + offsets[j] + angles[i];
54 double b_lon = start[l] + offsets[k];
55
56 if (fabs(get_angle(a_lon, b_lon) - angles[i]) > tol)
57 PUT_ERR("error in get_angle\n");
58 }
59 }
60 }
61 }
62 }
63
64 {
65 struct bounding_circle a =
66 {.base_vector = {0.0,0.0,1.0},
67 .inc_angle = SIN_COS_M_PI,
68 .sq_crd = DBL_MAX};
69 struct bounding_circle b =
70 {.base_vector = {0.0,0.0,-1.0},
71 .inc_angle = SIN_COS_M_PI,
72 .sq_crd = DBL_MAX};
73
74 if (!yac_extents_overlap(&a, &b))
75 PUT_ERR("error in yac_extents_overlap\n");
76 }
77
78 {
79 struct bounding_circle a =
80 {.base_vector = {0.0,0.0,1.0},
81 .inc_angle = SIN_COS_M_PI,
82 .sq_crd = DBL_MAX};
83 struct bounding_circle b =
84 {.base_vector = {0.0,0.0,-1.0},
85 .inc_angle = SIN_COS_M_PI,
86 .sq_crd = DBL_MAX};
88
89 if (!yac_extents_overlap(&a, &b))
90 PUT_ERR("error in yac_extents_overlap\n");
91 }
92 return TEST_EXIT_CODE;
93}
94
int yac_extents_overlap(struct bounding_circle *extent_a, struct bounding_circle *extent_b)
Definition bnd_circle.c:533
static double const tol
#define YAC_RAD
static const struct sin_cos_angle SIN_COS_LOW_TOL
Definition geometry.h:38
static const struct sin_cos_angle SIN_COS_M_PI
Definition geometry.h:41
static int sub_angles(struct sin_cos_angle a, struct sin_cos_angle b, struct sin_cos_angle *restrict sub)
Definition geometry.h:504
static double get_angle(double a_lon, double b_lon)
Definition geometry.h:110
static double get_vector_angle(double const a[3], double const b[3])
Definition geometry.h:340
struct sin_cos_angle inc_angle
angle between the middle point and the boundary of the spherical cap
Definition geometry.h:53
double base_vector[3]
Definition geometry.h:51
#define TEST_EXIT_CODE
Definition tests.h:14
#define PUT_ERR(string)
Definition tests.h:10
static void LLtoXYZ(double lon, double lat, double p_out[])
Definition toy_scrip.c:587