First commit...

This commit is contained in:
Paolo Cignoni 2004-02-06 02:17:09 +00:00
parent 1c171b9c7d
commit 23653c6752
2 changed files with 119 additions and 89 deletions

113
vcg/math/Base.h Normal file
View File

@ -0,0 +1,113 @@
/*****************************************************************************
* VCGLib *
* *
* Visual Computing Group o> *
* IEI Institute, CNUCE Institute, CNR Pisa <| *
* / \ *
* Copyright(C) 1999 by Paolo Cignoni, Claudio Rocchini *
* All rights reserved. *
* *
* Permission to use, copy, modify, distribute and sell this software and *
* its documentation for any purpose is hereby granted without fee, provided *
* that the above copyright notice appear in all copies and that both that *
* copyright notice and this permission notice appear in supporting *
* documentation. the author makes no representations about the suitability *
* of this software for any purpose. It is provided "as is" without express *
* or implied warranty. *
* *
*****************************************************************************/
/****************************************************************************
History
1999 Feb 02 First Draft.
1999 May 15 Corrected Scope of sqrt.. (added ::)
2000 Jan 26 inserito include condizionale
corretto Distance() e init()
Jan 28 aggiunti Sin e Cos (per quaternion!) (con assert se uno li usa con int!)
Jun 26 Aggiunto Gauss33 (prima stava in lfield3)
Nota: era stato scritto con Fabs invece di Abs....
Jun 30 Aggiunto TRACE e Definizione M_PI
Jul 4 aggiunto un cast a FL_TYPE in Gauss33;
5 Tolti i parametri inutili (warning 4100)
6 Aggiunto include assert.h
2001 Jul 17 TRACE Release compilabile in unix (CR)
2002 Jan 17 Aggiunte conversioni Radianti in Gradi
Feb 27 Aggiunto tipo per Generica funzione di Callback
Jul 28 Aggiunta seconda callback (utile per progress bar) (pc)
2003 Jan 09 Aggiunta Clamp (pc)
2003 Jan 17 Aggiunta MaxVal (mt)
Sep 10 [BCB] Ridefinite sqrtf e fabsf per C++ Builder
19 Aggiunto suffisso 'u' per evitare un warning (pc)
****************************************************************************/
#ifndef __VCGLIB_MATH_BASE
#define __VCGLIB_MATH_BASE
#include <math.h>
#include <assert.h>
#ifdef __BORLANDC__
float sqrtf (float v) {return sqrt(v);}
float fabsf (float v) {return fabs(v);}
#endif
namespace vcg {
template<class T> class Math
{
public:
static T inline Sqrt(const T v);
static T inline Abs(const T v);
static const T MaxVal;
static T ToDeg(const T a);
static T ToRad(const T a);
};
T Math<float>::Sqrt(const float v)
{ return sqrtf(v); }
T Math<float>::Abs(const float v)
{ return fabsf(v); }
T Math<double>::Sqrt(const double v)
{ return sqrt(v); }
T Math<double>::Abs(const double v)
{ return fabs(v); }
const unsigned char Math<unsigned char >::MaxVal = 255;
const short Math<short >::MaxVal = 127;
const unsigned short Math<unsigned short >::MaxVal = 0xFFFFu;
const short Math<short >::MaxVal = 0x7FFF;
const float Math<float >::MaxVal = 3.4E38F;
const int Math<int >::MaxVal = 2147483647;
const long double Math<long double >::MaxVal = 1.2E308;
const double Math<double >::MaxVal = 1.7E308;
const __int64 Math<__int64 >::MaxVal = 9223372036854775807;
/* Some <math.h> files do not define M_PI... */
#ifndef M_PI
#define M_PI 3.14159265358979323846
#endif
template <class SCALAR>
inline SCALAR Clamp( const SCALAR & val, const SCALAR& minval, const SCALAR& maxval)
{
if(val < minval) return minval;
if(val > maxval) return maxval;
return val;
}
inline float ToDeg(const float &a){return a*180.0f/float(M_PI);}
inline float ToRad(const float &a){return float(M_PI)*a/180.0f;}
inline double ToDeg(const double &a){return a*180.0/M_PI;}
inline double ToRad(const double &a){return M_PI*a/180.0;}
} // End namespace
#endif

View File

@ -18,59 +18,9 @@
*****************************************************************************/
/*#**************************************************************************
History
$Id: point3.h,v 1.2 2004-02-06 02:17:09 cignoni Exp $
$Log: not supported by cvs2svn $
1999 Feb 02 First Draft.
Mar 15 First Working release
Jul 10 Reindented and reformatted
Fixed != bug
Fixed Eq bug
Dec 21 Added Quality and Normal
Tolti ;
Corretto Distance
corretta inclusione utility
2000 Jan 26 inserito include condizionale
corretto Distance() e init()
Jan 28 tolti vcg_ dalle funzioni di utility
Jan 30 Aggiunti funzioni di accesso x,y,z const.
Feb 15 Corretta SquaredDistance(Point3,Point3)
Mar 29 Corretta Scale
May 09 Aggiunto operatore cast
Jun 9 Corretto Normal(p0,p1,p2) (forniva la normale opposta!)
Jun 26 Corretto il nome del costrutture da Point3_FT -> Point3
(syntax error per il gcc)
Aggiunta compilazione condizionale per l'operatore cast
30 Corretto Quality nel caso degenere tre punti coincidenti;
Jul 04 Aggiunto ^=
19 Aggiunta funzione PSDist (distanza segmento punto)
Sep 7 Modificata Quality, ora e' piu' veloce.
Nov 13 Corretto angle
20 Spostato Point3nt in un file a parte
Dec 12 Aggiunto AngleN (pc)
19 Ricorretto Angle (not a number per normali opposte);
2001 Jan 15 Corretto Angle, c'era un errore di sintassi...
Feb 16 Aggiunto Scale (cr,pc)
Aggiunto temporaneo print di punti (cr)
Cambiato per uniformita Norm2 -> SquaredNorm;
messo le print di punti sotto if defined FILE
May 21 Aggiunto polar
Aggiunto Zero
Jun 22 Aggiunta funzione import
Jul 09 Aggiunta Ext
Sep 19 Import diventa un membro
Nov 15 Aggiunta funzione stable_dot: prodotto scalare corretto num. (CR)
Dec 10 Deprecate alcune funzioni (CR)
- unario membro (CR)
v privato!!! (CR) aggiunta funzione V()
Dec 12 Aggiunta sotto ifdef l'inclusione della versione assembler p4 (inusabile!)(pc)
19 Reso v protected invece che private; (pc);
2002 Mar 6 CORRETTA NORMAL(). faceva sempre la normalizzazione. ora non la fa piu' e
aggiunta la NormalizedNormal();
7 Aggiunta Jitter
2003 Sep 10 [BCB] Aggiunti gli specificatori di template (<T>)
Sep 30 Spostata la definizione delle funioni di mapping vcg->opengl (glVertex()..)
cosiche' Point3d non debba essere incluso la prima volta dopo opengl
****************************************************************************/
#pragma once
@ -85,6 +35,9 @@
namespace vcg {
/** The class for representing a 3D point
* More details about this class.
*/
template <class T> class Point3
{
@ -120,7 +73,7 @@ public:
_v[0]= p._v[0]; _v[1]= p._v[1]; _v[2]= p._v[2];
return *this;
}
inline void Zero()
inline void zero()
{
_v[0] = 0;
_v[1] = 0;
@ -190,19 +143,6 @@ public:
);
}
/* Deprecato ???
// Operatori di modifica
inline Point3 & operator ^= ( Point3 const & p )
{
T t0 = _v[0];
T t1 = _v[1];
_v[0] = _v[1]*p._v[2] - _v[2]*p._v[1];
_v[1] = _v[2]*p._v[0] - t0 *p._v[2];
_v[2] = t0 *p._v[1] - t1 *p._v[0];
return *this;
}
*/
inline Point3 & operator += ( Point3 const & p)
{
_v[0] += p._v[0];
@ -519,26 +459,3 @@ typedef Point3<double> Point3d;
} // end namespace
#endif
#ifdef __GL_H__
#ifndef __VCG_GL__
#define __VCG_GL__
namespace vcg{
inline void glVertex(Point3<int> const & p) { glVertex3iv(p.V());}
inline void glVertex(Point3<short> const & p) { glVertex3sv(p.V());}
inline void glVertex(Point3<float> const & p) { glVertex3fv(p.V());}
inline void glVertex(Point3<double> const & p){ glVertex3dv(p.V());}
inline void glNormal(Point3<int> const & p) { glNormal3iv(p.V());}
inline void glNormal(Point3<short> const & p) { glNormal3sv(p.V());}
inline void glNormal(Point3<float> const & p) { glNormal3fv(p.V());}
inline void glNormal(Point3<double> const & p){ glNormal3dv(p.V());}
inline void glTexCoord(Point3<int> const & p) { glTexCoord3iv(p.V());}
inline void glTexCoord(Point3<short> const & p) { glTexCoord3sv(p.V());}
inline void glTexCoord(Point3<float> const & p) { glTexCoord3fv(p.V());}
inline void glTexCoord(Point3<double> const & p){ glTexCoord3dv(p.V());}
inline void glTranslate(Point3<float> const & p) { glTranslatef(p.x(),p.y(),p.z());}
inline void glTranslate(Point3<double> const & p){ glTranslated(p.x(),p.y(),p.z());}
inline void glScale(Point3<float> const & p) { glScalef(p.x(),p.y(),p.z());}
inline void glScale(Point3<double> const & p){ glScaled(p.x(),p.y(),p.z());}
}
#endif
#endif