Ignore:
Timestamp:
Oct 19, 2014, 5:13:11 PM (10 years ago)
Author:
Frederik Heber <heber@…>
Branches:
Action_Thermostats, Add_AtomRandomPerturbation, Add_FitFragmentPartialChargesAction, Add_RotateAroundBondAction, Add_SelectAtomByNameAction, Added_ParseSaveFragmentResults, AddingActions_SaveParseParticleParameters, Adding_Graph_to_ChangeBondActions, Adding_MD_integration_tests, Adding_ParticleName_to_Atom, Adding_StructOpt_integration_tests, AtomFragments, Automaking_mpqc_open, AutomationFragmentation_failures, Candidate_v1.5.4, Candidate_v1.6.0, Candidate_v1.6.1, ChangeBugEmailaddress, ChangingTestPorts, ChemicalSpaceEvaluator, CombiningParticlePotentialParsing, Combining_Subpackages, Debian_Package_split, Debian_package_split_molecuildergui_only, Disabling_MemDebug, Docu_Python_wait, EmpiricalPotential_contain_HomologyGraph, EmpiricalPotential_contain_HomologyGraph_documentation, Enable_parallel_make_install, Enhance_userguide, Enhanced_StructuralOptimization, Enhanced_StructuralOptimization_continued, Example_ManyWaysToTranslateAtom, Exclude_Hydrogens_annealWithBondGraph, FitPartialCharges_GlobalError, Fix_BoundInBox_CenterInBox_MoleculeActions, Fix_ChargeSampling_PBC, Fix_ChronosMutex, Fix_FitPartialCharges, Fix_FitPotential_needs_atomicnumbers, Fix_ForceAnnealing, Fix_IndependentFragmentGrids, Fix_ParseParticles, Fix_ParseParticles_split_forward_backward_Actions, Fix_PopActions, Fix_QtFragmentList_sorted_selection, Fix_Restrictedkeyset_FragmentMolecule, Fix_StatusMsg, Fix_StepWorldTime_single_argument, Fix_Verbose_Codepatterns, Fix_fitting_potentials, Fixes, ForceAnnealing_goodresults, ForceAnnealing_oldresults, ForceAnnealing_tocheck, ForceAnnealing_with_BondGraph, ForceAnnealing_with_BondGraph_continued, ForceAnnealing_with_BondGraph_continued_betteresults, ForceAnnealing_with_BondGraph_contraction-expansion, FragmentAction_writes_AtomFragments, FragmentMolecule_checks_bonddegrees, GeometryObjects, Gui_Fixes, Gui_displays_atomic_force_velocity, ImplicitCharges, IndependentFragmentGrids, IndependentFragmentGrids_IndividualZeroInstances, IndependentFragmentGrids_IntegrationTest, IndependentFragmentGrids_Sole_NN_Calculation, JobMarket_RobustOnKillsSegFaults, JobMarket_StableWorkerPool, JobMarket_unresolvable_hostname_fix, MoreRobust_FragmentAutomation, ODR_violation_mpqc_open, PartialCharges_OrthogonalSummation, PdbParser_setsAtomName, PythonUI_with_named_parameters, QtGui_reactivate_TimeChanged_changes, Recreated_GuiChecks, Rewrite_FitPartialCharges, RotateToPrincipalAxisSystem_UndoRedo, SaturateAtoms_findBestMatching, SaturateAtoms_singleDegree, StoppableMakroAction, Subpackage_CodePatterns, Subpackage_JobMarket, Subpackage_LinearAlgebra, Subpackage_levmar, Subpackage_mpqc_open, Subpackage_vmg, Switchable_LogView, ThirdParty_MPQC_rebuilt_buildsystem, TrajectoryDependenant_MaxOrder, TremoloParser_IncreasedPrecision, TremoloParser_MultipleTimesteps, TremoloParser_setsAtomName, Ubuntu_1604_changes, stable
Children:
991c35
Parents:
e2396e
git-author:
Frederik Heber <heber@…> (10/09/14 08:55:44)
git-committer:
Frederik Heber <heber@…> (10/19/14 17:13:11)
Message:

DOCU: Added extensive explanation how convexization works.

  • updated userguide for convex-envelope.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/documentation/constructs/tesselation.dox

    re2396e r8544b32  
    2020 * to such a surface.
    2121 *
    22  * \section tesselation-procedure
     22 * \section tesselation-procedure Tesselation procedure
    2323 *
    2424 * In the tesselation all atoms act as possible hindrance to a rolling sphere
     
    3434 * other (although the code for that is not yet fully implemented).
    3535 *
    36  * \section tesselation-extension
     36 * \section tesselation-convexization Making a surface convex
     37 *
     38 * A closed surface created by the aforementioned procedure can be made convex
     39 * by a combination of the following two ways:
     40 * -# Removing a point from the surface that is connected to other points only
     41 *    by concave lines. This might also be imagined as removing bumps or
     42 *    craters in the surface.
     43 * -# flipping a base line or rather adding a general tetrahedron to remove a
     44 *    concave line on the surface.
     45 *
     46 * With the first way one has to pay attention to possible degenerated lines
     47 * and triangles. That's why prior to the this convexization procedure all
     48 * possible degenerated triangles are removed. Furthermore, when looking at
     49 * a removal candidate and its connected points, all these points are split
     50 * up into so-called connected paths. The crater to be removed or filled-up
     51 * has a low point -- the point to be removed -- and a rim, defined by all
     52 * points connected by concave lines to the low point. However, when a point
     53 * has degenerated lines attached to it (i.e. two lines with the same
     54 * endpoints), it may have multiple rims (imagine two craters on either
     55 * side of the surface and the volume being so small/slim that they reach
     56 * through to the same low point). We have to discern between these multiple
     57 * rims, therefore the connected points are placed into different closed
     58 * rings, so-called polygons. The point is the removed and the polygon re-
     59 * tesselated which essentially fills the crater.
     60 *
     61 * With the second way, we have to pay attention that the filled-in tetrahedron
     62 * does not intersect already present triangles. The baseline defines two
     63 * points and as the tesselated surface is closed, it must be connected to two
     64 * triangles. These together define a set of four points that make up the
     65 * tetrahedron. Naturally, two sides of the tetrahedron are always present
     66 * already (and will become removed in place of the other two, effectively
     67 * adding more volume to the tesselation).
     68 * Now first, we only flip base lines that are concave. Second, none of the two
     69 * other sides of the tetrahedron must be present. And lastly, we must check
     70 * for all surrounding triangles that the new baseline (formed by point 3
     71 * and 4) does not intersect these. Essentially, if we imagine a plane
     72 * containing this new baseline, then each possibly intersecting triangle shows
     73 * up as a brief line segment. We have to make sure that all of these segments
     74 * remain below the new baseline in this plane. Also, things are complicated
     75 * as the first and last line segment will always intersect with the baseline
     76 * at the endpoint. There, we basically have to make sure that the line segment
     77 * goes off in the right direction, namely outward.
     78 *
     79 * \section tesselation-volume Measuring the volume contained
     80 *
     81 * There is no straight-forward way to measure the volume contained in a
     82 * non-convex tesselated surface. However, there is for a convex surface
     83 * because convexity means that a line between any inner point and a point on
     84 * the boundary will not intersect the surface anywhere else. Hence, we may
     85 * use the center of gravity of all boundary points (by the same argument it
     86 * must be an inner point) and calculate the volume of the general tetrahedron
     87 * by looking at each of the tesselation's triangles in turn and summing up.
     88 *
     89 * We can calculate the volume of the original non-convex tesselation because
     90 * the two ways mentioned above -- removing points and flipping baselines --
     91 * both involve just addding general tetrahedron whose volume we may easily
     92 * calculate. By bookkeeping of how much volume is added and calculating the
     93 * total convex volume in the end, we also get the volume contained in the
     94 * prior non-convex surface.
     95 *
     96 * \section tesselation-extension Issues whebn extended a tesselated surface
    3797 *
    3898 * The main problem for extending the mesh to match with the normal sense is
     
    47107 * from a combination of spheres with van der Waals radii.
    48108 *
    49  * \date 2014-03-10
     109 * \date 2014-10-09
    50110 *
    51111 */
Note: See TracChangeset for help on using the changeset viewer.