java.lang.Object
javax.vecmath.Tuple3d
de.grogra.ray.physics.Spectrum3d
de.grogra.ray.physics.CollectorW3d
- All Implemented Interfaces:
Collector
,Spectrum
,DoubleToDouble
,Serializable
,Cloneable
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
R = Q/rayCount
M = M + R
T = T +(rayCount - 1) * Q * R
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 - MR = Q/rayCount
M = M + R
T = T +(rayCount - 1) * Q * R
- Author:
- Stephan Rogge
- See Also:
-
Field Summary
Modifier and TypeFieldDescriptionprotected boolean
protected double
protected double
protected double
protected double
protected double
protected double
protected long
protected double
protected double
protected double
protected double
protected double
protected double
-
Constructor Summary
ConstructorDescriptionJust a new instance of this class.CollectorW3d
(double x, double y, double z) This constructor creates a Collector-instance with a certainSpectrum
.CollectorW3d
(Spectrum spectrum) This constructor creates a Collector-instance with a certainSpectrum
. -
Method Summary
Modifier and TypeMethodDescriptionvoid
To combine two Collector-instances.void
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 ofLightModel
computation are stored.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
Set the arithmetic mean of all directions (not normalized) tovector
.void
void
getDirectionVariance
(Tuple3d tuple) This methods returns the variance of the light-direction (not normalized).void
getDirectionVariance
(Tuple3f tuple) long
Returns the number of rays which hit the corresponding object of this instance.void
getSpectrumArithmeticMean
(Spectrum spectrum) Set the arithmetic mean of all spectra tospectrum
.void
getSpectrumVariance
(Spectrum spectrum) This methods returns the variance of the spectrums.boolean
If the collector should works like a Spectrum, this method returns false, otherwise true.Returns a new instance of this class.static void
static void
void
The initial value ofasCollector
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, clamp, clamp, clampMax, clampMax, clampMax, clampMax, clampMin, clampMin, clampMin, clampMin, epsilonEquals, equals, equals, get, get, get, hashCode, interpolate, interpolate, interpolate, interpolate, max, min, negate, negate, scale, scale, scaleAdd, scaleAdd, set, set, set, set, sub, sub, toString
-
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 certainSpectrum
.- Parameters:
x
- Red-component ofSpectrum3d
y
- Green-component ofSpectrum3d
z
- Blue-component ofSpectrum3d
-
CollectorW3d
This constructor creates a Collector-instance with a certainSpectrum
.- Parameters:
spectrum
- Spectrum, which is used by the LightModel
-
-
Method Details
-
newInstance
Returns a new instance of this class.- Specified by:
newInstance
in interfaceCollector
- Specified by:
newInstance
in interfaceSpectrum
- Overrides:
newInstance
in classSpectrum3d
- Returns:
- new instance of same class
-
setAsCollector
public void setAsCollector()The initial value ofasCollector
is false. It means that the collector works like aSpectrum
. Thats useful when this Collector-instance is used for the calculations inLightModel
.- Specified by:
setAsCollector
in interfaceCollector
-
isCollector
public boolean isCollector()If the collector should works like a Spectrum, this method returns false, otherwise true.- Specified by:
isCollector
in interfaceCollector
- Returns:
-
add
Add the newSpectrum to the spectrum of this Collector-instance and update the statistics.- Specified by:
add
in interfaceSpectrum
- Overrides:
add
in classSpectrum3d
- 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 ofLightModel
computation are stored.- Specified by:
addToStatistic
in interfaceCollector
- Parameters:
rayOrigin
- May this contains a certain vector (direction for example).spectrum
- To addedSpectrum
.scaleFactor
- For the addedSpectrum
.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
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 interfaceCollector
-
getDirectionVariance
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 interfaceCollector
-
getDirectionVariance
-
getDirectionArithmeticMean
Set the arithmetic mean of all directions (not normalized) tovector
. The parametervector
should be initialized before.- Specified by:
getDirectionArithmeticMean
in interfaceCollector
- Parameters:
vector
- Returns the arithmetic mean of all direction for this Collector-instance.
-
getDirectionArithmeticMean
-
getSpectrumArithmeticMean
Set the arithmetic mean of all spectra tospectrum
. The parameterspectrum
should be initialized before.- Specified by:
getSpectrumArithmeticMean
in interfaceCollector
- 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 interfaceCollector
- 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 theLightModel
computation.- Specified by:
setZero
in interfaceSpectrum
- Overrides:
setZero
in classSpectrum3d
-
normalize
-
normalize
-
add
To combine two Collector-instances. All values ofcol
added to the values of this instance. -
getCollectedValues
public void getCollectedValues(Tuple3d sumDir, Tuple3d sumSquareDir, Tuple3d sumSpec, Tuple3d sumSquareSpec) - Specified by:
getCollectedValues
in interfaceCollector
-
clone
Creates a copy of the Spectrum or a deep-copy of this instance.
-