sources:
BOX.CPP (3.1k)
BOX.H (507 bytes)
RAY.CPP (609 bytes)
RAY.H (604 bytes)
SPHERE.CPP (1.9k)
SPHERE.H (564 bytes)
TRIANGLE.CPP (2.1k)
TRIANGLE.H (1.2k)
UTIL.H (1.7k)
VECTOR.CPP (1.6k)
VECTOR.H (5.0k)
cgapplication.cpp (3.2k)
cgapplication.h (3.5k)
cgraytracer.cpp (18.8k)
cgraytracer.h (1.6k)
shape.h (754 bytes)


binaries:
Release/raytracer.exe (38.0k)


website:
more info here


screenshot:
studies/grafik2/Computergrafik-Code6/Aufgabe17/VECTOR.CPP
download file

  1 #include "vector.h"
  2 #include <math.h>
  3 #include <string.h>
  4
  5 bool Vector::operator<(const Vector& u) const {
  6     return((v_[0]<u.v_[0]) ||
  7            (v_[0]==u.v_[0] && v_[1]<u.v_[1]) ||
  8            (v_[0]==u.v_[0] && v_[1]==u.v_[1] && v_[2]<u.v_[2])
  9     )
;
 10 }
 11
 12 Vector& Vector::operator*=(const Vector& u) { // cross product
 13     double x = v_[0];
 14     double y = v_[1];
 15     double z = v_[2];
 16     v_[0] = y*u.v_[2] - z*u.v_[1];
 17     v_[1] = z*u.v_[0] - x*u.v_[2];
 18     v_[2] = x*u.v_[1] - y*u.v_[0];
 19     return *this;
 20 }
 21
 22 Vector Vector::normalized() const {
 23     double L = sqrt(v_[0]*v_[0] + v_[1]*v_[1] + v_[2]*v_[2]);
 24     if(fabs(L) == 0.0) {
 25         return Vector(0,0,0);
 26     } else {
 27         return Vector(v_[0]/L, v_[1]/L, v_[2]/L);
 28     }
 29 }
 30
 31 bool Vector::normalize() {
 32     double L = sqrt(v_[0]*v_[0] + v_[1]*v_[1] + v_[2]*v_[2]);
 33     if(fabs(L) == 0.0) {
 34         return false;
 35     } else {
 36         v_[0] /= L;
 37         v_[1] /= L;
 38         v_[2] /= L;
 39         return true;
 40     }
 41 }
 42
 43 //
 44 // IO
 45 //
 46
 47 ostream& operator<<(ostream& s, const Vector& u) {
 48     s << "(" << u[0] << "," << u[1] << "," << u[2] << ")";
 49     return s;
 50 }
 51
 52 istream& operator>>(istream& s, Vector& u) {
 53     char ch;
 54
 55     s >> ch;
 56     if(ch!='(') { s.clear(ios::badbit); return s; }
 57
 58     s >> u[0];
 59     if(!s.good()) { return s; }
 60
 61     s >> ch;
 62     if(ch!=',') { s.clear(ios::badbit); return s; }
 63
 64     s >> u[1];
 65     if(!s.good()) { return s; }
 66
 67     s >> ch;
 68     if(ch!=',') { s.clear(ios::badbit); return s; }
 69
 70     s >> u[2];
 71     if(!s.good()) { return s; }
 72
 73     s >> ch;
 74     if(ch!=')') { s.clear(ios::badbit); return s; }
 75
 76     return s;
 77 }
 78