4.1 - Vertices Congruence Algorithm

The Vertices congruence is the base of the Cell Congruence Enabling Algorithm.

The merging procedure relies on the fact that points closed enought are actually the same point. This highlights the dichotomical relation between geometry and topology within a model: space location (Geometry) is needed in order to retrieve wich point to merge and consequently update the chain complexes (Topology).

The following interface allows close point recognition.

LocalCongruence.vertCongruenceFunction
vertCongruence(V::Lar.Array{Float64,2}; ϵ=1e-6)::Tuple{Lar.Points, Array{Array{Int,1},1}}

Evaluates the Vertex Congruence for 3D-points $V ∈ ℳ(3,n)$.

The function determines the points of V closer than ϵ and builds a new Vertex Set made of the representative of each point cluster.

The method returns:

  • the new Vertex Set
  • a map that, for every new vertex, identifies the old vertices it is made of
source

The value $\epsilon > 0$ actually serve as a discriminant for well understending whether different points are actually the same. As a side effect it also sets the resolution employed by the CCE algorithm itself since, even if points within the resolution where different at first glance, they arise to be the same after this procedure.

Do note that this powerful feature may actually cause loss in the topological structure: low resolution processing decrease in fact further steps computation complexity at the cost of a information loss.

In order to keep the complex as similar as possible to the input, each points class is identified as the mean point of the set.

We employ a KDTree structure in order to speedup the point scan; this however means that if points are supplied in different order, a different geometrical pattern may be generated (even a diffent number of points)

err = 1e-8
V = [
    0.0  err  0.0 -err  0.0  0.0
    0.0  0.0  err  0.0 -err  0.0
]

LC.vertCongruence(V[:, 1:5])

LC.vertCongruence(V[:, 2:6])

Figure1 Output of the two vertCongruence() calls.