PostGIS  2.3.8dev-r@@SVN_REVISION@@

◆ project_point_on_plane()

double project_point_on_plane ( POINT3DZ p,
PLANE3D pl,
POINT3DZ p0 
)

Finds a point on a plane from where the original point is perpendicular to the plane.

Definition at line 1203 of file measures3d.c.

References DOT, get_3dvector_from_points(), LW_FALSE, PLANE3D::pop, PLANE3D::pv, VECTOR3D::x, POINT3DZ::x, VECTOR3D::y, POINT3DZ::y, VECTOR3D::z, and POINT3DZ::z.

Referenced by lw_dist3d_point_poly(), and lw_dist3d_ptarray_poly().

1204 {
1205 /*In our plane definition we have a point on the plane and a normal vektor (pl.pv), perpendicular to the plane
1206 this vector will be paralell to the line between our inputted point above the plane and the point we are searching for on the plane.
1207 So, we already have a direction from p to find p0, but we don't know the distance.
1208 */
1209 
1210  VECTOR3D v1;
1211  double f;
1212 
1213  if (!get_3dvector_from_points(&(pl->pop), p, &v1))
1214  return LW_FALSE;
1215 
1216  f=-(DOT(pl->pv,v1)/DOT(pl->pv,pl->pv));
1217 
1218  p0->x=p->x+pl->pv.x*f;
1219  p0->y=p->y+pl->pv.y*f;
1220  p0->z=p->z+pl->pv.z*f;
1221 
1222  return f;
1223 }
double z
Definition: liblwgeom.h:333
double y
Definition: liblwgeom.h:333
double x
Definition: liblwgeom.h:333
double z
Definition: measures3d.h:51
VECTOR3D pv
Definition: measures3d.h:58
double y
Definition: measures3d.h:51
#define DOT(u, v)
Definition: measures3d.h:31
#define LW_FALSE
Definition: liblwgeom.h:76
static int get_3dvector_from_points(POINT3DZ *p1, POINT3DZ *p2, VECTOR3D *v)
Definition: measures3d.c:45
POINT3DZ pop
Definition: measures3d.h:57
double x
Definition: measures3d.h:51
Here is the call graph for this function:
Here is the caller graph for this function: