source: src/documentation/constructs/tesselation.dox@ 8544b32

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
Last change on this file since 8544b32 was 8544b32, checked in by Frederik Heber <heber@…>, 10 years ago

DOCU: Added extensive explanation how convexization works.

  • updated userguide for convex-envelope.
  • Property mode set to 100644
File size: 5.7 KB
Line 
1/*
2 * Project: MoleCuilder
3 * Description: creates and alters molecular systems
4 * Copyright (C) 2010 University of Bonn. All rights reserved.
5 * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
6 */
7
8/**
9 * \file tesselation.dox
10 *
11 * Created on: Oct 28, 2011
12 * Author: heber
13 */
14
15/** \page tesselation Tesselation
16 *
17 * Tesselation is a first step towards recognizing molecular surfaces.
18 *
19 * Within the code it is used for calculating correlation functions with regard
20 * to such a surface.
21 *
22 * \section tesselation-procedure Tesselation procedure
23 *
24 * In the tesselation all atoms act as possible hindrance to a rolling sphere
25 * that moves in from infinity. Whenever it rests uniquely on three distinct
26 * points (atoms) a triangle is created. The algorithm continues by pushing the
27 * sphere over one of the triangle's edges to eventually obtain a closed,
28 * tesselated surface of the whole molecule.
29 *
30 * \note This mesh is different to the usual sense of a molecular surface as
31 * atoms are directly located on it. Normally, one considers a so-called
32 * Van-der-Waals sphere around the atoms and tesselates over these.
33 * \todo However, the mesh can easily be modified and even expanded to match the
34 * other (although the code for that is not yet fully implemented).
35 *
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
97 *
98 * The main problem for extending the mesh to match with the normal sense is
99 * that triangles may suddenly intersect others when we have the case of a non-
100 * convex mesh (which is rather the normal case). And this has to be
101 * specifically treated. Also, it is not sure whether the procedure of
102 * expanding our current surface is optimal and one should not start on a
103 * different set of nodes created from virtual points resting on the
104 * van-der-Waals spheres.
105 *
106 * Note that it is possible to select a number of atoms and create a bounding box
107 * from a combination of spheres with van der Waals radii.
108 *
109 * \date 2014-10-09
110 *
111 */
Note: See TracBrowser for help on using the repository browser.