GRASS Programmer's Manual  6.5.svn(2014)-r66266
GS_util.c File Reference

`#include <stdlib.h>`
`#include <math.h>`
`#include <string.h>`
`#include <grass/gis.h>`
`#include <grass/gstypes.h>`
Include dependency graph for GS_util.c:

Go to the source code of this file.

## Functions

double GS_geodistance (double *from, double *to, const char *units)
Calculate distance between 2 coordinates. More...

float GS_distance (float *from, float *to)
Calculate distance. More...

float GS_P2distance (float *from, float *to)
Calculate distance in plane. More...

void GS_v3eq (float *v1, float *v2)
Copy vector values. More...

void GS_v3add (float *v1, float *v2)
Sum vectors. More...

void GS_v3sub (float *v1, float *v2)
Subtract vectors. More...

void GS_v3mult (float *v1, float k)
Multiple vectors. More...

int GS_v3norm (float *v1)
Change v1 so that it is a unit vector (2D) More...

int GS_v2norm (float *v1)
Change v1 so that it is a unit vector (3D) More...

int GS_dv3norm (double *dv1)
Changes v1 so that it is a unit vector. More...

int GS_v3normalize (float *v1, float *v2)
Change v2 so that v1v2 is a unit vector. More...

int GS_v3dir (float *v1, float *v2, float *v3)
Get a normalized direction from v1 to v2, store in v3. More...

void GS_v2dir (float *v1, float *v2, float *v3)
Get a normalized direction from v1 to v2, store in v3 (2D) More...

void GS_v3cross (float *v1, float *v2, float *v3)
Get the cross product v3 = v1 cross v2. More...

void GS_v3mag (float *v1, float *mag)
Magnitude of vector. More...

int GS_coordpair_repeats (float *p1, float *p2, int nhist)

## Detailed Description

GRASS OpenGL gsurf OGSF Library

(C) 1999-2008 by the GRASS Development Team

This program is free software under the GNU General Public License (>=v2). Read the file COPYING that comes with GRASS for details.

Definition in file GS_util.c.

## Function Documentation

 int GS_coordpair_repeats ( float * p1, float * p2, int nhist )

Initialize by calling with a number nhist to represent number of previous entrys to check, then call with zero as nhist

Parameters
 p1 first point p2 second point nhist ?
Returns
-1 on error
-2
1
9

Definition at line 443 of file GS_util.c.

References G_free(), and NULL.

Referenced by GS_draw_flowline_at_xy().

 float GS_distance ( float * from, float * to )

Calculate distance.

Parameters
 from 'from' point (X,Y,Z) to 'to' point (X,Y,Z)
Returns
distance

Definition at line 141 of file GS_util.c.

References X, y, and Y.

 int GS_dv3norm ( double * dv1 )

Changes v1 so that it is a unit vector.

Parameters
 dv1 vector
Returns
0 if magnitude of dv1 is zero
1 if magnitude of dv1 > 0

Definition at line 295 of file GS_util.c.

References n, X, and Y.

Referenced by gsd_def_cplane().

 double GS_geodistance ( double * from, double * to, const char * units )

Calculate distance between 2 coordinates.

Units is one of:

• "meters",
• "miles",
• "kilometers",
• "feet",
• "yards",
• "nmiles" (nautical miles),
• "rods",
• "inches",
• "centimeters",
• "millimeters",
• "micron",
• "nanometers",
• "cubits",
• "hands",
• "furlongs",
• "chains"

Default is meters.

Parameters
 from starting point to ending point units map units
Returns
distance between two geographic coordinates in current projection

Definition at line 55 of file GS_util.c.

References Gs_distance().

 float GS_P2distance ( float * from, float * to )

Calculate distance in plane.

Parameters
 from 'from' point (X,Y) to 'to' point (X,Y)
Returns
distance

Definition at line 160 of file GS_util.c.

References X, y, and Y.

Referenced by gsd_arrow(), gsd_draw_cplane_fence(), gv_line_length(), and seg_intersect_vregion().

 void GS_v2dir ( float * v1, float * v2, float * v3 )

Get a normalized direction from v1 to v2, store in v3 (2D)

Parameters
 v1 first vector v2 second vector [out] v3 output vector
Returns
0 if magnitude of dx is zero
1 if magnitude of dx > 0

Definition at line 385 of file GS_util.c.

References n, X, and Y.

 int GS_v2norm ( float * v1 )

Change v1 so that it is a unit vector (3D)

Parameters
 [in,out] v1 vector
Returns
0 if magnitude of v1 is zero
1 if magnitude of v1 > 0

Definition at line 271 of file GS_util.c.

References n, X, and Y.

Referenced by GS_draw_flowline_at_xy().

 void GS_v3add ( float * v1, float * v2 )

Sum vectors.

v1 += v2

Parameters
 [in,out] v1 first vector v2 second vector

Definition at line 195 of file GS_util.c.

References X, and Y.

Referenced by GS_moveto(), GS_set_viewdir(), gs_setlos_enterdata(), and gsd_arrow_onsurf().

 void GS_v3cross ( float * v1, float * v2, float * v3 )

Get the cross product v3 = v1 cross v2.

Parameters
 v1 first vector v2 second vector [out] v3 output vector

Definition at line 406 of file GS_util.c.

References X, and Y.

Referenced by gsd_arrow_onsurf(), gsd_surf_map_old(), and Gv_load_vect().

 int GS_v3dir ( float * v1, float * v2, float * v3 )

Get a normalized direction from v1 to v2, store in v3.

Parameters
 v1 first vector v2 second vector [out] v3 output vector
Returns
0 if magnitude of dx is zero
1 if magnitude of dx > 0

Definition at line 353 of file GS_util.c.

References n, X, and Y.

 void GS_v3eq ( float * v1, float * v2 )

Copy vector values.

v1 = v2

Parameters
 [out] v1 first vector v2 second vector

Definition at line 178 of file GS_util.c.

References X, and Y.

 void GS_v3mag ( float * v1, float * mag )

Magnitude of vector.

Parameters
 v1 vector [out] mag magnitude value

Definition at line 421 of file GS_util.c.

References X, and Y.

Referenced by gsd_arrow_onsurf(), and gsd_surf_map_old().

 void GS_v3mult ( float * v1, float k )

Multiple vectors.

v1 *= k

Parameters
 [in,out] v1 vector k multiplicator

Definition at line 229 of file GS_util.c.

References X, and Y.

 int GS_v3norm ( float * v1 )

Change v1 so that it is a unit vector (2D)

Parameters
 [in,out] v1 vector
Returns
0 if magnitude of v1 is zero
1 if magnitude of v1 > 0

Definition at line 246 of file GS_util.c.

References n, X, and Y.

Referenced by GS_set_viewdir(), gsd_3darrow(), gsd_arrow(), gsd_draw_cplane_fence(), and iso_calc_cube().

 int GS_v3normalize ( float * v1, float * v2 )

Change v2 so that v1v2 is a unit vector.

Parameters
 v1 first vector v2[in,out] second vector
Returns
0 if magnitude of dx is zero
1 if magnitude of dx > 0

Definition at line 322 of file GS_util.c.

References n, X, and Y.

Referenced by GS_init_view(), GS_moveto(), and gsd_check_focus().

 void GS_v3sub ( float * v1, float * v2 )

Subtract vectors.

v1 -= v2

Parameters
 [in,out] v1 first vector v2 second vector

Definition at line 212 of file GS_util.c.

References X, and Y.

Referenced by GS_moveto(), and gsd_surf_map_old().