home *** CD-ROM | disk | FTP | other *** search
-
- procedure ddtodms(dd: real; var deg, min : longint ;var sec :real);
- { convert an angle expressed in decimal degrees (dd.dddd) to
- degrees, minutes and seconds (ddd mm ss.ss).
- The sign will be at the leftmost non zero value.
- Juan A. Perez, USA ETL, Ft. Belvoir, VA 22060-5546
- 6-13-89 corrected problem with negative angles - with help from
- Dr. Justin Simpson }
- var
- ddtemp, degtemp, mintemp : real;
- begin
- ddtemp := abs(dd); { save the sign of dd }
- deg := trunc( ddtemp );
- degtemp := ddtemp - deg;
- min := trunc (degtemp * 60) ;
- mintemp := degtemp * 60 - min;
- sec := mintemp * 60.00;
-
- { assign the sign to the leftmost non zero value }
- if (dd < 0.000000) then
- begin
- if (deg = 0) then
- begin
- if (min = 0) then
- sec := - sec
- else
- min := - min
- end
- else
- deg := -deg
- end;
-
- { take care of the round-up errors and fix any 60 minutes or seconds cases}
- { may want to change to 59.99 for general use but for ADRG keep it 59.8}
- if (abs(sec) >= 59.8) then
- begin
- sec := 0.00;
- if (min < 0 ) then { if negative }
- min := min - 1
- else
- min := min + 1
- end;
-
- if ( abs(min) >= 60 ) then
- begin
- min := min-60;
- if (dd < 0.000000) then { if negative }
- deg := deg - 1
- else
- deg := deg + 1
- end;
-
- end;