Exemple #1
0
  public double getT(Ray r, RenderObject o) {

    Matrix m = new Matrix();
    double[][] u = r.u3;
    double[][] ut = m.tMatrix(u);
    double[][] p = r.p0C.subtract(r.p0C, o.getOrigin()).toArray3D();
    double[][] pt = m.tMatrix(p);

    double[][] aa = m.multiplyMatrix(ut, u);
    double a = aa[0][0];

    double bb[][] = m.multiplyMatrix(ut, p);
    double b = bb[0][0] * 2;

    double cc[][] = m.multiplyMatrix(pt, p);
    double cee = cc[0][0] - (o.getRadius() * o.getRadius());
    double existance = (b * b) - (4 * a * cee);
    if (existance < 0) {
      return -1;
    } else {
      double t1 = ((-1 * b) + Math.sqrt(existance)) / (2 * a);
      double t2 = ((-1 * b) - Math.sqrt(existance)) / (2 * a);
      if (t1 < 0 && t2 < 0) {
        return -1;
      } else if (t1 < 0) {
        return t2;
      } else if (t2 < 0) {
        return t1;
      } else {
        return Math.min(t1, t2);
      }
    }
  }