siderust-cpp 0.8.0
Header-only C++ wrapper for siderust
Loading...
Searching...
No Matches
19_sky_grid_sampling.cpp

Hemispherical altitude/azimuth sky-grid sampling.

// SPDX-License-Identifier: AGPL-3.0-or-later
// Copyright (C) 2026 Vallés Puig, Ramon
#include <cassert>
#include <cmath>
#include <iostream>
int main() {
using namespace siderust;
// Uniform 10° grid over the upper hemisphere: 9 alt rings × 36 az steps.
auto uniform = SkyGrid::uniform(qtty::Degree(10.0));
auto cells = uniform.cells();
std::cout << "uniform 10deg grid: " << cells.size() << " cells\n";
assert(cells.size() == static_cast<std::size_t>(9 * 36));
// Equal-area grid: per-cell solid angles sum to the hemisphere (2pi sr).
auto equal_area = SkyGrid::equal_area(qtty::Degree(5.0), qtty::Degree(5.0));
double total_sr = 0.0;
for (const auto &cell : equal_area.cells()) {
total_sr += cell.solid_angle.value();
}
std::cout << "equal-area total solid angle: " << total_sr
<< " sr (hemisphere = " << 2.0 * constants::pi << " sr)\n";
assert(std::abs(total_sr - 2.0 * constants::pi) / (2.0 * constants::pi) < 0.01);
// Apply a 20deg horizon mask via the builder.
auto masked = SkyGrid::with_steps(qtty::Degree(10.0), qtty::Degree(10.0));
masked.with_alt_range(qtty::Degree(20.0), qtty::Degree(90.0));
std::cout << "20deg horizon mask: " << masked.cells().size() << " cells\n";
assert(masked.cells().size() < cells.size());
std::cout << "SkyGrid sampling OK\n";
return 0;
}
static SkyGrid with_steps(qtty::Degree alt_step, qtty::Degree az_step)
Uniform grid with independent altitude and azimuth steps over [0°, 90°).
Definition sky_grid.hpp:78
static SkyGrid equal_area(qtty::Degree alt_step, qtty::Degree az_step_at_horizon)
Equal-area grid: azimuth count per altitude ring scales with cos(alt).
Definition sky_grid.hpp:83
static SkyGrid uniform(qtty::Degree step)
Uniform grid with equal altitude and azimuth steps over [0°, 90°).
Definition sky_grid.hpp:73
constexpr double pi
Circle constant pi (radians per half-turn).
Definition constants.hpp:12
Umbrella header for the siderust C++ wrapper library.