GRASS Programmer's Manual 6.4.1(2011)
distance.c
Go to the documentation of this file.
00001 
00017 #include <grass/vedit.h>
00018 
00030 double Vedit_get_min_distance(struct line_pnts *Points1,
00031                               struct line_pnts *Points2, int with_z,
00032                               int *mindistidx)
00033 {
00034     unsigned int i;
00035     double distances[4];
00036 
00037     /*
00038        distances[0] = first-first
00039        distances[1] = first-last
00040        distances[2] = last-first
00041        distances[3] = last-last
00042      */
00043 
00044     distances[0] =
00045         Vect_points_distance(Points1->x[0], Points1->y[0], Points1->z[0],
00046                              Points2->x[0], Points2->y[0], Points2->z[0],
00047                              with_z);
00048 
00049     distances[1] =
00050         Vect_points_distance(Points1->x[0], Points1->y[0], Points1->z[0],
00051                              Points2->x[Points2->n_points - 1],
00052                              Points2->y[Points2->n_points - 1],
00053                              Points2->z[Points2->n_points - 1], with_z);
00054 
00055     distances[2] = Vect_points_distance(Points1->x[Points1->n_points - 1],
00056                                         Points1->y[Points1->n_points - 1],
00057                                         Points1->z[Points1->n_points - 1],
00058                                         Points2->x[0], Points2->y[0],
00059                                         Points2->z[0], with_z);
00060 
00061     distances[3] = Vect_points_distance(Points1->x[Points1->n_points - 1],
00062                                         Points1->y[Points1->n_points - 1],
00063                                         Points1->z[Points1->n_points - 1],
00064                                         Points2->x[Points2->n_points - 1],
00065                                         Points2->y[Points2->n_points - 1],
00066                                         Points2->z[Points2->n_points - 1],
00067                                         with_z);
00068 
00069     /* find the minimal distance between first or last point of both lines */
00070     *mindistidx = 0;
00071     for (i = 0; i < sizeof(distances) / sizeof(double); i++) {
00072         if (distances[i] >= 0.0 && distances[i] < distances[*mindistidx])
00073             *mindistidx = i;
00074     }
00075 
00076     G_debug(3, "Vedit_get_min_distance(): dists=%f,%f,%f,%f",
00077             distances[0], distances[1], distances[2], distances[3]);
00078 
00079     return distances[*mindistidx];
00080 }
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines