@Override
public Point3dImpl transform(Matrix transform) {
if (transform.getRowDimension() == 4) {
double xt = transform.get(0, 0) * getX() + transform.get(0, 1) * getY() + transform.get(0, 2) * getZ()
+ transform.get(0, 3);
double yt = transform.get(1, 0) * getX() + transform.get(1, 1) * getY() + transform.get(1, 2) * getZ()
+ transform.get(1, 3);
double zt = transform.get(2, 0) * getX() + transform.get(2, 1) * getY() + transform.get(2, 2) * getZ()
+ transform.get(2, 3);
final double ft = transform.get(3, 0) * getX() + transform.get(3, 1) * getY() + transform.get(3, 2) * getZ()
+ transform.get(3, 3);
xt /= ft;
yt /= ft;
zt /= ft;
return new Point3dImpl(xt, yt, zt);
}
throw new IllegalArgumentException("Transform matrix has unexpected size");
}