blob: fa17c58adf9d4722b5346f3051d3f539caa2f9f0 (
plain) (
tree)
|
|
/*
* Camera.h
*
* Created on: Mar 31, 2011
* Author: jakob
*/
#ifndef CAMERA_H_
#define CAMERA_H_
#include <math.h>
#include "exception.h"
class Camera {
private:
double _x;
double _y;
double _z;
public:
Camera(double x, double y, double z): _x(x), _y(y), _z(z) {};
virtual ~Camera();
static double sign(double value) {return (value > 0) - (value < 0);}
static void toSpherical(double x, double y, double z, double& r, double&theta, double& phi) {
r = sqrt(x * x + y * y + z * z);
if (r == 0) {
theta = 0;
phi = 0;
return;
}
theta = acos(z / r);
if (x > 0) phi = atan(y / x);
else if (x == 0) phi = sign(y) * M_PI / 2;
else if (x < 0 && y >= 0) phi = atan(y / x) + M_PI;
else if (x < 0 && y < 0) phi = atan(y / x) - M_PI;
else throw vhc::Exception("This should not happen!");
}
static void toCarthesian(double r, double theta, double phi, double& x, double& y, double& z) {
x = r * sin(theta) * cos(phi);
y = r * sin(theta) * sin(phi);
z = r * cos(theta);
}
};
#endif /* CAMERA_H_ */
|