#include "dxstdafx.h" #include "Radion.hpp" #include Radion::Radion(void) { } Radion::~Radion(void) { } double Radion::getFormFactorTo(const Radion& o) const { Vector diff = position - o.position; double dist2 = diff.norm2(); double cosa = o.normal * diff; // / dist double cosb = - (normal * diff); // / dist if(cosa < 0 || cosb < 0) return 0; return cosa * cosb / dist2 / dist2; } /*std::ostream& operator<<(std::ostream& s, const Radion& r) { s.write((char*)&r, sizeof(Radion)); return s; } std::istream& operator>>(std::istream& s, Radion& r) { s.read((char*)&r, sizeof(Radion)); return s; }*/ std::ostream& operator<<(std::ostream& s, const Radion& r) { s << "pos " << r.position.x << ' ' << r.position.y << ' ' << r.position.z << '\n'; s << "normal " << r.normal.x << ' ' << r.normal.y << ' ' << r.normal.z << '\n'; s << "prob " << r.radiance.sum() << '\n'; return s; } std::istream& operator>>(std::istream& s, Radion& r) { char k[128]; s >> k >> r.position.x >> r.position.y >> r.position.z; s >> k >> r.normal.x >> r.normal.y >> r.normal.z; s >> k >> r.radiance.x; r.radiance.y = r.radiance.z = 0.0; return s; }