/**
*
*/
package ddddbb.math;
import ddddbb.comb.ACell;
public abstract class Camera4dCentral extends Camera4d {
protected final double scale; //distance of 3d projection space from eye
protected Camera4dCentral(Point4d initialEye, Point4d[] initialV, double _scale) {
super(initialEye,initialV);
scale = _scale;
}
public boolean facedBy(ACell oc) {
Point4d o = (Point4d)oc.o().clone().subtract(eye);
// if (o.sc(viewingDirection()) < Param.ERR) return false;
return oc.normal().sc(o,eye) >= AOP.ERR;
}
public boolean nproj3d(Point4d p4,Point3d res3) {
Point pd = p4.clone();
pd.subtract(eye);
res3.x[0] = v[0].sc(pd);
res3.x[1] = v[1].sc(pd);
res3.x[2] = v[2].sc(pd);
double d = v[3].sc(pd); //distance to eye
if ( d >= AOP.ERR ) {
res3.multiply(scale/d);
return true;
}
return false;
}
public Point4d viewingDirection() {
// assert v[3].isNormal();
// if (orientation > 0) {
return (Point4d)v[3];
// }
// Point4d vd = v[3].clone();
// vd.multiply(orientation);
// return vd;
}
}