MALOC  0.1
Macros | Functions
vpred.h File Reference

Header file for the Geometric Predicates. More...

#include <maloc/maloc_base.h>
Include dependency graph for vpred.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define INEXACT   /* Nothing */
 Parameters and constants "INEXACT". More...
 
#define REAL   double
 float or double More...
 
#define REALPRINT   doubleprint
 Print the bit representation of a double. More...
 
#define REALRAND   doublerand
 Generate a double with random 53-bit significand and a random exponent in [0, 511]. More...
 
#define NARROWRAND   narrowdoublerand
 Generate a double with random 53-bit significand and a random exponent in [0, 7]. More...
 
#define UNIFORMRAND   uniformdoublerand
 Generate a double with random 53-bit significand. More...
 

Functions

void Vpred_exactinit (void)
 Initialize the variables used for exact arithmetic. More...
 
REAL Vpred_orient2d (REAL *pa, REAL *pb, REAL *pc)
 Adaptive exact 2D orientation test. Robust. More...
 
REAL Vpred_orient2dfast (REAL *pa, REAL *pb, REAL *pc)
 Approximate 2D orientation test. Nonrobust. More...
 
REAL Vpred_orient2dexact (REAL *pa, REAL *pb, REAL *pc)
 Exact 2D orientation test. Robust. More...
 
REAL Vpred_orient3d (REAL *pa, REAL *pb, REAL *pc, REAL *pd)
 Adaptive exact 3D orientation test. Robust. More...
 
REAL Vpred_orient3dfast (REAL *pa, REAL *pb, REAL *pc, REAL *pd)
 Approximate 3D orientation test. Nonrobust. More...
 
REAL Vpred_orient3dexact (REAL *pa, REAL *pb, REAL *pc, REAL *pd)
 Exact 3D orientation test. Robust. More...
 
REAL Vpred_incircle (REAL *pa, REAL *pb, REAL *pc, REAL *pd)
 Adaptive exact 2D incircle test. Robust. More...
 
REAL Vpred_incirclefast (REAL *pa, REAL *pb, REAL *pc, REAL *pd)
 Approximate 2D incircle test. Nonrobust. More...
 
REAL Vpred_incircleexact (REAL *pa, REAL *pb, REAL *pc, REAL *pd)
 Exact 2D incircle test. Robust. More...
 
REAL Vpred_insphere (REAL *pa, REAL *pb, REAL *pc, REAL *pd, REAL *pe)
 Adaptive exact 3D insphere test. Robust. More...
 
REAL Vpred_inspherefast (REAL *pa, REAL *pb, REAL *pc, REAL *pd, REAL *pe)
 Approximate 3D insphere test. Nonrobust. More...
 
REAL Vpred_insphereexact (REAL *pa, REAL *pb, REAL *pc, REAL *pd, REAL *pe)
 Exact 3D insphere test. Robust. More...
 

Detailed Description

Header file for the Geometric Predicates.

Version
Id
vpred.h,v 1.4 2010/08/12 05:40:37 fetk Exp
Author
Michael Holst
Attention
*
* MALOC = < Minimal Abstraction Layer for Object-oriented C >
* Copyright (C) 1994-- Michael Holst
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* 
*  

Macro Definition Documentation

◆ INEXACT

#define INEXACT   /* Nothing */

Parameters and constants "INEXACT".

◆ NARROWRAND

#define NARROWRAND   narrowdoublerand

Generate a double with random 53-bit significand and a random exponent in [0, 7].

◆ REAL

#define REAL   double

float or double

◆ REALPRINT

#define REALPRINT   doubleprint

Print the bit representation of a double.

◆ REALRAND

#define REALRAND   doublerand

Generate a double with random 53-bit significand and a random exponent in [0, 511].

◆ UNIFORMRAND

#define UNIFORMRAND   uniformdoublerand

Generate a double with random 53-bit significand.

Function Documentation

◆ Vpred_exactinit()

void Vpred_exactinit ( void  )

Initialize the variables used for exact arithmetic.

Note
‘epsilon’ is the largest power of two such that 1.0 + epsilon = 1.0 in floating-point arithmetic. ‘epsilon’ bounds the relative roundoff error. It is used for floating-point error analysis. ‘splitter’ is used to split floating-point numbers into two half- length significands for exact multiplication. I imagine that a highly optimizing compiler might be too smart for its own good, and somehow cause this routine to fail, if it pretends that floating-point arithmetic is too much like real arithmetic. Don't change this routine unless you fully understand it.

◆ Vpred_incircle()

REAL Vpred_incircle ( REAL pa,
REAL pb,
REAL pc,
REAL pd 
)

Adaptive exact 2D incircle test. Robust.

Returns
a positive value if the point pd lies inside the circle passing through pa, pb, and pc; a negative value if it lies outside; and zero if the four points are cocircular. The points pa, pb, and pc must be in counterclockwise order, or the sign of the result will be reversed.
Parameters
paPointer to a real parameter
pbPointer to a real parameter
pcPointer to a real parameter
pdPointer to a real parameter

◆ Vpred_incircleexact()

REAL Vpred_incircleexact ( REAL pa,
REAL pb,
REAL pc,
REAL pd 
)

Exact 2D incircle test. Robust.

Returns
a positive value if the point pd lies inside the circle passing through pa, pb, and pc; a negative value if it lies outside; and zero if the four points are cocircular. The points pa, pb, and pc must be in counterclockwise order, or the sign of the result will be reversed.
Parameters
paPointer to a real parameter
pbPointer to a real parameter
pcPointer to a real parameter
pdPointer to a real parameter

◆ Vpred_incirclefast()

REAL Vpred_incirclefast ( REAL pa,
REAL pb,
REAL pc,
REAL pd 
)

Approximate 2D incircle test. Nonrobust.

Returns
a positive value if the point pd lies inside the circle passing through pa, pb, and pc; a negative value if it lies outside; and zero if the four points are cocircular. The points pa, pb, and pc must be in counterclockwise order, or the sign of the result will be reversed.
Parameters
paPointer to a real parameter
pbPointer to a real parameter
pcPointer to a real parameter
pdPointer to a real parameter

◆ Vpred_insphere()

REAL Vpred_insphere ( REAL pa,
REAL pb,
REAL pc,
REAL pd,
REAL pe 
)

Adaptive exact 3D insphere test. Robust.

Returns
a positive value if the point pe lies inside the sphere passing through pa, pb, pc, and pd; a negative value if it lies outside; and zero if the five points are cospherical. The points pa, pb, pc, and pd must be ordered so that they have a positive orientation (as defined by orient3d()), or the sign of the result will be reversed.
Parameters
paPointer to a real parameter
pbPointer to a real parameter
pcPointer to a real parameter
pdPointer to a real parameter
pePointer to a real parameter

◆ Vpred_insphereexact()

REAL Vpred_insphereexact ( REAL pa,
REAL pb,
REAL pc,
REAL pd,
REAL pe 
)

Exact 3D insphere test. Robust.

Returns
a positive value if the point pe lies inside the sphere passing through pa, pb, pc, and pd; a negative value if it lies outside; and zero if the five points are cospherical. The points pa, pb, pc, and pd must be ordered so that they have a positive orientation (as defined by orient3d()), or the sign of the result will be reversed.
Parameters
paPointer to a real parameter
pbPointer to a real parameter
pcPointer to a real parameter
pdPointer to a real parameter
pePointer to a real parameter

◆ Vpred_inspherefast()

REAL Vpred_inspherefast ( REAL pa,
REAL pb,
REAL pc,
REAL pd,
REAL pe 
)

Approximate 3D insphere test. Nonrobust.

Returns
a positive value if the point pe lies inside the sphere passing through pa, pb, pc, and pd; a negative value if it lies outside; and zero if the five points are cospherical. The points pa, pb, pc, and pd must be ordered so that they have a positive orientation (as defined by orient3d()), or the sign of the result will be reversed.
Parameters
paPointer to a real parameter
pbPointer to a real parameter
pcPointer to a real parameter
pdPointer to a real parameter
pePointer to a real parameter

◆ Vpred_orient2d()

REAL Vpred_orient2d ( REAL pa,
REAL pb,
REAL pc 
)

Adaptive exact 2D orientation test. Robust.

Returns
a positive value if the points pa, pb, and pc occur in counterclockwise order; a negative value if they occur in clockwise order; and zero if they are collinear. The result is also a rough approximation of twice the signed area of the triangle defined by the three points.
Parameters
paPointer to a real parameter
pbPointer to a real parameter
pcPointer to a real parameter

◆ Vpred_orient2dexact()

REAL Vpred_orient2dexact ( REAL pa,
REAL pb,
REAL pc 
)

Exact 2D orientation test. Robust.

Returns
a positive value if the points pa, pb, and pc occur in counterclockwise order; a negative value if they occur in clockwise order; and zero if they are collinear. The result is also a rough approximation of twice the signed area of the triangle defined by the three points.
Parameters
paPointer to a real parameter
pbPointer to a real parameter
pcPointer to a real parameter

◆ Vpred_orient2dfast()

REAL Vpred_orient2dfast ( REAL pa,
REAL pb,
REAL pc 
)

Approximate 2D orientation test. Nonrobust.

Returns
a positive value if the points pa, pb, and pc occur in counterclockwise order; a negative value if they occur in clockwise order; and zero if they are collinear. The result is also a rough approximation of twice the signed area of the triangle defined by the three points.
Parameters
paPointer to a real parameter
pbPointer to a real parameter
pcPointer to a real parameter

◆ Vpred_orient3d()

REAL Vpred_orient3d ( REAL pa,
REAL pb,
REAL pc,
REAL pd 
)

Adaptive exact 3D orientation test. Robust.

Returns
a positive value if the point pd lies below the plane passing through pa, pb, and pc; "below" is defined so that pa, pb, and pc appear in counterclockwise order when viewed from above the plane. Returns a negative value if pd lies above the plane. Returns zero if the points are coplanar. The result is also a rough approximation of six times the signed volume of the tetrahedron defined by the four points.
Parameters
paPointer to a real parameter
pbPointer to a real parameter
pcPointer to a real parameter
pdPointer to a real parameter

◆ Vpred_orient3dexact()

REAL Vpred_orient3dexact ( REAL pa,
REAL pb,
REAL pc,
REAL pd 
)

Exact 3D orientation test. Robust.

Returns
a positive value if the point pd lies below the plane passing through pa, pb, and pc; "below" is defined so that pa, pb, and pc appear in counterclockwise order when viewed from above the plane. Returns a negative value if pd lies above the plane. Returns zero if the points are coplanar. The result is also a rough approximation of six times the signed volume of the tetrahedron defined by the four points.
Parameters
paPointer to a real parameter
pbPointer to a real parameter
pcPointer to a real parameter
pdPointer to a real parameter

◆ Vpred_orient3dfast()

REAL Vpred_orient3dfast ( REAL pa,
REAL pb,
REAL pc,
REAL pd 
)

Approximate 3D orientation test. Nonrobust.

Returns
a positive value if the point pd lies below the plane passing through pa, pb, and pc; "below" is defined so that pa, pb, and pc appear in counterclockwise order when viewed from above the plane. Returns a negative value if pd lies above the plane. Returns zero if the points are coplanar. The result is also a rough approximation of six times the signed volume of the tetrahedron defined by the four points.
Parameters
paPointer to a real parameter
pbPointer to a real parameter
pcPointer to a real parameter
pdPointer to a real parameter