Skip to content

Commit

Permalink
Add individual GraphicsGems.c, .h, and GGVecLib.c files
Browse files Browse the repository at this point in the history
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
erich666 committed Jun 27, 2018
1 parent 646978b commit 1006600
Show file tree
Hide file tree
Showing 10 changed files with 2,673 additions and 0 deletions.
446 changes: 446 additions & 0 deletions gems/GGVecLib.c

Large diffs are not rendered by default.

157 changes: 157 additions & 0 deletions gems/GraphicsGems.h
@@ -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

0 comments on commit 1006600

Please sign in to comment.