Package ca.eandb.jmist.math

Examples of ca.eandb.jmist.math.SphericalCoordinates


  /* (non-Javadoc)
   * @see ca.eandb.jmist.framework.material.support.IsotropicMicrofacetModel#sample(double, double)
   */
  @Override
  public SphericalCoordinates sample(double ru, double rv) {
    return new SphericalCoordinates(
        Math.atan(Math.sqrt(-alpha * alpha * Math.log(1.0 - ru))),
        2.0 * Math.PI * rv);
  }
View Full Code Here


  /* (non-Javadoc)
   * @see ca.eandb.jmist.framework.material.support.IsotropicMicrofacetModel#sample(double, double)
   */
  @Override
  public SphericalCoordinates sample(double ru, double rv) {
    return new SphericalCoordinates(Math.atan(alpha
        * Math.sqrt(ru / (1.0 - ru))), 2.0 * Math.PI * rv);
  }
View Full Code Here

      double sigma2 = oblateness * oblateness;
      double sigma4 = sigma2 * sigma2;
      Vector3 out;
      double theta = Math.acos(Math.sqrt(((sigma2 / Math.sqrt(sigma4 + (1.0 - sigma4) * ru)) - 1.0) / (sigma2 - 1.0)));
      double phi = 2.0 * Math.PI * rv;
      SphericalCoordinates sc = new SphericalCoordinates(theta, phi);
      Vector3 microN = sc.toCartesian(basis);
      out = Optics.reflect(v, microN);
      if (out.dot(N) <= 0.0) {
        return null;
      }
      return ScatteredRay.diffuse(new Ray3(x.getPosition(), out), lambda.getColorModel().getWhite(lambda), 1.0);
View Full Code Here

    do {
      int j = (int) Math.floor(rnd.next() * (double) lut.length);
      double theta = lut[j];
      double phi = 2.0 * Math.PI * rnd.next();
      SphericalCoordinates sc = new SphericalCoordinates(theta, phi);
      v = sc.toCartesian(basis);
      outDir = (v.dot(N) < 0.0);
    } while (inDir != outDir);

    return ScatteredRay.diffuse(new Ray3(x.getPosition(), v), lambda.getColorModel().getWhite(lambda), 1.0);
  }
View Full Code Here

      int j = (int) Math.floor(rnd.next() * (double) lut0.length);
      double theta = (lut1 != null)
          ? MathUtil.interpolate(lut0[j], lut1[j], t)
          : lut0[j];
      double phi = 2.0 * Math.PI * rnd.next();
      SphericalCoordinates sc = new SphericalCoordinates(theta, phi);
      v = sc.toCartesian(basis);
      outDir = (v.dot(N) < 0.0);
    } while (inDir != outDir);

    return v;
  }
View Full Code Here

      double sigma2 = oblateness * oblateness;
      double sigma4 = sigma2 * sigma2;
      Vector3 out;
      double theta = Math.acos(Math.sqrt(((sigma2 / Math.sqrt(sigma4 + (1.0 - sigma4) * rnd.next())) - 1.0) / (sigma2 - 1.0)));
      double phi = 2.0 * Math.PI * rnd.next();
      SphericalCoordinates sc = new SphericalCoordinates(theta, phi);
      Vector3 microN = sc.toCartesian(basis);
      out = Optics.reflect(v, microN);
      if (out.dot(N) <= 0.0) {
        return null;
      }
      return out;
View Full Code Here

    for (int specimenIndex = 0, n = 0; specimenIndex < this.specimens.length; specimenIndex++) {

      for (int incidentAngleIndex = 0; incidentAngleIndex < this.incidentAngles.length; incidentAngleIndex++) {

        SphericalCoordinates      incidentAngle      = this.incidentAngles[incidentAngleIndex];

        for (int wavelengthIndex = 0; wavelengthIndex < this.wavelengths.length; wavelengthIndex++, n++) {

          WavelengthPacket      wavelength        = this.wavelengths[wavelengthIndex];
          ColorSensorArray      sensorArray        = this.results[n];

          for (int sensor = 0; sensor < worker.collector.sensors(); sensor++) {

            SphericalCoordinates  exitantAngle      = worker.collector.getSensorCenter(sensor);
            double          solidAngle        = worker.collector.getSensorSolidAngle(sensor);
            double          projectedSolidAngle    = worker.collector.getSensorProjectedSolidAngle(sensor);
            Color          raw            = sensorArray.getTotalWeight(sensor);
            Color          reflectance        = raw.divide(this.outstandingSamplesPerMeasurement);

            out.printf(
                "%d,%f,%f,%d,%d,%f,%f,%f,%f,%d,%s,%s,%s,%s",
                specimenIndex,
                incidentAngle.polar(),
                incidentAngle.azimuthal(),
                wavelengthIndex,
                sensor,
                exitantAngle.polar(),
                exitantAngle.azimuthal(),
                solidAngle,
                projectedSolidAngle,
                this.outstandingSamplesPerMeasurement,
                colorToCSV(raw),
                colorToCSV(reflectance),
View Full Code Here

      Vector3 out = RandomUtil.diffuse(ru, rv).toCartesian(x.getBasis());
      Ray3 ray = new Ray3(x.getPosition(), out);
      return ScatteredRay.diffuse(ray, kd.divide(rhod), getScatteringPDF(x, v, out, adjoint, lambda));
    } else if (rj < rhod + rhos) {
      Vector3 r = Optics.reflect(v, x.getNormal());
      Vector3 out = new SphericalCoordinates(Math.acos(Math.pow(ru, 1.0 / (n + 1.0))), 2.0 * Math.PI * rv).toCartesian(Basis3.fromW(r));
      double ndoto = x.getNormal().dot(out);
      Color weight = ks.times(((n + 2.0) / (n + 1.0)) * Math.abs(ndoto) / rhos);
      //double rdoto = r.dot(out);
      double pdf = getScatteringPDF(x, v, out, adjoint, lambda);//rhod / Math.PI + rhos * (Math.pow(rdoto, n) / ndoto) * (n + 1.0) / (2.0 * Math.PI);
      Ray3 ray = new Ray3(x.getPosition(), out);
View Full Code Here

    }

    if (!Double.isInfinite(specularity)) {
      Basis3 basis = Basis3.fromW(w);
      do {
        SphericalCoordinates perturb = new SphericalCoordinates(
            Math.acos(Math.pow(1.0 - rnd.next(), 1.0 / (specularity + 1.0))),
            2.0 * Math.PI * rnd.next());
        w = perturb.toCartesian(basis);
      } while ((w.dot(N) > 0.0) != toSide);
    }

    return w;
  }
View Full Code Here

  public static SphericalCoordinates diffuse(double ru, double rv) {

    assert(0.0 <= ru && ru <= 1.0);
    assert(0.0 <= rv && rv <= 1.0);

    return new SphericalCoordinates(
        Math.acos(Math.sqrt(1.0 - ru)),
        2.0 * Math.PI * rv
    );

  }
View Full Code Here

TOP

Related Classes of ca.eandb.jmist.math.SphericalCoordinates

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.