#include "punkt3d.h" namespace segl { Punkt3D::Punkt3D() { x = y = z = 0.0f; } Punkt3D::Punkt3D(float _x, float _y, float _z) { set(_x, _y, _z); } void Punkt3D::set(float _x, float _y, float _z) { x = _x; y = _y; z = _z; } float Punkt3D::abs() { return sqrt(x*x+y*y+z*z); } Punkt3D Punkt3D::kreuzprodukt(const Punkt3D &b) { Punkt3D erg; erg.x = y*b.z - z*b.y; erg.y = z*b.x - x*b.z; erg.z = x*b.y - y*b.x; return erg; } void Punkt3D::normalize() { float a = abs(); x /= a; y /= a; z /= a; } Punkt3D Punkt3D::getNormalized() { Punkt3D ret(*this); ret.normalize(); return ret; } bool Punkt3D::isNormalized() { return (abs()==1); } float Punkt3D::calcAngle(Punkt3D b) { if(abs()*b.abs()==0.0f) return 0.0f; return rad2deg(std::acos(((*this)*b)/(abs()*b.abs()))); } Punkt3D Punkt3D::getOrtographic() { Punkt3D erg; if(!x) { erg.x = 0.0f; erg.y = z; erg.z = -y; } else if(!y) { erg.x = z; erg.y = 0; erg.z = -x; } else { // z, oder genereller fall erg.x = y; erg.y = -x; erg.z = 0.0f; } return erg; } Punkt3D Punkt3D::getOrtographic2() { Punkt3D nullvec; Punkt3D erg; erg.set(y, -x, 0.0f); if(erg!=nullvec) return erg; erg.set(z, 0.0f, -x); if(erg!=nullvec) return erg; erg.set(0.0f, z, -y); return erg; } void Punkt3D::print(std::string coordname) { if(coordname!="") coordname.append(" "); std::cout << coordname << "Coord: (" << x << ", " << y << ", " << z << ")" << std::endl; } Punkt3D Punkt3D::operator+(const Punkt3D &b) { Punkt3D c; c.x = x + b.x; c.y = y + b.y; c.z = z + b.z; return c; } Punkt3D Punkt3D::operator-(const Punkt3D &b) { Punkt3D c; c.x = x - b.x; c.y = y - b.y; c.z = z - b.z; return c; } Punkt3D& Punkt3D::operator+=(const Punkt3D &b) { x += b.x; y += b.y; z += b.z; return *this; } Punkt3D& Punkt3D::operator-=(const Punkt3D &b) { x -= b.x; y -= b.y; z -= b.z; return *this; } Punkt3D Punkt3D::operator+(const float &_m) { return Punkt3D(x+_m, y+_m, z+_m); } Punkt3D Punkt3D::operator-(const float &_m) { return Punkt3D(x-_m, y-_m, z-_m); } Punkt3D Punkt3D::operator*(const float &_m) { return Punkt3D(x*_m, y*_m, z*_m); } Punkt3D Punkt3D::operator/(const float &_m) { return Punkt3D(x/_m, y/_m, z/_m); } Punkt3D& Punkt3D::operator+=(const float &_m) { x += _m; y += _m; z += _m; return *this; } Punkt3D& Punkt3D::operator-=(const float &_m) { x -= _m; y -= _m; z -= _m; return *this; } Punkt3D& Punkt3D::operator*=(const float &_m) { x *= _m; y *= _m; z *= _m; return *this; } Punkt3D& Punkt3D::operator/=(const float &_m) { x /= _m; y /= _m; z /= _m; return *this; } float Punkt3D::operator*(const Punkt3D& _m) { return x * _m.x + y * _m.y + z * _m.z; } Punkt3D Punkt3D::operator-() { return Punkt3D(-x, -y, -z); } bool Punkt3D::operator==(const Punkt3D& b) { return ( x==b.x && y==b.y && z==b.z); } bool Punkt3D::operator!=(const Punkt3D& b) { return !(*this==b); } // Freunde segl::Punkt3D operator+(const float& _m, const segl::Punkt3D& b) { return segl::Punkt3D(b.x+_m, b.y+_m, b.z+_m); } segl::Punkt3D operator-(const float& _m, const segl::Punkt3D& b) { return segl::Punkt3D(b.x-_m, b.y-_m, b.z-_m); } segl::Punkt3D operator*(const float& _m, const segl::Punkt3D& b) { return segl::Punkt3D(b.x*_m, b.y*_m, b.z*_m); } segl::Punkt3D operator/(const float& _m, const segl::Punkt3D& b) { return segl::Punkt3D(b.x/_m, b.y/_m, b.z/_m); } std::ostream &operator<<(std::ostream &ostr, const segl::Punkt3D &r) { return ostr << "(" << r.x << ", " << r.y << ", " << r.z << ")"; } } // namespace segl float abs(segl::Punkt3D p) { return p.abs(); } // OpenGL Funktionen f�r Punkt3D void glVertex3f(segl::Punkt3D p) { glVertex3f(p.x, p.y, p.z); } void glTranslatef(segl::Punkt3D p) { glTranslatef(p.x, p.y, p.z); } void glNormal3f(segl::Punkt3D p) { glNormal3f(p.x, p.y, p.z); } void glRotatef(float deg, segl::Punkt3D vec) { glRotatef(deg, vec.x, vec.y, vec.z); } // Funktionen mit richtgen bezeichnern void glVertexP3D(segl::Punkt3D p) { glVertex3f(p.x, p.y, p.z); } void glTranslateP3D(segl::Punkt3D p) { glTranslatef(p.x, p.y, p.z); } void glNormalP3D(segl::Punkt3D p) { glNormal3f(p.x, p.y, p.z); } void glRotateP3D(float deg, segl::Punkt3D vec) { glRotatef(deg, vec.x, vec.y, vec.z); } void gluLookAt(segl::Punkt3D pos, segl::Punkt3D viewport, segl::Punkt3D normal) { gluLookAt( pos.x, pos.y, pos.z, viewport.x, viewport.y, viewport.z, normal.x, normal.y, normal.z ); }