Jump to content

Horizontal sundial calculations: Difference between revisions

(→‎{{header|J}}: use trig library and match sign of Diff Longitude to other implementations)
Line 116:
return 0;
}</lang>
=={{header|D}}==
{{trans|Python}}
<lang d>import std.stdio: write, writeln, writefln, readln;
import std.math: sin, tan, atan, PI;
import std.conv: to;
import std.string: strip;
 
double radians(double x) { return x * (PI/180); }
double degrees(double x) { return x / (PI/180); }
 
T input(T)(string msg) {
write(msg);
return to!T(readln().strip());
}
 
void main() {
double lat = input!double("Enter latitude => ");
double lng = input!double("Enter longitude => ");
double lme = input!double("Enter legal meridian => ");
writeln();
 
double slat = sin(radians(lat));
writefln(" sine of latitude: %.3f", slat);
writefln(" diff longitude: %.3f", lng-lme);
writeln();
writeln("Hour, sun hour angle, dial hour line angle from 6am to 6pm");
 
foreach (h; -6 .. 7) {
double hra = 15 * h;
hra -= (lng - lme);
double hla = degrees(atan(slat * tan(radians(hra))));
writefln("HR=%3d; HRA=%7.3f; HLA=%7.3f", h, hra, hla);
}
}</lang>
Example run:
<pre>Enter latitude => -4.95
Enter longitude => -150.5
Enter legal meridian => -150
 
sine of latitude: -0.086
diff longitude: -0.500
 
Hour, sun hour angle, dial hour line angle from 6am to 6pm
HR= -6; HRA=-89.500; HLA= 84.225
HR= -5; HRA=-74.500; HLA= 17.283
HR= -4; HRA=-59.500; HLA= 8.334
HR= -3; HRA=-44.500; HLA= 4.847
HR= -2; HRA=-29.500; HLA= 2.795
HR= -1; HRA=-14.500; HLA= 1.278
HR= 0; HRA= 0.500; HLA= -0.043
HR= 1; HRA= 15.500; HLA= -1.371
HR= 2; HRA= 30.500; HLA= -2.910
HR= 3; HRA= 45.500; HLA= -5.018
HR= 4; HRA= 60.500; HLA= -8.671
HR= 5; HRA= 75.500; HLA=-18.451
HR= 6; HRA= 90.500; HLA= 84.225
</pre>
 
=={{header|Fortran}}==
Anonymous user
Cookies help us deliver our services. By using our services, you agree to our use of cookies.