cz.cuni.jagrlib.testing
Class SLEHierarchical

java.lang.Object
  extended by cz.cuni.jagrlib.DefaultProperty
      extended by cz.cuni.jagrlib.Piece
          extended by cz.cuni.jagrlib.testing.SLEHierarchical
All Implemented Interfaces:
Breakable, Property, SLESolver, Template

public class SLEHierarchical
extends Piece
implements SLESolver

Solver for multi-level hierarchical radiosity method.

See Also:
SLEHierarchical.java

Nested Class Summary
static class SLEHierarchical.AlgorithmTypes
          Supported types of multi-level hierarchical radiosity.
 
Field Summary
protected  int attrColor
          Actual face-color attribute.
protected  int attrEmission
          Actual face-emmision attribute.
protected  int attrNormal
          Actual vertex-normal attribute.
protected  RadiosityBasisFunctions basis
          Accelerator: input radiosity basis functions.
protected  Brep brep
          Accelerator: input B-rep database.
protected static java.lang.String CATEGORY
          Object category.
protected  int colorMode
          Actual color mode (0 = red, 1 = green, 2 = blue).
protected  int ctx
          Actual Brep context.
protected  double epsilon
          Required solution accuracy (max. norm of residual vector).
static java.lang.String EPSILON
           
protected  boolean isColorInit
          Was the color-based variables already initialized?
protected  boolean isInitialized
          Was the solver already initialized?
static java.lang.String MAX_A
           
static java.lang.String MAX_F
           
protected  float maxA
          Maximal area of the element.
protected  float maxF
          Maximal size of the single form factor.
protected  int N
          Number of unknowns.
protected  cz.cuni.jagrlib.testing.SLEHierarchical.Node[] nodes
          List of nodes.
static RegPiece reg
          Static registration instance for this class.
protected  int steps
          Number of performed iteration steps.
protected static java.lang.String TEMPLATE_NAME
          Object template identifier.
protected  SLEHierarchical.AlgorithmTypes type
          Actual type of multi-level hierarchical radiosity.
static java.lang.String TYPE
           
 
Fields inherited from class cz.cuni.jagrlib.Piece
channels, info, pl, plugs, TEMPLATE_TYPE, userBreak
 
Fields inherited from interface cz.cuni.jagrlib.iface.SLESolver
OMEGA, STEPS, TOTAL_RESIDUAL
 
Fields inherited from interface cz.cuni.jagrlib.iface.Property
LOGGING, STATISTICS, TEXT_DESCRIPTION
 
Fields inherited from interface cz.cuni.jagrlib.Template
ALL_PLUGS, C_1D, C_2D, C_3D, C_ALPHA, C_BINARY, C_BREP, C_CAMERA, C_CIRCLE, C_CLIP, C_COMPRESSION, C_CURVE, C_DATA, C_DRAW, C_EDITOR, C_ELLIPSE, C_FILL, C_FILTER, C_FLOAT, C_FUNCTION, C_IMAGE, C_INTEGER, C_IO, C_LIGHT, C_LINE, C_METRIC, C_POLYGON, C_PROJECTION, C_RADIOSITY, C_RASTER, C_RENDER, C_SAMPLE, C_SCENE, C_SET, C_SOLID, C_TEXT, C_TRANSFORM, C_VECTOR, C_VIEWER, C_WORKER, CAT_EMPTY, EMPTY, IFACE, JAGRLIB, JAGRLIB2, MANIPULATOR_COMBO, MANIPULATOR_CUSTOM, MANIPULATOR_DEFAULT, MANIPULATOR_MULTILINE, PL_ALPHAMASK, PL_BITMASK, PL_CAUSTIC, PL_CODEC, PL_COLORMAP, PL_COMPARE, PL_DATA, PL_DIRECT, PL_EDITOR, PL_FILTER, PL_FUNCTION, PL_IMAGE, PL_IMPORT, PL_INPUT, PL_INTERSECTION, PL_LIGHTSOURCE, PL_ORDER, PL_OUTPUT, PL_PALETTE, PL_PHOTON, PL_PROPERTY, PL_QUANTIZER, PL_RASTER, PL_RENDER, PL_SHADOW, PL_STREAM, PL_TRANSFORM, PL_TRIGGER, PL_VOLUME, PL_WINDOW, TYPE_BOOLEAN, TYPE_DOUBLE, TYPE_FLOAT, TYPE_INTEGER, TYPE_LONG, TYPE_OBJECT, TYPE_STRING
 
Constructor Summary
SLEHierarchical()
           
 
Method Summary
 int actualComponent()
          Get actual component number.
protected  void buildLinks()
          Build initial set of links.
protected  void computeExtremes(double[][] point, double[] min, double[] max)
          Computes extremes of collection of vertices.
protected  cz.cuni.jagrlib.testing.SLEHierarchical.Node divide(cz.cuni.jagrlib.testing.SLEHierarchical.Node p, cz.cuni.jagrlib.testing.SLEHierarchical.Node q)
          Returns node a or b depending on for which it appears using lower level nodes will reduce the error.
protected  double estimateFormFactors(cz.cuni.jagrlib.testing.SLEHierarchical.Node p, cz.cuni.jagrlib.testing.SLEHierarchical.Node q)
          Estimate unoccluded form factor.
protected  void gatherRad(cz.cuni.jagrlib.testing.SLEHierarchical.Node p)
          Gathers energy over each incoming link (converting Bs to Bg).
 java.lang.Object get(java.lang.String key)
          Gets the given property.
 double[] getSolution(double[] result)
          Reads the whole solution vector.
 double getSolution(int col)
          Reads a single unknown (element of solution vector).
protected  double getTotalResidual()
          Return total unshoot radiosity in dependence on actual color mode.
protected  double[][] getVertices(int handle, double[][] vertex)
          Return coords of all vertices of the given triangle.
protected  double getWeight(int i)
          Reads a single weight (size of element of solution vector).
protected  void init()
          Initialize nodes.
protected  double lengthVector(double[] vector)
          Length of given vector.
protected  void link(cz.cuni.jagrlib.testing.SLEHierarchical.Node p, cz.cuni.jagrlib.testing.SLEHierarchical.Node q)
          Builds the link between nodes a and b by computing the form factor between the areas represented at this nodes.
protected  boolean oracle(cz.cuni.jagrlib.testing.SLEHierarchical.Node p, cz.cuni.jagrlib.testing.SLEHierarchical.Node q)
          Returns a decision whether or not to link two nodes based on the approximating error.
protected  float pushPullRad(cz.cuni.jagrlib.testing.SLEHierarchical.Node p, float BDown)
          Pushes the recieved energy Bg down to the children of each quadtree node, and pulls the results back up the quadtrees by area averaging.
 double refine(int maxIterations, boolean save)
          Refine the solution performing several iterations.
protected  void refine(cz.cuni.jagrlib.testing.SLEHierarchical.Node p, cz.cuni.jagrlib.testing.SLEHierarchical.Node q)
          Establish links between p and q.
 void reset()
          Reset the solver (if applicable).
 void set(java.lang.String key, java.lang.Object value)
          Sets the given property.
 void setComponent(int c)
          Set actual component (non-mandatory).
 double setEpsilon(double epsilon)
          Sets solver accuracy (whatever it means).
static int setTemplate(Template t, int ord)
          General-purpose registration routine.
 void solve(boolean save)
          Solve the whole system en bloc.
protected  double solve(int maxIterations, boolean save)
          Performs the given number of iteration steps.
protected  void sphereFromPoints(double[][] point, double[] center, double radius)
          Creates bounding sphere (center, radius) from the triangle points.
protected  cz.cuni.jagrlib.testing.SLEHierarchical.Node subdivideNode(cz.cuni.jagrlib.testing.SLEHierarchical.Node a)
          Subdivides single node to the three children.
 void update()
          Input data was changed, solver should adapt to it.
 
Methods inherited from class cz.cuni.jagrlib.Piece
className, connect, findPlug, findPlug, getInfo, getInterface, getInterface, getPlug, getReg, init, isCompatible, isCompatible, isConnected, logError, logWarning, myInterface, newInputPlug, newOptOutputPlug, newOutputPlug, newPlug, noTemplates, propBegin, propBounds, propDefault, propEnd, propEnum, propManipulator, propManipulator, setProgressListener, setRegStrings, setTemplateDynamic, stop
 
Methods inherited from class cz.cuni.jagrlib.DefaultProperty
booleanProperty, booleanProperty, colorDoubleProperty, colorProperty, commit, doubleProperty, doubleProperty, doubleProperty, enumProperty, floatProperty, floatProperty, floatProperty, intProperty, intProperty, intProperty, longProperty, longProperty, longProperty, set, stringProperty
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface cz.cuni.jagrlib.iface.Property
commit
 

Field Detail

type

protected SLEHierarchical.AlgorithmTypes type
Actual type of multi-level hierarchical radiosity.


brep

protected Brep brep
Accelerator: input B-rep database.


basis

protected RadiosityBasisFunctions basis
Accelerator: input radiosity basis functions.


ctx

protected int ctx
Actual Brep context.


attrNormal

protected int attrNormal
Actual vertex-normal attribute.


attrColor

protected int attrColor
Actual face-color attribute.


attrEmission

protected int attrEmission
Actual face-emmision attribute.


epsilon

protected double epsilon
Required solution accuracy (max. norm of residual vector).


steps

protected int steps
Number of performed iteration steps.


N

protected int N
Number of unknowns.


nodes

protected cz.cuni.jagrlib.testing.SLEHierarchical.Node[] nodes
List of nodes.


maxA

protected float maxA
Maximal area of the element.


maxF

protected float maxF
Maximal size of the single form factor.


colorMode

protected int colorMode
Actual color mode (0 = red, 1 = green, 2 = blue).


isInitialized

protected boolean isInitialized
Was the solver already initialized?


isColorInit

protected boolean isColorInit
Was the color-based variables already initialized?


TYPE

public static final java.lang.String TYPE
See Also:
Constant Field Values

EPSILON

public static final java.lang.String EPSILON
See Also:
Constant Field Values

MAX_A

public static final java.lang.String MAX_A
See Also:
Constant Field Values

MAX_F

public static final java.lang.String MAX_F
See Also:
Constant Field Values

TEMPLATE_NAME

protected static final java.lang.String TEMPLATE_NAME
Object template identifier.

See Also:
Constant Field Values

CATEGORY

protected static final java.lang.String CATEGORY
Object category.

See Also:
Constant Field Values

reg

public static final RegPiece reg
Static registration instance for this class. Automatically initialized in class-loading time.

Constructor Detail

SLEHierarchical

public SLEHierarchical()
Method Detail

setEpsilon

public double setEpsilon(double epsilon)
Sets solver accuracy (whatever it means).

Specified by:
setEpsilon in interface SLESolver

solve

public void solve(boolean save)
Solve the whole system en bloc.

Specified by:
solve in interface SLESolver
Parameters:
save - Solution will be saved into the associated SLEData.

reset

public void reset()
Reset the solver (if applicable).

Specified by:
reset in interface SLESolver

refine

public double refine(int maxIterations,
                     boolean save)
Refine the solution performing several iterations.

Specified by:
refine in interface SLESolver
Parameters:
maxIterations - Number of iterations requested.
save - Solution will be saved into the associated SLEData.
Returns:
Achieved precision (if less than epsilon, the system has converged).

update

public void update()
Input data was changed, solver should adapt to it. Usually solve(boolean) or refine(int, boolean) will be called afterwards..

Specified by:
update in interface SLESolver

getSolution

public double getSolution(int col)
Reads a single unknown (element of solution vector). Non-mandatory.

Specified by:
getSolution in interface SLESolver

getSolution

public double[] getSolution(double[] result)
Reads the whole solution vector. Non-mandatory.

Specified by:
getSolution in interface SLESolver

actualComponent

public int actualComponent()
Get actual component number.

Specified by:
actualComponent in interface SLESolver

setComponent

public void setComponent(int c)
Set actual component (non-mandatory).

Specified by:
setComponent in interface SLESolver

solve

protected double solve(int maxIterations,
                       boolean save)
Performs the given number of iteration steps.

Parameters:
maxIterations - Maximal number of iterations.
save - Solution will be saved into the associated SLEData.
Returns:
Residual norm achieved in the iteration.

init

protected void init()
Initialize nodes.


buildLinks

protected void buildLinks()
Build initial set of links.


refine

protected void refine(cz.cuni.jagrlib.testing.SLEHierarchical.Node p,
                      cz.cuni.jagrlib.testing.SLEHierarchical.Node q)
Establish links between p and q.


oracle

protected boolean oracle(cz.cuni.jagrlib.testing.SLEHierarchical.Node p,
                         cz.cuni.jagrlib.testing.SLEHierarchical.Node q)
Returns a decision whether or not to link two nodes based on the approximating error.


link

protected void link(cz.cuni.jagrlib.testing.SLEHierarchical.Node p,
                    cz.cuni.jagrlib.testing.SLEHierarchical.Node q)
Builds the link between nodes a and b by computing the form factor between the areas represented at this nodes.


divide

protected cz.cuni.jagrlib.testing.SLEHierarchical.Node divide(cz.cuni.jagrlib.testing.SLEHierarchical.Node p,
                                                              cz.cuni.jagrlib.testing.SLEHierarchical.Node q)
Returns node a or b depending on for which it appears using lower level nodes will reduce the error.


subdivideNode

protected cz.cuni.jagrlib.testing.SLEHierarchical.Node subdivideNode(cz.cuni.jagrlib.testing.SLEHierarchical.Node a)
Subdivides single node to the three children.


estimateFormFactors

protected double estimateFormFactors(cz.cuni.jagrlib.testing.SLEHierarchical.Node p,
                                     cz.cuni.jagrlib.testing.SLEHierarchical.Node q)
Estimate unoccluded form factor.


sphereFromPoints

protected void sphereFromPoints(double[][] point,
                                double[] center,
                                double radius)
Creates bounding sphere (center, radius) from the triangle points.


computeExtremes

protected void computeExtremes(double[][] point,
                               double[] min,
                               double[] max)
Computes extremes of collection of vertices.


lengthVector

protected double lengthVector(double[] vector)
Length of given vector.


getVertices

protected double[][] getVertices(int handle,
                                 double[][] vertex)
Return coords of all vertices of the given triangle.


gatherRad

protected void gatherRad(cz.cuni.jagrlib.testing.SLEHierarchical.Node p)
Gathers energy over each incoming link (converting Bs to Bg).


pushPullRad

protected float pushPullRad(cz.cuni.jagrlib.testing.SLEHierarchical.Node p,
                            float BDown)
Pushes the recieved energy Bg down to the children of each quadtree node, and pulls the results back up the quadtrees by area averaging.

Parameters:
p - Node which pushes energy down to the children.
BDown - Recieved energy by node a.
Returns:
?

getWeight

protected double getWeight(int i)
Reads a single weight (size of element of solution vector).


getTotalResidual

protected double getTotalResidual()
Return total unshoot radiosity in dependence on actual color mode.


set

public void set(java.lang.String key,
                java.lang.Object value)
Sets the given property.

Specified by:
set in interface Property
Overrides:
set in class DefaultProperty
Parameters:
key - Key string.
value - The new value.
See Also:
Property.commit()

get

public java.lang.Object get(java.lang.String key)
Gets the given property.

Specified by:
get in interface Property
Overrides:
get in class DefaultProperty
Parameters:
key - Key string.
Returns:
The actual value or null.

setTemplate

public static int setTemplate(Template t,
                              int ord)
General-purpose registration routine. Sets all plugs, strings, etc. to the given Template.