GRASS 8 Programmer's Manual 8.6.0dev(2026)-1d1e47ad9d
Loading...
Searching...
No Matches
vector/vedit/distance.c
Go to the documentation of this file.
1/*!
2 \file lib/vector/vedit/distance.c
3
4 \brief Vedit library - distance calculation
5
6 (C) 2007-2008 by the GRASS Development Team
7
8 This program is free software under the GNU General Public License
9 (>=v2). Read the file COPYING that comes with GRASS for details.
10
11 \author Martin Landa <landa.martin gmail.com>
12 */
13
14#include <grass/vedit.h>
15
16/*!
17 \brief Calculate distances between two lines
18
19 \todo LL projection
20
21 \param Points1 first line geometry
22 \param Points2 second line geometry
23 \param with_z WITH_Z for 3D data
24 \param[out] mindistidx index of minimal distance
25
26 \return minimal distance between two lines (their nodes)
27 */
29 struct line_pnts *Points2, int with_z,
30 int *mindistidx)
31{
32 unsigned int i;
33 double distances[4];
34
35 /*
36 distances[0] = first-first
37 distances[1] = first-last
38 distances[2] = last-first
39 distances[3] = last-last
40 */
41
43 Points1->z[0], Points2->x[0],
44 Points2->y[0], Points2->z[0], with_z);
45
47 Points1->x[0], Points1->y[0], Points1->z[0],
48 Points2->x[Points2->n_points - 1], Points2->y[Points2->n_points - 1],
49 Points2->z[Points2->n_points - 1], with_z);
50
52 Points1->x[Points1->n_points - 1], Points1->y[Points1->n_points - 1],
53 Points1->z[Points1->n_points - 1], Points2->x[0], Points2->y[0],
54 Points2->z[0], with_z);
55
57 Points1->x[Points1->n_points - 1], Points1->y[Points1->n_points - 1],
58 Points1->z[Points1->n_points - 1], Points2->x[Points2->n_points - 1],
59 Points2->y[Points2->n_points - 1], Points2->z[Points2->n_points - 1],
60 with_z);
61
62 /* find the minimal distance between first or last point of both lines */
63 *mindistidx = 0;
64 for (i = 0; i < sizeof(distances) / sizeof(double); i++) {
65 if (distances[i] >= 0.0 && distances[i] < distances[*mindistidx])
66 *mindistidx = i;
67 }
68
69 G_debug(3, "Vedit_get_min_distance(): dists=%f,%f,%f,%f", distances[0],
70 distances[1], distances[2], distances[3]);
71
72 return distances[*mindistidx];
73}
int G_debug(int, const char *,...) __attribute__((format(printf
double Vect_points_distance(double, double, double, double, double, double, int)
Calculate distance of 2 points.
Definition line.c:866
Feature geometry info - coordinates.
double Vedit_get_min_distance(struct line_pnts *Points1, struct line_pnts *Points2, int with_z, int *mindistidx)
Calculate distances between two lines.