fork download
  1. /* package whatever; // don't place package name! */
  2.  
  3. import java.util.*;
  4. import java.lang.*;
  5. import java.io.*;
  6.  
  7. /* Name of the class has to be "Main" only if the class is public. */
  8. class Ideone
  9. {
  10. public static void main (String[] args) throws java.lang.Exception
  11. {
  12. double dLatPos1 = latdecimal(31, 0, 0, "N");
  13. double dLonPos1 = londecimal(331, 0, 0, "E");
  14. double dLatPos2 = latdecimal(2, 42, 0, "S");
  15. double dLonPos2 = londecimal(16, 42, 0, "E");
  16.  
  17. System.out.print(measure(dLatPos1, dLonPos1, dLatPos2, dLonPos2));
  18. }
  19.  
  20. static double measure(double lat1, double lon1, double lat2, double lon2){ // generally used geo measurement function
  21. double R = 320; // Radius of Duna in KM
  22. double dLat = (lat2 - lat1) * Math.PI / 180;
  23. double dLon = (lon2 - lon1) * Math.PI / 180;
  24. double a = Math.sin(dLat/2) * Math.sin(dLat/2) +
  25. Math.cos(lat1 * Math.PI / 180) * Math.cos(lat2 * Math.PI / 180) *
  26. Math.sin(dLon/2) * Math.sin(dLon/2);
  27. double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
  28. double d = R * c;
  29. return d; // km
  30. }
  31.  
  32. static double latdecimal(double degree, double minutes, double seconds, String direction) {
  33. double dLatDecimal = degree + (minutes/60) + (seconds/3600);
  34. if(direction.equals("S")) {
  35. dLatDecimal = -1 * dLatDecimal;
  36. }
  37. return dLatDecimal;
  38. }
  39.  
  40. static double londecimal(double degree, double minutes, double seconds, String direction) {
  41. double dLonDecimal = degree + (minutes/60) + (seconds/3600);
  42. if(direction.equals("W")) {
  43. dLonDecimal = -1 * dLonDecimal;
  44. }
  45. return dLonDecimal;
  46. }
  47. }
Success #stdin #stdout 0.12s 320576KB
stdin
Standard input is empty
stdout
307.1169614615872