/* ======================================================================== (C) Copyright 2023 by Molly Rocket, Inc., All Rights Reserved. This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Please see https://computerenhance.com for more information ======================================================================== */ /* ======================================================================== LISTING 65 ======================================================================== */ 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; }