| 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 | */ | 
|---|