/*  this program finds the absolute and relative distance between the
    different points. the input to the program is the output of the
    program Extract.c  */

#include<stdio.h>
#include <math.h>

#define PI 3.141592654
#define DGRAD 0.0174533           // degree to radian conversion

//DIstance calculations

void main()
 {
    long double l1,l2,g1,g2,lat,lon;
    float data;
    long double dist_m,dist_m1;
    int i;

    FILE *abs_distance_f;
    FILE *rel_distance_f;
    FILE *raw_data_f;

   long double get_distance(long double,long double, long double,long double);

    clrscr();

    raw_data_f=fopen("D:\\sapna\\output1.txt","r");
    abs_distance_f=fopen("D:\\sapna\\abs_distance.txt","w");
    rel_distance_f=fopen("D:\\sapna\\rel_distance.txt","w");

    fscanf(raw_data_f,"%f",&data);
   // printf("%f ",data);
    fscanf(raw_data_f,"%f",&data);
   // printf("%f ",data);
    l1=data;                         // fixing initial latitude
    lat=data;
    fscanf(raw_data_f,"%f",&data);
   // printf("%f ",data);
    g1=data;                        // fixing initial longitude
    lon=data;

  //  while(data!=EOF)
  // for ( i=0;i<3181;i++)

   for ( i=0;i<2472;i++)
  //  for(i=0;i<100;i++)
    {
       fscanf(raw_data_f,"%f",&data);
       fscanf(raw_data_f,"%f",&data);
       l2=data;
       fscanf(raw_data_f,"%f",&data);
       g2=data;
       dist_m=get_distance(lat,lon,l2,g2);
       fprintf(abs_distance_f,"%Lf \n",dist_m);

       dist_m1=get_distance(l1,g1,l2,g2);
     //  fprintf(rel_distance_f,"%f ,%f ,%f ,%f\n",l1,g1,l2,g2);

       fprintf(rel_distance_f,"%Lf \n",dist_m1);

       l1=l2;
       g1=g2;

    }

 }

long double get_distance(long double L1, long double G1,long double L2,long double G2)
   {
      long double DG;
       long double temp,d_temp,temp1,distance_km;

      DG=G2-G1;
    //  printf("DG=%f\t",DG);
// calcutating the distance between two points defined interms of latitude and longitude.
      temp=((sinl(L1*DGRAD)*sinl(L2*DGRAD)+ cosl(L1*DGRAD)*cosl(L2*DGRAD)*cosl(DG*DGRAD)));
      if (temp> 1.0)
      {
      temp1=temp-1;
       if (temp1<0.00001)
	 {
	   temp=1.0;
	 }
       else
	   printf(" the error in acos computation");
      }

     // printf("temp=%.10Lf\t",temp);
      d_temp=acosl(temp)*(temp/PI)*180;
    //  printf("d_temp=%.10Lf\t",d_temp);
      distance_km=d_temp*60*1.852;
     // printf("distance=%.10Lf \n",distance_km);
      return(distance_km*1000);
   }

Sumber :

Centre for Aerospace Systems Design and Engineering, India Institute of Technology Bombay (IITB)