CodeArchive Geometry3D
From Ubcacm
Some basic stuff, more to be added.
typedef long double ld; struct p3d{ ld x, y, z; p3d(ld xx = 0, ld yy = 0, ld zz = 0) { x = xx, y = yy, z = zz; } }; inline ld abs(const p3d &v){ return sqrt(v.x*v.x + v.y*v.y + v.z*v.z); } inline ostream &operator<<(ostream &os, const p3d &p){ return os << "(" << p.x << "," << p.y << "," << p.z << ")"; } inline p3d operator+(const p3d &a, const p3d &b){ return p3d(a.x + b.x, a.y + b.y, a.z + b.z); } inline p3d operator-(const p3d &a, const p3d &b){ return p3d(a.x - b.x, a.y - b.y, a.z - b.z); } inline p3d operator*(const ld &s, const p3d &v){ return p3d(s*v.x, s*v.y, s*v.z); } inline ld dot(const p3d &a, const p3d &b){ return a.x*b.x + a.y*b.y + a.z*b.z; } inline p3d cross(const p3d &a, const p3d &b){ return p3d(a.y*b.z - a.z*b.y, a.z*b.x - a.x*b.z, a.x*b.y - a.y*b.x); } // plane/line intersection. p - point on plane, n - normal, a1 -> a2 : line inline p3d pl_inter(const p3d &p, const p3d &n, const p3d &a1, const p3d &a2){ return a1 + dot(p - a1, n)/dot(n, a2 - a1)*(a2 - a1); }
-- Main.YuryKholondyrev - 09 Feb 2006