Skip to content

Instantly share code, notes, and snippets.

@mormegil-cz
Created September 27, 2013 13:32
Show Gist options
  • Save mormegil-cz/6728646 to your computer and use it in GitHub Desktop.
Save mormegil-cz/6728646 to your computer and use it in GitHub Desktop.
Func<double, double> eval = r => Math.Asin(1 / (2 * r)) * r * r + Math.Sqrt(r * r - 0.25) / 2 - 0.5;
double left = 0.5;
double right = 1;
for(int i = 0; i < 100; ++i)
{
var mid = (left + right) / 2;
var midRes = eval(mid);
if (midRes < 0) left = mid;
else right = mid;
}
Console.WriteLine("r = {0}, eps = {1}, delta = {2}, var = {3}", left, eval(left), right - left, Math.Abs(eval(left)-eval(right)));
var c = left.ToString().Substring(1).Select(x => (int)x - '0').ToArray();
var lat = "N 50°" + (c[4]-7) + (c[8]-c[1]) + "." + (c[3]+1) + (c[5]+1) + (c[9]+1);
var lon = "E 015°" + (c[1]) + (c[2]-1) + "." + (c[7]) + (c[6]) + (c[10]);
Console.WriteLine("{0} {1}", lat, lon);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment