class cRay { public: cVector start,dir; float distmult; cRay() { start = Vector::O; dir = Vector::Z; distmult=1.0f; } cRay(cVector &pstart, cVector &pdir, float dm) { setTo(pstart,pdir,dm); } void setTo(cVector &pstart, cVector &pdir, float dm) { start = pstart; dir = Vector::normalize(pdir); distmult = dm; } cRay copy() { return cRay(start.copy(),dir.copy(),distmult); } void toString() { printf("Ray from:\n"); start.toString(); printf("in the direction of:\n"); dir.toString(); } void transform(cTransform &trans) { start = Transform::transformed(trans,start,false); dir = Transform::transformed(trans,dir,true); float dirlength = dir.length(); distmult = distmult/dirlength; dir = Vector::scalar(dir,1.0f/dirlength); // (normalize) } cRay transformed(cTransform &trans) { cRay toreturn = copy(); toreturn.distmult = 1.0f; toreturn.transform(trans); return toreturn; } };