de.grogra.ray.physics
Class CollectorW3d

java.lang.Object
  extended by javax.vecmath.Tuple3d
      extended by de.grogra.ray.physics.Spectrum3d
          extended by de.grogra.ray.physics.CollectorW3d
All Implemented Interfaces:
Collector, Spectrum, DoubleToDouble, java.io.Serializable, java.lang.Cloneable

public class CollectorW3d
extends Spectrum3d
implements Collector, java.io.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 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:
Serialized Form

Field Summary
protected  boolean asCollector
           
protected  double MDirectionX
           
protected  double MDirectionY
           
protected  double MDirectionZ
           
protected  double MSpectrumX
           
protected  double MSpectrumY
           
protected  double MSpectrumZ
           
protected  long rayCount
           
protected  double TDirectionX
           
protected  double TDirectionY
           
protected  double TDirectionZ
           
protected  double TSpectrumX
           
protected  double TSpectrumY
           
protected  double TSpectrumZ
           
 
Fields inherited from class javax.vecmath.Tuple3d
x, y, z
 
Constructor Summary
CollectorW3d()
          Just a new instance of this class.
CollectorW3d(double x, double y, double z)
          This constructor creates a Collector-instance with a certain Spectrum.
CollectorW3d(Spectrum spectrum)
          This constructor creates a Collector-instance with a certain Spectrum.
 
Method Summary
 void add(Collector col)
          To combine two Collector-instances.
 void add(Spectrum spectrum)
          Add the newSpectrum to the spectrum of this Collector-instance and update the statistics.
 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.
 void addToStatistic(Tuple3d rayOrigin, Spectrum spectrum, double scaleFactor, boolean isPrimary)
          Here the information of LightModel computation are stored.
 Collector3d clone()
          Creates a copy of the Spectrum or a deep-copy of this instance.
 void getCollectedValues(Tuple3d sumDir, Tuple3d sumSquareDir, Tuple3d sumSpec, Tuple3d sumSquareSpec)
           
 void getDirectionArithmeticMean(Tuple3d tuple)
          Set the arithmetic mean of all directions (not normalized) to vector.
 void getDirectionArithmeticMean(Tuple3f tuple)
           
 void getDirectionVariance(Tuple3d tuple)
          This methods returns the variance of the light-direction (not normalized).
 void getDirectionVariance(Tuple3f tuple)
           
 long getRayCount()
          Returns the number of rays which hit the corresponding object of this instance.
 void getSpectrumArithmeticMean(Spectrum spectrum)
          Set the arithmetic mean of all spectra to spectrum.
 void getSpectrumVariance(Spectrum spectrum)
          This methods returns the variance of the spectrums.
 boolean isCollector()
          If the collector should works like a Spectrum, this method returns false, otherwise true.
 Collector3d newInstance()
          Returns a new instance of this class.
static void normalize(Tuple3d t)
           
static void normalize(Tuple3f t)
           
 void setAsCollector()
          The initial value of asCollector is false.
 void setZero()
          Sets all values the instance to zero.
 
Methods inherited from class de.grogra.ray.physics.Spectrum3d
clampMinZero, div, div, div, dot, evaluateDouble, get, getMax, integrate, mul, mul, mul, set, setIdentity, sub, sum
 
Methods inherited from class javax.vecmath.Tuple3d
absolute, absolute, add, add, clamp, clamp, clampMax, clampMax, clampMin, clampMin, epsilonEquals, equals, equals, get, get, hashCode, interpolate, interpolate, max, min, negate, negate, scale, scale, scaleAdd, scaleAdd, set, set, set, set, sub, sub, toString
 
Methods inherited from class java.lang.Object
finalize, getClass, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface de.grogra.ray.physics.Spectrum
clampMinZero, div, div, div, dot, evaluateDouble, get, get, getMax, integrate, mul, mul, mul, scale, set, set, set, setIdentity, sub, sum
 

Field Detail

asCollector

protected boolean asCollector

MDirectionX

protected double MDirectionX

MDirectionY

protected double MDirectionY

MDirectionZ

protected double MDirectionZ

MSpectrumX

protected double MSpectrumX

MSpectrumY

protected double MSpectrumY

MSpectrumZ

protected double MSpectrumZ

rayCount

protected long rayCount

TDirectionX

protected double TDirectionX

TDirectionY

protected double TDirectionY

TDirectionZ

protected double TDirectionZ

TSpectrumX

protected double TSpectrumX

TSpectrumY

protected double TSpectrumY

TSpectrumZ

protected double TSpectrumZ
Constructor Detail

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 Detail

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.

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,
                           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)

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.

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.

getCollectedValues

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

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)

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)

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.

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.

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

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:

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

normalize

public static void normalize(Tuple3d t)

normalize

public static void normalize(Tuple3f t)

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

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