Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add individual GraphicsGems.c, .h, and GGVecLib.c files
Having just one set of these at the root directory is nice, but names and signatures vary. Also, the various authors.html files do not point at the root, maintained file.
- Loading branch information
Showing
10 changed files
with
2,673 additions
and
0 deletions.
There are no files selected for viewing
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,157 @@ | ||
/* | ||
* GraphicsGems.h | ||
* Version 1.0 - Andrew Glassner | ||
* from "Graphics Gems", Academic Press, 1990 | ||
*/ | ||
|
||
#ifndef GG_H | ||
|
||
#define GG_H 1 | ||
|
||
/*********************/ | ||
/* 2d geometry types */ | ||
/*********************/ | ||
|
||
typedef struct Point2Struct { /* 2d point */ | ||
double x, y; | ||
} Point2; | ||
typedef Point2 Vector2; | ||
|
||
typedef struct IntPoint2Struct { /* 2d integer point */ | ||
int x, y; | ||
} IntPoint2; | ||
|
||
typedef struct Matrix3Struct { /* 3-by-3 matrix */ | ||
double element[3][3]; | ||
} Matrix3; | ||
|
||
typedef struct Box2dStruct { /* 2d box */ | ||
Point2 min, max; | ||
} Box2; | ||
|
||
|
||
/*********************/ | ||
/* 3d geometry types */ | ||
/*********************/ | ||
|
||
typedef struct Point3Struct { /* 3d point */ | ||
double x, y, z; | ||
} Point3; | ||
typedef Point3 Vector3; | ||
|
||
typedef struct IntPoint3Struct { /* 3d integer point */ | ||
int x, y, z; | ||
} IntPoint3; | ||
|
||
|
||
typedef struct Matrix4Struct { /* 4-by-4 matrix */ | ||
double element[4][4]; | ||
} Matrix4; | ||
|
||
typedef struct Box3dStruct { /* 3d box */ | ||
Point3 min, max; | ||
} Box3; | ||
|
||
|
||
|
||
/***********************/ | ||
/* one-argument macros */ | ||
/***********************/ | ||
|
||
/* absolute value of a */ | ||
#define ABS(a) (((a)<0) ? -(a) : (a)) | ||
|
||
/* round a to nearest int */ | ||
#define ROUND(a) ((a)>0 ? (int)((a)+0.5) : -(int)(0.5-(a))) | ||
|
||
/* take sign of a, either -1, 0, or 1 */ | ||
#define ZSGN(a) (((a)<0) ? -1 : (a)>0 ? 1 : 0) | ||
|
||
/* take binary sign of a, either -1, or 1 if >= 0 */ | ||
#define SGN(a) (((a)<0) ? -1 : 1) | ||
|
||
/* shout if something that should be true isn't */ | ||
#define ASSERT(x) \ | ||
if (!(x)) fprintf(stderr," Assert failed: x\n"); | ||
|
||
/* square a */ | ||
#define SQR(a) ((a)*(a)) | ||
|
||
|
||
/***********************/ | ||
/* two-argument macros */ | ||
/***********************/ | ||
|
||
/* find minimum of a and b */ | ||
#define MIN(a,b) (((a)<(b))?(a):(b)) | ||
|
||
/* find maximum of a and b */ | ||
#define MAX(a,b) (((a)>(b))?(a):(b)) | ||
|
||
/* swap a and b (see Gem by Wyvill) */ | ||
#define SWAP(a,b) { a^=b; b^=a; a^=b; } | ||
|
||
/* linear interpolation from l (when a=0) to h (when a=1)*/ | ||
/* (equal to (a*h)+((1-a)*l) */ | ||
#define LERP(a,l,h) ((l)+(((h)-(l))*(a))) | ||
|
||
/* clamp the input to the specified range */ | ||
#define CLAMP(v,l,h) ((v)<(l) ? (l) : (v) > (h) ? (h) : v) | ||
|
||
|
||
/****************************/ | ||
/* memory allocation macros */ | ||
/****************************/ | ||
|
||
/* create a new instance of a structure (see Gem by Hultquist) */ | ||
#define NEWSTRUCT(x) (struct x *)(malloc((unsigned)sizeof(struct x))) | ||
|
||
/* create a new instance of a type */ | ||
#define NEWTYPE(x) (x *)(malloc((unsigned)sizeof(x))) | ||
|
||
|
||
/********************/ | ||
/* useful constants */ | ||
/********************/ | ||
|
||
#define PI 3.141592 /* the venerable pi */ | ||
#define PITIMES2 6.283185 /* 2 * pi */ | ||
#define PIOVER2 1.570796 /* pi / 2 */ | ||
#define E 2.718282 /* the venerable e */ | ||
#define SQRT2 1.414214 /* sqrt(2) */ | ||
#define SQRT3 1.732051 /* sqrt(3) */ | ||
#define GOLDEN 1.618034 /* the golden ratio */ | ||
#define DTOR 0.017453 /* convert degrees to radians */ | ||
#define RTOD 57.29578 /* convert radians to degrees */ | ||
|
||
|
||
/************/ | ||
/* booleans */ | ||
/************/ | ||
|
||
#define TRUE 1 | ||
#define FALSE 0 | ||
#define ON 1 | ||
#define OFF 0 | ||
typedef int boolean; /* boolean data type */ | ||
typedef boolean flag; /* flag data type */ | ||
|
||
extern double V2SquaredLength(), V2Length(); | ||
extern double V2Dot(), V2DistanceBetween2Points(); | ||
extern Vector2 *V2Negate(), *V2Normalize(), *V2Scale(), *V2Add(), *V2Sub(); | ||
extern Vector2 *V2Lerp(), *V2Combine(), *V2Mul(), *V2MakePerpendicular(); | ||
extern Vector2 *V2New(), *V2Duplicate(); | ||
extern Point2 *V2MulPointByMatrix(); | ||
extern Matrix3 *V2MatMul(); | ||
|
||
extern double V3SquaredLength(), V3Length(); | ||
extern double V3Dot(), V3DistanceBetween2Points(); | ||
extern Vector3 *V3Normalize(), *V3Scale(), *V3Add(), *V3Sub(); | ||
extern Vector3 *V3Lerp(), *V3Combine(), *V3Mul(), *V3Cross(); | ||
extern Vector3 *V3New(), *V3Duplicate(); | ||
extern Point3 *V3MulPointByMatrix(); | ||
extern Matrix4 *V3MatMul(); | ||
|
||
extern double RegulaFalsi(), NewtonRaphson(), findroot(); | ||
|
||
#endif |
Oops, something went wrong.