// Maths.cpp : Définit les fonctions de la bibliothèque statique.
//
#ifndef M_PI
#define M_PI 3.14159265358979323846
#endif

#include "Maths.hpp"
#include <cmath>

double Maths::DegreesToRadians(double degrees) {
    return degrees * M_PI / 180.0;
}

// Convertit des radians en degrés
double Maths::RadiansToDegrees(double radians) {
    return radians * 180.0 / M_PI;
}

double Maths::CompensateHorizontalFOV(double baseHorizontalFOVDeg, double baseAspectRatio, double targetAspectRatio) {
    double baseFOVRad = DegreesToRadians(baseHorizontalFOVDeg);
    // Step 1 : FOV vertical from horizontal FOV
    double verticalFOVRad = 2.0 * std::atan(std::tan(baseFOVRad / 2.0) / baseAspectRatio);
    // Step 2 : New horizontal FOV for target aspect ratio
    double newFOVRad = 2.0 * std::atan(std::tan(verticalFOVRad / 2.0) * targetAspectRatio);

    return RadiansToDegrees(newFOVRad);
}