56 lines
1.2 KiB
C
56 lines
1.2 KiB
C
|
|
#include <stdbool.h>
|
|
#include <stdint.h>
|
|
#include <stdio.h>
|
|
#include <Windows.h>
|
|
#include "pap2_stdlib.h"
|
|
#include "pap2_stdlib.c"
|
|
#include <math.h>
|
|
|
|
typedef double f64;
|
|
|
|
static f64 Square(f64 A)
|
|
{
|
|
f64 Result = (A*A);
|
|
return Result;
|
|
}
|
|
|
|
static f64 RadiansFromDegrees(f64 Degrees)
|
|
{
|
|
f64 Result = 0.01745329251994329577 * Degrees;
|
|
return Result;
|
|
}
|
|
|
|
// NOTE(casey): EarthRadius is generally expected to be 6372.8
|
|
static f64 ReferenceHaversine(f64 X0, f64 Y0, f64 X1, f64 Y1, f64 EarthRadius)
|
|
{
|
|
/* NOTE(casey): This is not meant to be a "good" way to calculate the Haversine distance.
|
|
Instead, it attempts to follow, as closely as possible, the formula used in the real-world
|
|
question on which these homework exercises are loosely based.
|
|
*/
|
|
|
|
f64 lat1 = Y0;
|
|
f64 lat2 = Y1;
|
|
f64 lon1 = X0;
|
|
f64 lon2 = X1;
|
|
|
|
f64 dLat = RadiansFromDegrees(lat2 - lat1);
|
|
f64 dLon = RadiansFromDegrees(lon2 - lon1);
|
|
lat1 = RadiansFromDegrees(lat1);
|
|
lat2 = RadiansFromDegrees(lat2);
|
|
|
|
f64 a = Square(sin(dLat/2.0)) + cos(lat1)*cos(lat2)*Square(sin(dLon/2));
|
|
f64 c = 2.0*asin(sqrt(a));
|
|
|
|
f64 Result = EarthRadius * c;
|
|
|
|
return Result;
|
|
}
|
|
|
|
int main(int argc, char **argv)
|
|
{
|
|
(void)argc;
|
|
(void)argv;
|
|
return 0;
|
|
}
|