|
JavaView® v2.00.008 | ||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: INNER | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||
java.lang.Object
|
+--jv.object.PsObject
|
+--jvx.numeric.PnEnergyMinimizer
Main class to vary a surface to minimize a given energy functional. Minimization runs in a separate thread. For Dirichlet and Area minimization support for hessian and eigenvalues included.
| Field Summary | |
static int |
AREA
|
static int |
CONFORMAL
|
static int |
DIRICHLET
|
protected boolean |
m_bHessianIsL2Normalized
Flag whether hessian matrix is normalized with inverse of L2 matrix. |
protected boolean |
m_bRunning
Flag used to indicate that thread should stop. |
protected boolean |
m_bUpdateDomain
Flag whether domain is updated after each CG-minization loop. |
protected boolean |
m_bUpdateNormals
Flag whether surface normals are updated after each minimization loop. |
protected double |
m_cgEps
Accuracy criteria used to terminate CG iterations. |
protected PnConjugateGradient |
m_cgMethod
Conjugate Gradient Method. |
protected PdVector |
m_coord
Coordinate vector. |
protected int |
m_currLoop
Current loops in CG algorithm, used in infoPanel. |
protected PgElementSet |
m_domain
Optional domain surface used for minimizing energies related to maps between surfaces. |
protected PnEnergy |
m_energy
Function computing some energy, its gradient and hessian. |
protected PdVector |
m_eValue
Vector with eigenvalues. |
protected PdVector[] |
m_eVector
Array with eigenvectors. |
protected int[] |
m_evSortInd
Index vector listing eigenvalues by size. |
protected double |
m_finalEnergy
Energy after minimization, used in infoPanel. |
protected PdMatrix |
m_hessian
Hessian matrix. |
protected double |
m_initialEnergy
Initial energy, used in infoPanel. |
protected int |
m_numIterations
Number of used iterations in last CG algorithm, used in infoPanel. |
protected int |
m_numLoops
Number of loops, i.e. number of calls to CG algorithm, used in infoPanel. |
protected PgElementSet |
m_surface
Surface which will be modified. |
protected java.lang.Thread |
m_thread
Thread running during minimization. |
protected PgVectorField |
m_vf
Vector field for display of gradient and eigenvectors. |
static int |
SPRING
|
| Fields inherited from class jv.object.PsObject |
HAS_CONFIG_PANEL, HAS_INFO_PANEL, HAS_MATERIAL_PANEL, INSPECTOR_INFO, INSPECTOR_INFO_EXT, IS_DELETED, IS_FIXED, IS_SELECTED, IS_USED, m_infoPanel, m_name, m_panelList, m_parent, m_tag, m_updateList, NUM_TAGS |
| Constructor Summary | |
PnEnergyMinimizer()
|
|
| Method Summary | |
void |
computeEigenvectors()
|
void |
enableUpdateDomain(boolean flag)
Flag whether domain is updated after each CG-minization loop. |
PgElementSet |
getDomain()
|
PnEnergy |
getEnergy()
Get current energy. |
PgElementSet |
getSurface()
|
void |
init()
If instance has missing name then assign default name 'object_NUMBER' where number is the total number of already created instances. |
boolean |
isRunning()
Check whether energy minimizer is currently running a minimization process. |
double |
minimize()
Minimize energy by invoking conjugate gradient method in a loop. |
void |
printEigenvalues()
|
void |
printEigenvectors()
|
void |
printGradient()
|
void |
printHessian()
|
void |
run()
Do energy minimization until m_numLoops are done or until a call of stop(). |
void |
setEnergy(PnEnergy energy)
Set new energy and clear all vector fields. |
void |
setNumLoops(int numLoops)
Set number of calls of conjugate gradient method to be performed during each call to PnEnergyMinimizer#minimize(). |
boolean |
setSurface(PgElementSet domain,
PgElementSet surface)
Set references to domain and image surface. |
void |
showEigenvector(int ind)
|
void |
showGradient()
|
void |
showNone()
|
void |
start()
Start energy minimization in separate thread. |
void |
step()
Move vertices in negative gradient direction as certain amount. |
void |
stop()
Stop energy minimization in separate thread. |
boolean |
update(java.lang.Object event)
Update the class whenever a child has changed. |
| Methods inherited from class jv.object.PsObject |
addInspector, addUpdateListener, clearTag, clone, clone, clone, copy, getFather, getInfoPanel, getInspector, getName, getNumObjects, hasInspector, hasTag, hasUpdateListener, instanceOf, instanceOf, removeInspector, removeUpdateListener, setName, setParent, setTag, toString, updatePanels |
| Methods inherited from class java.lang.Object |
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
| Field Detail |
public static final int DIRICHLET
public static final int AREA
public static final int CONFORMAL
public static final int SPRING
protected PgElementSet m_domain
protected PgElementSet m_surface
protected PgVectorField m_vf
protected PdMatrix m_hessian
protected boolean m_bUpdateNormals
protected boolean m_bUpdateDomain
protected PdVector m_coord
protected PnConjugateGradient m_cgMethod
protected PnEnergy m_energy
protected int m_numLoops
protected int m_currLoop
protected double m_cgEps
protected double m_initialEnergy
protected double m_finalEnergy
protected int m_numIterations
protected java.lang.Thread m_thread
protected PdVector[] m_eVector
protected PdVector m_eValue
protected int[] m_evSortInd
protected boolean m_bHessianIsL2Normalized
protected boolean m_bRunning
| Constructor Detail |
public PnEnergyMinimizer()
| Method Detail |
public void init()
PsObjectinit in class PsObjectpublic boolean update(java.lang.Object event)
update in class PsObjectjv.object.PsObjectPsObject.setParent(PsUpdateIf),
PsObject.getFather(),
PsObject.addUpdateListener(PsUpdateIf)public PnEnergy getEnergy()
public void setEnergy(PnEnergy energy)
public void enableUpdateDomain(boolean flag)
public PgElementSet getDomain()
public PgElementSet getSurface()
public boolean setSurface(PgElementSet domain,
PgElementSet surface)
Remark: If the geometries are changed outside this energy minimizer, the user must call setSurface() again to update the energy minimizer. Otherwise, further minimization calls will use the old geometry information.
public void setNumLoops(int numLoops)
This number of loops is independent of the number of iterations used in each single invocation of the CG-method, which depends on the requested accurracy PnEnergyMinimizer#m_cgEps.
minimize()public double minimize()
setNumLoops(int)public void step()
h=0.01*numLoops.public void printGradient()
public void showNone()
public void showGradient()
public void printHessian()
public void computeEigenvectors()
public void printEigenvalues()
public void printEigenvectors()
public void showEigenvector(int ind)
public boolean isRunning()
public void start()
public void stop()
public void run()
m_numLoops are done or until a call of stop().run in interface java.lang.Runnable
|
JavaView® v2.00.008 | ||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: INNER | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||