00001 // ======================================================================================== 00002 // ApproxMVBB 00003 // Copyright (C) 2014 by Gabriel N�tzi <nuetzig (at) imes (d0t) mavt (d0t) ethz (d�t) ch> 00004 // 00005 // This Source Code Form is subject to the terms of the Mozilla Public 00006 // License, v. 2.0. If a copy of the MPL was not distributed with this 00007 // file, You can obtain one at http://mozilla.org/MPL/2.0/. 00008 // ======================================================================================== 00009 00010 #ifndef ApproxMVBB_GeometryPredicates_Predicates_hpp 00011 #define ApproxMVBB_GeometryPredicates_Predicates_hpp 00012 00013 namespace GeometryPredicates{ 00014 00015 /* On some machines, the exact arithmetic routines might be defeated by the */ 00016 /* use of internal extended precision floating-point registers. Sometimes */ 00017 /* this problem can be fixed by defining certain values to be volatile, */ 00018 /* thus forcing them to be stored to memory and rounded off. This isn't */ 00019 /* a great solution, though, as it slows the arithmetic down. */ 00020 /* */ 00021 /* To try this out, write "#define INEXACT volatile" below. Normally, */ 00022 /* however, INEXACT should be defined to be nothing. ("#define INEXACT".) */ 00023 00024 #define INEXACT /* Nothing */ 00025 /* #define INEXACT volatile */ 00026 00027 #define REAL double /* float or double */ 00028 #define REALPRINT doubleprint 00029 #define REALRAND doublerand 00030 #define NARROWRAND narrowdoublerand 00031 #define UNIFORMRAND uniformdoublerand 00032 00033 00034 REAL orient2d(REAL * pa, 00035 REAL * pb, 00036 REAL * pc); 00037 REAL orient3d(REAL * pa, 00038 REAL * pb, 00039 REAL * pc, 00040 REAL * pd); 00041 REAL incircle(REAL * pa, 00042 REAL * pb, 00043 REAL * pc, 00044 REAL * pd); 00045 REAL insphere(REAL * pa, 00046 REAL * pb, 00047 REAL * pc, 00048 REAL * pd, 00049 REAL * pe); 00050 } 00051 00052 #endif