CodeArchive Geometry3D

From Ubcacm
Jump to: navigation, search

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