Module raytracer

Class CollectorW3d

All Implemented Interfaces:
Collector, Spectrum, DoubleToDouble, Serializable, Cloneable

public class CollectorW3d extends Spectrum3d implements Collector, Serializable
This class stores some useful information about incoming rays of an corresponding object, which has received a certain ray. This class extended all properties of Spectrum3d. It means that this Collector is also a Spectrum. This is an implementation for calculation statics of the West Algorithm. For more information see {@link http://doi.acm.org/10.1145/359146.359152}. To calculate the elements of statistic: Q = X - M
R = Q/rayCount
M = M + R
T = T +(rayCount - 1) * Q * R
Author:
Stephan Rogge
See Also:
  • Field Details

    • rayCount

      protected long rayCount
    • asCollector

      protected boolean asCollector
    • TDirectionX

      protected double TDirectionX
    • TDirectionY

      protected double TDirectionY
    • TDirectionZ

      protected double TDirectionZ
    • MDirectionX

      protected double MDirectionX
    • MDirectionY

      protected double MDirectionY
    • MDirectionZ

      protected double MDirectionZ
    • TSpectrumX

      protected double TSpectrumX
    • TSpectrumY

      protected double TSpectrumY
    • TSpectrumZ

      protected double TSpectrumZ
    • MSpectrumX

      protected double MSpectrumX
    • MSpectrumY

      protected double MSpectrumY
    • MSpectrumZ

      protected double MSpectrumZ
  • Constructor Details

    • CollectorW3d

      public CollectorW3d()
      Just a new instance of this class.
    • CollectorW3d

      public CollectorW3d(double x, double y, double z)
      This constructor creates a Collector-instance with a certain Spectrum.
      Parameters:
      x - Red-component of Spectrum3d
      y - Green-component of Spectrum3d
      z - Blue-component of Spectrum3d
    • CollectorW3d

      public CollectorW3d(Spectrum spectrum)
      This constructor creates a Collector-instance with a certain Spectrum.
      Parameters:
      spectrum - Spectrum, which is used by the LightModel
  • Method Details

    • newInstance

      public Collector3d newInstance()
      Returns a new instance of this class.
      Specified by:
      newInstance in interface Collector
      Specified by:
      newInstance in interface Spectrum
      Overrides:
      newInstance in class Spectrum3d
      Returns:
      new instance of same class
    • setAsCollector

      public void setAsCollector()
      The initial value of asCollector is false. It means that the collector works like a Spectrum. Thats useful when this Collector-instance is used for the calculations in LightModel.
      Specified by:
      setAsCollector in interface Collector
    • isCollector

      public boolean isCollector()
      If the collector should works like a Spectrum, this method returns false, otherwise true.
      Specified by:
      isCollector in interface Collector
      Returns:
    • add

      public void add(Spectrum spectrum)
      Add the newSpectrum to the spectrum of this Collector-instance and update the statistics.
      Specified by:
      add in interface Spectrum
      Overrides:
      add in class Spectrum3d
      Parameters:
      newSpectrum - New to added spectrum.
    • addToStatistic

      public void addToStatistic(Tuple3d rayOrigin, Spectrum spectrum, double scaleFactor, boolean isPrimary)
      Description copied from interface: Collector
      Here the information of LightModel computation are stored.
      Specified by:
      addToStatistic in interface Collector
      Parameters:
      rayOrigin - May this contains a certain vector (direction for example).
      spectrum - To added Spectrum.
      scaleFactor - For the added Spectrum.
      isPrimary - To distinguish from primary or secondary rays.
    • addToStatistic

      public void addToStatistic(Tuple3d rayOrigin, Spectrum3d spectrum, double scaleFactor, boolean isPrimary)
      Add the Vector of the origin of a certain ray, which hits the object for this corresponding Collector-instance. Notice: The direction and the weight of the direction doesn't depends on the absorbed power but on the intensity of the incoming ray.
      Parameters:
      rayOrigin - Where the light comes from.
      scale - The factor for weighting this direction (usually intensity of incoming light)
    • getSpectrumVariance

      public void getSpectrumVariance(Spectrum spectrum)
      This methods returns the variance of the spectrums. The calculation for this is: sigma^2 = 1/N * ((sum of all spectra^2) - (N * x^2)) N ... The number of rays x ... The arithmetic mean of all direction To get the standard deviation, just extract the root of the variance. For more information see .
      Specified by:
      getSpectrumVariance in interface Collector
    • getDirectionVariance

      public void getDirectionVariance(Tuple3d tuple)
      This methods returns the variance of the light-direction (not normalized). The calculation for this is: sigma^2 = 1/N * ((sum of all directions^2) - (N * x^2)) N ... The number of rays x ... The arithmetic mean of all direction To get the standard deviation, just extract the root of the variance. For more information see .
      Specified by:
      getDirectionVariance in interface Collector
    • getDirectionVariance

      public void getDirectionVariance(Tuple3f tuple)
    • getDirectionArithmeticMean

      public void getDirectionArithmeticMean(Tuple3d tuple)
      Set the arithmetic mean of all directions (not normalized) to vector. The parameter vector should be initialized before.
      Specified by:
      getDirectionArithmeticMean in interface Collector
      Parameters:
      vector - Returns the arithmetic mean of all direction for this Collector-instance.
    • getDirectionArithmeticMean

      public void getDirectionArithmeticMean(Tuple3f tuple)
    • getSpectrumArithmeticMean

      public void getSpectrumArithmeticMean(Spectrum spectrum)
      Set the arithmetic mean of all spectra to spectrum. The parameter spectrum should be initialized before.
      Specified by:
      getSpectrumArithmeticMean in interface Collector
      Parameters:
      spectrum - Returns the arithmetic mean of all spectra for this Collector-instance.
    • getRayCount

      public long getRayCount()
      Returns the number of rays which hit the corresponding object of this instance.
      Specified by:
      getRayCount in interface Collector
      Returns:
      Number of rays.
    • setZero

      public void setZero()
      Sets all values the instance to zero. Useful when the instance is still used as container for information/ results of the LightModel computation.
      Specified by:
      setZero in interface Spectrum
      Overrides:
      setZero in class Spectrum3d
    • normalize

      public static void normalize(Tuple3d t)
    • normalize

      public static void normalize(Tuple3f t)
    • add

      public void add(Collector col)
      To combine two Collector-instances. All values of col added to the values of this instance.
      Specified by:
      add in interface Collector
      Parameters:
      col - To added Collector-instance.
    • getCollectedValues

      public void getCollectedValues(Tuple3d sumDir, Tuple3d sumSquareDir, Tuple3d sumSpec, Tuple3d sumSquareSpec)
      Specified by:
      getCollectedValues in interface Collector
    • clone

      public Collector3d clone()
      Creates a copy of the Spectrum or a deep-copy of this instance.
      Specified by:
      clone in interface Collector
      Specified by:
      clone in interface Spectrum
      Overrides:
      clone in class Spectrum3d
      Returns:
      Copy of this instance.