Contour#
Isosurface contouring methods are used to extract the surface from a field of values, most often an image or an implicit function evaluated on a grid of points. One of the earliest and most famous methods is the Marching Cubes algorithm by Lorensen and Cline [LC87], which inspired a variety of “marching element” methods that follow a similar approach. These methods “march” from element to element, at each one assessing the node values to determine whether each node is above or below the isovalue threshold in order to determine whether that node is inside or outside of the surface. Partitions are then created by placing new nodes along edges that change from inside to outside. Lookup tables can then be used to efficiently determine what partitions need to be used based on which nodes are inside and which nodes are outside. The new nodes can either be placed on the midpoint of the edges or interpolation can be used to approximate where along the edge the isovalue is.
Marching Squares#
See also MarchingSquares()
Marching squares operates on square (or quadrilateral) elements. Since each of the four nodes can either be inside or outside of the isoline, a \(2^4=16\) entry lookup table can be used where a binary lookup index can be obtained based on the state of each node (1 = inside, 0 = outside). Marching squares can either be used to extract line segments along the boundary or triangles to fill the inside of the isoline.
![graph bits {
node [shape=point, fontname="source code pro"];
edge [style=solid, penwidth=2];
v0 [pos="0.,0.!", color="#BF616A", xlabel="0"];
v1 [pos="1.,0.!", color="#EBCB8B", xlabel="1"];
v2 [pos="1.,1.!", color="#A3BE8C", xlabel="2"];
v3 [pos="0.,1.!", color="#B48EAD", xlabel="3"];
//v4 [pos="0.5,0.!", color="#5E81AC"];
//v5 [pos="1.0,0.5!", color="#5E81AC"];
//v6 [pos="0.5,1.!", color="#5E81AC"];
//v7 [pos="0.,0.5!", color="#5E81AC"];
v0 -- v1 [style=dotted];
v1 -- v2 [style=dotted];
v2 -- v3 [style=dotted];
v3 -- v0 [style=dotted];
struct1 [shape=plaintext, pos="2.5,0.75!",
label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4" STYLE="ROUNDED">
<TR>
<TD BGCOLOR="white" COLOR="white" PORT="f0">Index = </TD>
<TD BGCOLOR="white" COLOR="#BF616A#B48EAD" PORT="f0">0</TD>
<TD BGCOLOR="white" COLOR="#EBCB8B" PORT="f1">1</TD>
<TD BGCOLOR="white" COLOR="#A3BE8C" PORT="f2">2</TD>
<TD BGCOLOR="white" COLOR="#B48EAD" PORT="f3">3</TD>
</TR>
</TABLE>
>];
}](../_images/graphviz-fb07d5bc77fa453d5473fa336f268faabad208cf.png)
Edge Lookup Table
![graph case0 {
node [shape=point, fontname="source code pro"];
edge [style=solid, penwidth=2];
v0 [pos="0.,0.!", fillcolor=white];
v1 [pos="1.,0.!", fillcolor=white];
v2 [pos="1.,1.!", fillcolor=white];
v3 [pos="0.,1.!", fillcolor=white];
//v4 [pos="0.5,0.!", color="#5E81AC"];
//v5 [pos="1.0,0.5!", color="#5E81AC"];
//v6 [pos="0.5,1.!", color="#5E81AC"];
//v7 [pos="0.,0.5!", color="#5E81AC"];
v0 -- v1 [style=dotted];
v1 -- v2 [style=dotted];
v2 -- v3 [style=dotted];
v3 -- v0 [style=dotted];
}](../_images/graphviz-4f8e990e31b2f9671002d240cfe3a79cc3e4e470.png)
Case 0
![graph case1 {
node [shape=point, fontname="source code pro"];
edge [style=solid, penwidth=2];
v0 [pos="0.,0.!", fillcolor=white];
v1 [pos="1.,0.!", fillcolor=white];
v2 [pos="1.,1.!", fillcolor=white];
v3 [pos="0.,1.!", fillcolor=black];
//v4 [pos="0.5,0.!", color="#5E81AC"];
//v5 [pos="1.0,0.5!", color="#5E81AC"];
v6 [pos="0.5,1.!", color="#5E81AC"];
v7 [pos="0.,0.5!", color="#5E81AC"];
v0 -- v1 [style=dotted];
v1 -- v2 [style=dotted];
v2 -- v3 [style=dotted];
v3 -- v0 [style=dotted];
v6 -- v7 [color="#5E81AC"];
}](../_images/graphviz-0f2133cb1ae1783b1668a5679af5479134434cb9.png)
Case 1
![graph case2 {
node [shape=point, fontname="source code pro"];
edge [style=solid, penwidth=2];
v0 [pos="0.,0.!", fillcolor=white];
v1 [pos="1.,0.!", fillcolor=white];
v2 [pos="1.,1.!", fillcolor=black];
v3 [pos="0.,1.!", fillcolor=white];
//v4 [pos="0.5,0.!", color="#5E81AC"];
v5 [pos="1.0,0.5!", color="#5E81AC"];
v6 [pos="0.5,1.!", color="#5E81AC"];
//v7 [pos="0.,0.5!", color="#5E81AC"];
v0 -- v1 [style=dotted];
v1 -- v2 [style=dotted];
v2 -- v3 [style=dotted];
v3 -- v0 [style=dotted];
v5 -- v6 [color="#5E81AC"];
}](../_images/graphviz-6cdb1ceb0b16c73d5095fc86b638c6744f35d0e1.png)
Case 2
![graph case3 {
node [shape=point, fontname="source code pro"];
edge [style=solid, penwidth=2];
v0 [pos="0.,0.!", fillcolor=white];
v1 [pos="1.,0.!", fillcolor=white];
v2 [pos="1.,1.!", fillcolor=black];
v3 [pos="0.,1.!", fillcolor=black];
//v4 [pos="0.5,0.!", color="#5E81AC"];
v5 [pos="1.0,0.5!", color="#5E81AC"];
//v6 [pos="0.5,1.!", color="#5E81AC"];
v7 [pos="0.,0.5!", color="#5E81AC"];
v0 -- v1 [style=dotted];
v1 -- v2 [style=dotted];
v2 -- v3 [style=dotted];
v3 -- v0 [style=dotted];
v5 -- v7 [color="#5E81AC"];
}](../_images/graphviz-7c842d4fd5faaca307a0956a344d21d0271fb15d.png)
Case 3
![graph case4 {
node [shape=point, fontname="source code pro"];
edge [style=solid, penwidth=2];
v0 [pos="0.,0.!", fillcolor=white];
v1 [pos="1.,0.!", fillcolor=black];
v2 [pos="1.,1.!", fillcolor=white];
v3 [pos="0.,1.!", fillcolor=white];
v4 [pos="0.5,0.!", color="#5E81AC"];
v5 [pos="1.0,0.5!", color="#5E81AC"];
//v6 [pos="0.5,1.!", color="#5E81AC"];
//v7 [pos="0.,0.5!", color="#5E81AC"];
v0 -- v1 [style=dotted];
v1 -- v2 [style=dotted];
v2 -- v3 [style=dotted];
v3 -- v0 [style=dotted];
v4 -- v5 [color="#5E81AC"];
}](../_images/graphviz-a389fc11603254b939f6487f1f296ff74f1ac3f0.png)
Case 4
![graph case5 {
node [shape=point, fontname="source code pro"];
edge [style=solid, penwidth=2];
v0 [pos="0.,0.!", fillcolor=white];
v1 [pos="1.,0.!", fillcolor=black];
v2 [pos="1.,1.!", fillcolor=white];
v3 [pos="0.,1.!", fillcolor=black];
v4 [pos="0.5,0.!", color="#5E81AC"];
v5 [pos="1.0,0.5!", color="#5E81AC"];
v6 [pos="0.5,1.!", color="#5E81AC"];
v7 [pos="0.,0.5!", color="#5E81AC"];
v0 -- v1 [style=dotted];
v1 -- v2 [style=dotted];
v2 -- v3 [style=dotted];
v3 -- v0 [style=dotted];
v7 -- v4 [color="#5E81AC"];
v5 -- v6 [color="#5E81AC"];
}](../_images/graphviz-7d27cf563989e2ffe0c0a31af710ff7d687acbca.png)
Case 5
![graph case6 {
node [shape=point, fontname="source code pro"];
edge [style=solid, penwidth=2];
v0 [pos="0.,0.!", fillcolor=white];
v1 [pos="1.,0.!", fillcolor=black];
v2 [pos="1.,1.!", fillcolor=black];
v3 [pos="0.,1.!", fillcolor=white];
v4 [pos="0.5,0.!", color="#5E81AC"];
//v5 [pos="1.0,0.5!", color="#5E81AC"];
v6 [pos="0.5,1.!", color="#5E81AC"];
//v7 [pos="0.,0.5!", color="#5E81AC"];
v0 -- v1 [style=dotted];
v1 -- v2 [style=dotted];
v2 -- v3 [style=dotted];
v3 -- v0 [style=dotted];
v4 -- v6 [color="#5E81AC"];
}](../_images/graphviz-a9ff7624ab7de3a111315ae990ba43945c252ef7.png)
Case 6
![graph case7 {
node [shape=point, fontname="source code pro"];
edge [style=solid, penwidth=2];
v0 [pos="0.,0.!", fillcolor=white];
v1 [pos="1.,0.!", fillcolor=black];
v2 [pos="1.,1.!", fillcolor=black];
v3 [pos="0.,1.!", fillcolor=black];
v4 [pos="0.5,0.!", color="#5E81AC"];
//v5 [pos="1.0,0.5!", color="#5E81AC"];
//v6 [pos="0.5,1.!", color="#5E81AC"];
v7 [pos="0.,0.5!", color="#5E81AC"];
v0 -- v1 [style=dotted];
v1 -- v2 [style=dotted];
v2 -- v3 [style=dotted];
v3 -- v0 [style=dotted];
v4 -- v7 [color="#5E81AC"];
}](../_images/graphviz-de28d2ea635f30c6dfbe953b9ee423877c527d1d.png)
Case 7
![graph case8 {
node [shape=point, fontname="source code pro"];
edge [style=solid, penwidth=2];
v0 [pos="0.,0.!", fillcolor=black];
v1 [pos="1.,0.!", fillcolor=white];
v2 [pos="1.,1.!", fillcolor=white];
v3 [pos="0.,1.!", fillcolor=white];
v4 [pos="0.5,0.!", color="#5E81AC"];
//v5 [pos="1.0,0.5!", color="#5E81AC"];
//v6 [pos="0.5,1.!", color="#5E81AC"];
v7 [pos="0.,0.5!", color="#5E81AC"];
v0 -- v1 [style=dotted];
v1 -- v2 [style=dotted];
v2 -- v3 [style=dotted];
v3 -- v0 [style=dotted];
v7 -- v4 [color="#5E81AC"];
}](../_images/graphviz-07482198574a2a7d7768dbdc88d7a3d703816be8.png)
Case 8
![graph case9 {
node [shape=point, fontname="source code pro"];
edge [style=solid, penwidth=2];
v0 [pos="0.,0.!", fillcolor=black];
v1 [pos="1.,0.!", fillcolor=white];
v2 [pos="1.,1.!", fillcolor=white];
v3 [pos="0.,1.!", fillcolor=black];
v4 [pos="0.5,0.!", color="#5E81AC"];
//v5 [pos="1.0,0.5!", color="#5E81AC"];
v6 [pos="0.5,1.!", color="#5E81AC"];
//v7 [pos="0.,0.5!", color="#5E81AC"];
v0 -- v1 [style=dotted];
v1 -- v2 [style=dotted];
v2 -- v3 [style=dotted];
v3 -- v0 [style=dotted];
v6 -- v4 [color="#5E81AC"];
}](../_images/graphviz-8e3ebcaaa32d47b01d78e8454e4b9ea3f4cc5b96.png)
Case 9
![graph case10 {
node [shape=point, fontname="source code pro"];
edge [style=solid, penwidth=2];
v0 [pos="0.,0.!", fillcolor=black];
v1 [pos="1.,0.!", fillcolor=white];
v2 [pos="1.,1.!", fillcolor=black];
v3 [pos="0.,1.!", fillcolor=white];
v4 [pos="0.5,0.!", color="#5E81AC"];
v5 [pos="1.0,0.5!", color="#5E81AC"];
v6 [pos="0.5,1.!", color="#5E81AC"];
v7 [pos="0.,0.5!", color="#5E81AC"];
v0 -- v1 [style=dotted];
v1 -- v2 [style=dotted];
v2 -- v3 [style=dotted];
v3 -- v0 [style=dotted];
v4 -- v5 [color="#5E81AC"];
v6 -- v7 [color="#5E81AC"];
}](../_images/graphviz-b778109eef35646efff26bd61ce971a4650fd638.png)
Case 10
![graph case11 {
node [shape=point, fontname="source code pro"];
edge [style=solid, penwidth=2];
v0 [pos="0.,0.!", fillcolor=black];
v1 [pos="1.,0.!", fillcolor=white];
v2 [pos="1.,1.!", fillcolor=black];
v3 [pos="0.,1.!", fillcolor=bllack];
v4 [pos="0.5,0.!", color="#5E81AC"];
v5 [pos="1.0,0.5!", color="#5E81AC"];
//v6 [pos="0.5,1.!", color="#5E81AC"];
//v7 [pos="0.,0.5!", color="#5E81AC"];
v0 -- v1 [style=dotted];
v1 -- v2 [style=dotted];
v2 -- v3 [style=dotted];
v3 -- v0 [style=dotted];
v5 -- v4 [color="#5E81AC"];
}](../_images/graphviz-ffe53c4d1e7870891ededdfd4da378c3074fbd50.png)
Case 11
![graph case12 {
node [shape=point, fontname="source code pro"];
edge [style=solid, penwidth=2];
v0 [pos="0.,0.!", fillcolor=black];
v1 [pos="1.,0.!", fillcolor=black];
v2 [pos="1.,1.!", fillcolor=white];
v3 [pos="0.,1.!", fillcolor=white];
//v4 [pos="0.5,0.!", color="#5E81AC"];
v5 [pos="1.0,0.5!", color="#5E81AC"];
//v6 [pos="0.5,1.!", color="#5E81AC"];
v7 [pos="0.,0.5!", color="#5E81AC"];
v0 -- v1 [style=dotted];
v1 -- v2 [style=dotted];
v2 -- v3 [style=dotted];
v3 -- v0 [style=dotted];
v7 -- v5 [color="#5E81AC"];
}](../_images/graphviz-b5feb879fb4969777644bc006f4eac7f82fd1c31.png)
Case 12
![graph case13 {
node [shape=point, fontname="source code pro"];
edge [style=solid, penwidth=2];
v0 [pos="0.,0.!", fillcolor=black];
v1 [pos="1.,0.!", fillcolor=black];
v2 [pos="1.,1.!", fillcolor=white];
v3 [pos="0.,1.!", fillcolor=black];
//v4 [pos="0.5,0.!", color="#5E81AC"];
v5 [pos="1.0,0.5!", color="#5E81AC"];
v6 [pos="0.5,1.!", color="#5E81AC"];
//v7 [pos="0.,0.5!", color="#5E81AC"];
v0 -- v1 [style=dotted];
v1 -- v2 [style=dotted];
v2 -- v3 [style=dotted];
v3 -- v0 [style=dotted];
v6 -- v5 [color="#5E81AC"];
}](../_images/graphviz-dafcf73ae497a29f2f1775a1c5b094734d5219b2.png)
Case 13
![graph case1 {
node [shape=point, fontname="source code pro"];
edge [style=solid, penwidth=2];
v0 [pos="0.,0.!", fillcolor=black];
v1 [pos="1.,0.!", fillcolor=black];
v2 [pos="1.,1.!", fillcolor=black];
v3 [pos="0.,1.!", fillcolor=white];
//v4 [pos="0.5,0.!", color="#5E81AC"];
//v5 [pos="1.0,0.5!", color="#5E81AC"];
v6 [pos="0.5,1.!", color="#5E81AC"];
v7 [pos="0.,0.5!", color="#5E81AC"];
v0 -- v1 [style=dotted];
v1 -- v2 [style=dotted];
v2 -- v3 [style=dotted];
v3 -- v0 [style=dotted];
v7 -- v6 [color="#5E81AC"];
}](../_images/graphviz-a922cc1b7fa0c7c45d87cfdc8ab95bc7156c12ab.png)
Case 14
![graph case15 {
node [shape=point, fontname="source code pro"];
edge [style=solid, penwidth=2];
v0 [pos="0.,0.!", fillcolor=black];
v1 [pos="1.,0.!", fillcolor=black];
v2 [pos="1.,1.!", fillcolor=black];
v3 [pos="0.,1.!", fillcolor=black];
//v4 [pos="0.5,0.!", color="#5E81AC"];
//v5 [pos="1.0,0.5!", color="#5E81AC"];
//v6 [pos="0.5,1.!", color="#5E81AC"];
//v7 [pos="0.,0.5!", color="#5E81AC"];
v0 -- v1 [style=dotted];
v1 -- v2 [style=dotted];
v2 -- v3 [style=dotted];
v3 -- v0 [style=dotted];
}](../_images/graphviz-19241df789bd26afc3cf3335e71279b42f7e0e08.png)
Case 15
![graph legend {
node [shape=point, fontname="source code pro"];
edge [style=solid, penwidth=2];
v0 [pos="0.,1.!", fillcolor=black];
v1 [pos="0.,0.75!", fillcolor=white];
Inside [shape=plaintext, pos="0.6,1.!"];
Outside [shape=plaintext, pos="0.6,0.75!"];
blank [pos="0.,0!", color=white];
}](../_images/graphviz-46f8828434efc501ffac55b5a4fd16cf929f3290.png)
Triangle Lookup Table
![graph case0 {
node [shape=point, fontname="source code pro"];
edge [style=solid, penwidth=2];
v0 [pos="0.,0.!", fillcolor=white];
v1 [pos="1.,0.!", fillcolor=white];
v2 [pos="1.,1.!", fillcolor=white];
v3 [pos="0.,1.!", fillcolor=white];
//v4 [pos="0.5,0.!", color="#5E81AC"];
//v5 [pos="1.0,0.5!", color="#5E81AC"];
//v6 [pos="0.5,1.!", color="#5E81AC"];
//v7 [pos="0.,0.5!", color="#5E81AC"];
v0 -- v1 [style=dotted];
v1 -- v2 [style=dotted];
v2 -- v3 [style=dotted];
v3 -- v0 [style=dotted];
}](../_images/graphviz-4f8e990e31b2f9671002d240cfe3a79cc3e4e470.png)
Case 0
![graph case1 {
node [shape=point, fontname="source code pro"];
edge [style=solid, penwidth=2];
v0 [pos="0.,0.!", fillcolor=white];
v1 [pos="1.,0.!", fillcolor=white];
v2 [pos="1.,1.!", fillcolor=white];
v3 [pos="0.,1.!", fillcolor=black];
//v4 [pos="0.5,0.!", color="#5E81AC"];
//v5 [pos="1.0,0.5!", color="#5E81AC"];
v6 [pos="0.5,1.!", color="#5E81AC"];
v7 [pos="0.,0.5!", color="#5E81AC"];
v0 -- v1 [style=dotted];
v1 -- v2 [style=dotted];
v2 -- v3 [style=dotted];
v3 -- v0 [style=dotted];
v7 -- v6 [color="#5E81AC"];
v6 -- v3 [color="#5E81AC"];
v3 -- v7 [color="#5E81AC"];
}](../_images/graphviz-64b8ea8ae65c22057622e036b29836d711fc394b.png)
Case 1
![graph case2 {
node [shape=point, fontname="source code pro"];
edge [style=solid, penwidth=2];
v0 [pos="0.,0.!", fillcolor=white];
v1 [pos="1.,0.!", fillcolor=white];
v2 [pos="1.,1.!", fillcolor=black];
v3 [pos="0.,1.!", fillcolor=white];
//v4 [pos="0.5,0.!", color="#5E81AC"];
v5 [pos="1.0,0.5!", color="#5E81AC"];
v6 [pos="0.5,1.!", color="#5E81AC"];
//v7 [pos="0.,0.5!", color="#5E81AC"];
v0 -- v1 [style=dotted];
v1 -- v2 [style=dotted];
v2 -- v3 [style=dotted];
v3 -- v0 [style=dotted];
v5 -- v2 [color="#5E81AC"];
v2 -- v6 [color="#5E81AC"];
v6 -- v5 [color="#5E81AC"];
}](../_images/graphviz-8bcd071cd4e5565678a79fac3878c50a0fe5ff7c.png)
Case 2
![graph case3 {
node [shape=point, fontname="source code pro"];
edge [style=solid, penwidth=2];
v0 [pos="0.,0.!", fillcolor=white];
v1 [pos="1.,0.!", fillcolor=white];
v2 [pos="1.,1.!", fillcolor=black];
v3 [pos="0.,1.!", fillcolor=black];
//v4 [pos="0.5,0.!", color="#5E81AC"];
v5 [pos="1.0,0.5!", color="#5E81AC"];
//v6 [pos="0.5,1.!", color="#5E81AC"];
v7 [pos="0.,0.5!", color="#5E81AC"];
v0 -- v1 [style=dotted];
v1 -- v2 [style=dotted];
//v2 -- v3 [style=dotted];
v3 -- v0 [style=dotted];
v7 -- v5 [color="#5E81AC"];
v5 -- v2 [color="#5E81AC"];
v2 -- v7 [color="#5E81AC"];
v2 -- v3 [color="#5E81AC"];
v3 -- v7 [color="#5E81AC"];
}](../_images/graphviz-6c5cd0fb7194db2e84e46de59831b12fd23c2576.png)
Case 3
![graph case4 {
node [shape=point, fontname="source code pro"];
edge [style=solid, penwidth=2];
v0 [pos="0.,0.!", fillcolor=white];
v1 [pos="1.,0.!", fillcolor=black];
v2 [pos="1.,1.!", fillcolor=white];
v3 [pos="0.,1.!", fillcolor=white];
v4 [pos="0.5,0.!", color="#5E81AC"];
v5 [pos="1.0,0.5!", color="#5E81AC"];
//v6 [pos="0.5,1.!", color="#5E81AC"];
//v7 [pos="0.,0.5!", color="#5E81AC"];
v0 -- v1 [style=dotted];
v1 -- v2 [style=dotted];
v2 -- v3 [style=dotted];
v3 -- v0 [style=dotted];
v4 -- v1 [color="#5E81AC"];
v1 -- v5 [color="#5E81AC"];
v5 -- v4 [color="#5E81AC"];
}](../_images/graphviz-629e451d469b064175dfb2acee5c409caecaeec6.png)
Case 4
![graph case5 {
node [shape=point, fontname="source code pro"];
edge [style=solid, penwidth=2];
v0 [pos="0.,0.!", fillcolor=white];
v1 [pos="1.,0.!", fillcolor=black];
v2 [pos="1.,1.!", fillcolor=white];
v3 [pos="0.,1.!", fillcolor=black];
v4 [pos="0.5,0.!", color="#5E81AC"];
v5 [pos="1.0,0.5!", color="#5E81AC"];
v6 [pos="0.5,1.!", color="#5E81AC"];
v7 [pos="0.,0.5!", color="#5E81AC"];
v0 -- v1 [style=dotted];
v1 -- v2 [style=dotted];
v2 -- v3 [style=dotted];
v3 -- v0 [style=dotted];
v4 -- v1 [color="#5E81AC"];
v1 -- v5 [color="#5E81AC"];
v5 -- v4 [color="#5E81AC"];
v5 -- v6 [color="#5E81AC"];
v6 -- v4 [color="#5E81AC"];
v6 -- v7 [color="#5E81AC"];
v7 -- v4 [color="#5E81AC"];
v6 -- v3 [color="#5E81AC"];
v3 -- v7 [color="#5E81AC"];
}](../_images/graphviz-216d39051d6f46fb4efa2761fb48757c672872ee.png)
Case 5
![graph case6 {
node [shape=point, fontname="source code pro"];
edge [style=solid, penwidth=2];
v0 [pos="0.,0.!", fillcolor=white];
v1 [pos="1.,0.!", fillcolor=black];
v2 [pos="1.,1.!", fillcolor=black];
v3 [pos="0.,1.!", fillcolor=white];
v4 [pos="0.5,0.!", color="#5E81AC"];
//v5 [pos="1.0,0.5!", color="#5E81AC"];
v6 [pos="0.5,1.!", color="#5E81AC"];
//v7 [pos="0.,0.5!", color="#5E81AC"];
v0 -- v1 [style=dotted];
//v1 -- v2 [style=dotted];
v2 -- v3 [style=dotted];
v3 -- v0 [style=dotted];
v4 -- v1 [color="#5E81AC"];
v1 -- v2 [color="#5E81AC"];
v2 -- v4 [color="#5E81AC"];
v2 -- v6 [color="#5E81AC"];
v6 -- v4 [color="#5E81AC"];
}](../_images/graphviz-f166a8668556653b9e7ed5bdb68c250b08f26029.png)
Case 6
![graph case7 {
node [shape=point, fontname="source code pro"];
edge [style=solid, penwidth=2];
v0 [pos="0.,0.!", fillcolor=white];
v1 [pos="1.,0.!", fillcolor=black];
v2 [pos="1.,1.!", fillcolor=black];
v3 [pos="0.,1.!", fillcolor=black];
v4 [pos="0.5,0.!", color="#5E81AC"];
//v5 [pos="1.0,0.5!", color="#5E81AC"];
//v6 [pos="0.5,1.!", color="#5E81AC"];
v7 [pos="0.,0.5!", color="#5E81AC"];
v0 -- v1 [style=dotted];
//v1 -- v2 [style=dotted];
//v2 -- v3 [style=dotted];
v3 -- v0 [style=dotted];
v1 -- v2 [color="#5E81AC"];
v2 -- v3 [color="#5E81AC"];
v3 -- v1 [color="#5E81AC"];
v3 -- v4 [color="#5E81AC"];
v4 -- v1 [color="#5E81AC"];
v3 -- v7 [color="#5E81AC"];
v4 -- v7 [color="#5E81AC"];
}](../_images/graphviz-464b693ebe877134621ef7d305b72b905ef715d0.png)
Case 7
![graph case8 {
node [shape=point, fontname="source code pro"];
edge [style=solid, penwidth=2];
v0 [pos="0.,0.!", fillcolor=black];
v1 [pos="1.,0.!", fillcolor=white];
v2 [pos="1.,1.!", fillcolor=white];
v3 [pos="0.,1.!", fillcolor=white];
v4 [pos="0.5,0.!", color="#5E81AC"];
//v5 [pos="1.0,0.5!", color="#5E81AC"];
//v6 [pos="0.5,1.!", color="#5E81AC"];
v7 [pos="0.,0.5!", color="#5E81AC"];
v0 -- v1 [style=dotted];
v1 -- v2 [style=dotted];
v2 -- v3 [style=dotted];
v3 -- v0 [style=dotted];
v0 -- v4 [color="#5E81AC"];
v4 -- v7 [color="#5E81AC"];
v7 -- v0 [color="#5E81AC"];
}](../_images/graphviz-d9318d85dc45044dd457b5def4ec82135b966c67.png)
Case 8
![graph case9 {
node [shape=point, fontname="source code pro"];
edge [style=solid, penwidth=2];
v0 [pos="0.,0.!", fillcolor=black];
v1 [pos="1.,0.!", fillcolor=white];
v2 [pos="1.,1.!", fillcolor=white];
v3 [pos="0.,1.!", fillcolor=black];
v4 [pos="0.5,0.!", color="#5E81AC"];
//v5 [pos="1.0,0.5!", color="#5E81AC"];
v6 [pos="0.5,1.!", color="#5E81AC"];
//v7 [pos="0.,0.5!", color="#5E81AC"];
v0 -- v1 [style=dotted];
v1 -- v2 [style=dotted];
v2 -- v3 [style=dotted];
//v3 -- v0 [style=dotted];
v0 -- v4 [color="#5E81AC"];
v4 -- v6 [color="#5E81AC"];
v6 -- v0 [color="#5E81AC"];
v6 -- v3 [color="#5E81AC"];
v3 -- v0 [color="#5E81AC"];
}](../_images/graphviz-b78980b1f2d62282078ea12d64f4a32d58413148.png)
Case 9
![graph case10 {
node [shape=point, fontname="source code pro"];
edge [style=solid, penwidth=2];
v0 [pos="0.,0.!", fillcolor=black];
v1 [pos="1.,0.!", fillcolor=white];
v2 [pos="1.,1.!", fillcolor=black];
v3 [pos="0.,1.!", fillcolor=white];
v4 [pos="0.5,0.!", color="#5E81AC"];
v5 [pos="1.0,0.5!", color="#5E81AC"];
v6 [pos="0.5,1.!", color="#5E81AC"];
v7 [pos="0.,0.5!", color="#5E81AC"];
v0 -- v1 [style=dotted];
v1 -- v2 [style=dotted];
v2 -- v3 [style=dotted];
v3 -- v0 [style=dotted];
v0 -- v4 [color="#5E81AC"];
v4 -- v7 [color="#5E81AC"];
v7 -- v0 [color="#5E81AC"];
v4 -- v5 [color="#5E81AC"];
v5 -- v7 [color="#5E81AC"];
v5 -- v6 [color="#5E81AC"];
v6 -- v7 [color="#5E81AC"];
v5 -- v2 [color="#5E81AC"];
v2 -- v6 [color="#5E81AC"];
}](../_images/graphviz-df4a7926c6cdc18abeea6f39282726aa0a5c0ed8.png)
Case 10
![graph case11 {
node [shape=point, fontname="source code pro"];
edge [style=solid, penwidth=2];
v0 [pos="0.,0.!", fillcolor=black];
v1 [pos="1.,0.!", fillcolor=white];
v2 [pos="1.,1.!", fillcolor=black];
v3 [pos="0.,1.!", fillcolor=black];
v4 [pos="0.5,0.!", color="#5E81AC"];
v5 [pos="1.0,0.5!", color="#5E81AC"];
//v6 [pos="0.5,1.!", color="#5E81AC"];
//v7 [pos="0.,0.5!", color="#5E81AC"];
v0 -- v1 [style=dotted];
v1 -- v2 [style=dotted];
//v2 -- v3 [style=dotted];
//v3 -- v0 [style=dotted];
v0 -- v2 [color="#5E81AC"];
v2 -- v3 [color="#5E81AC"];
v3 -- v0 [color="#5E81AC"];
v0 -- v4 [color="#5E81AC"];
v4 -- v5 [color="#5E81AC"];
v5 -- v0 [color="#5E81AC"];
v5 -- v2 [color="#5E81AC"];
}](../_images/graphviz-70a040089e5f30a38499d64afb8610d165ee875a.png)
Case 11
![graph case12 {
node [shape=point, fontname="source code pro"];
edge [style=solid, penwidth=2];
v0 [pos="0.,0.!", fillcolor=black];
v1 [pos="1.,0.!", fillcolor=black];
v2 [pos="1.,1.!", fillcolor=white];
v3 [pos="0.,1.!", fillcolor=white];
//v4 [pos="0.5,0.!", color="#5E81AC"];
v5 [pos="1.0,0.5!", color="#5E81AC"];
//v6 [pos="0.5,1.!", color="#5E81AC"];
v7 [pos="0.,0.5!", color="#5E81AC"];
//v0 -- v1 [style=dotted];
v1 -- v2 [style=dotted];
v2 -- v3 [style=dotted];
v3 -- v0 [style=dotted];
v0 -- v1 [color="#5E81AC"];
v1 -- v5 [color="#5E81AC"];
v5 -- v0 [color="#5E81AC"];
v5 -- v7 [color="#5E81AC"];
v7 -- v0 [color="#5E81AC"];
}](../_images/graphviz-e454fb62396a1207247997076bdcd7275ae734e4.png)
Case 12
![graph case13 {
node [shape=point, fontname="source code pro"];
edge [style=solid, penwidth=2];
v0 [pos="0.,0.!", fillcolor=black];
v1 [pos="1.,0.!", fillcolor=black];
v2 [pos="1.,1.!", fillcolor=white];
v3 [pos="0.,1.!", fillcolor=black];
//v4 [pos="0.5,0.!", color="#5E81AC"];
v5 [pos="1.0,0.5!", color="#5E81AC"];
v6 [pos="0.5,1.!", color="#5E81AC"];
//v7 [pos="0.,0.5!", color="#5E81AC"];
//v0 -- v1 [style=dotted];
v1 -- v2 [style=dotted];
v2 -- v3 [style=dotted];
//v3 -- v0 [style=dotted];
v0 -- v1 [color="#5E81AC"];
v1 -- v3 [color="#5E81AC"];
v3 -- v0 [color="#5E81AC"];
v1 -- v5 [color="#5E81AC"];
v5 -- v6 [color="#5E81AC"];
v6 -- v1 [color="#5E81AC"];
v6 -- v3 [color="#5E81AC"];
}](../_images/graphviz-3a13a56eb33664700ac7fd12ccafd1d3bd7531c2.png)
Case 13
![graph case1 {
node [shape=point, fontname="source code pro"];
edge [style=solid, penwidth=2];
v0 [pos="0.,0.!", fillcolor=black];
v1 [pos="1.,0.!", fillcolor=black];
v2 [pos="1.,1.!", fillcolor=black];
v3 [pos="0.,1.!", fillcolor=white];
//v4 [pos="0.5,0.!", color="#5E81AC"];
//v5 [pos="1.0,0.5!", color="#5E81AC"];
v6 [pos="0.5,1.!", color="#5E81AC"];
v7 [pos="0.,0.5!", color="#5E81AC"];
//v0 -- v1 [style=dotted];
//v1 -- v2 [style=dotted];
v2 -- v3 [style=dotted];
v3 -- v0 [style=dotted];
v0 -- v1 [color="#5E81AC"];
v1 -- v2 [color="#5E81AC"];
v2 -- v0 [color="#5E81AC"];
v2 -- v6 [color="#5E81AC"];
v6 -- v0 [color="#5E81AC"];
v6 -- v7 [color="#5E81AC"];
v7 -- v0 [color="#5E81AC"];
}](../_images/graphviz-cfaf507140bdf06cf780d5d085e3b1184be048b8.png)
Case 14
![graph case15 {
node [shape=point, fontname="source code pro"];
edge [style=solid, penwidth=2];
v0 [pos="0.,0.!", fillcolor=black];
v1 [pos="1.,0.!", fillcolor=black];
v2 [pos="1.,1.!", fillcolor=black];
v3 [pos="0.,1.!", fillcolor=black];
//v4 [pos="0.5,0.!", color="#5E81AC"];
//v5 [pos="1.0,0.5!", color="#5E81AC"];
//v6 [pos="0.5,1.!", color="#5E81AC"];
//v7 [pos="0.,0.5!", color="#5E81AC"];
v0 -- v1 [color="#5E81AC"];
v1 -- v2 [color="#5E81AC"];
v2 -- v3 [color="#5E81AC"];
v3 -- v0 [color="#5E81AC"];
v0 -- v2 [color="#5E81AC"];
}](../_images/graphviz-1ab9527a1cb03b5eedb9d2fec7af934ca2540494.png)
Case 15
![graph legend {
node [shape=point, fontname="source code pro"];
edge [style=solid, penwidth=2];
v0 [pos="0.,1.!", fillcolor=black];
v1 [pos="0.,0.75!", fillcolor=white];
Inside [shape=plaintext, pos="0.6,1.!"];
Outside [shape=plaintext, pos="0.6,0.75!"];
blank [pos="0.,0!", color=white];
}](../_images/graphviz-46f8828434efc501ffac55b5a4fd16cf929f3290.png)
Marching Cubes#
Lorensen and Cline [LC87]
See also MarchingCubes()
For a cube, there are \(2^8 = 256\) possible combinations of vertices falling inside or outside of the surface, however by rotations and inversion, this can be reduced to 15 unique triangulations.
Marching Cubes Lookup Table
![graph case0 {
node [shape=point, fontname="source code pro"];
edge [style=solid, penwidth=2];
v0 [pos="0.4,0.5!", fillcolor=white];
v1 [pos="1.4,0.5!", fillcolor=white];
v2 [pos="1.8,0.9!", fillcolor=white];
v3 [pos="0.8,0.9!", fillcolor=white];
v4 [pos="0.4,1.5!", fillcolor=white];
v5 [pos="1.4,1.5!", fillcolor=white];
v6 [pos="1.8,1.9!", fillcolor=white];
v7 [pos="0.8,1.9!", fillcolor=white];
// bottom edges
//e0 [pos="0.9, 0.5!", color="#5E81AC"];
//e1 [pos="1.6, 0.7!", color="#5E81AC"];
//e2 [pos="1.3, 0.9!", color="#5E81AC"];
//e3 [pos="0.6, 0.7!", color="#5E81AC"];
// middle edges
//e4 [pos="0.4, 1.0!", color="#5E81AC"];
//e5 [pos="1.4, 1.0!" color="#5E81AC"];
//e6 [pos="1.8, 1.4!", color="#5E81AC"];
//e7 [pos="0.8, 1.4!", color="#5E81AC"];
// top edges
//e8 [pos="0.9, 1.5!", color="#5E81AC"];
//e9 [pos="1.6, 1.7!", color="#5E81AC"];
//e10 [pos="1.3, 1.9!", color="#5E81AC"];
//e11 [pos="0.6, 1.7!", color="#5E81AC"];
v0 -- v1 [style=solid];
v1 -- v2 [style=solid];
v2 -- v3 [style=dotted];
v3 -- v0 [style=dotted];
v0 -- v4 [style=solid];
v1 -- v5 [style=solid];
v2 -- v6 [style=solid];
v3 -- v7 [style=dotted];
v4 -- v5 [style=solid];
v5 -- v6 [style=solid];
v6 -- v7 [style=solid];
v7 -- v4 [style=solid];
}](../_images/graphviz-8135f8ac0f321494cc9e3b193835527e3b7b3088.png)
Case 0
![graph case1 {
node [shape=point, fontname="source code pro"];
edge [style=solid, penwidth=2];
v0 [pos="0.4,0.5!", fillcolor=black];
v1 [pos="1.4,0.5!", fillcolor=white];
v2 [pos="1.8,0.9!", fillcolor=white];
v3 [pos="0.8,0.9!", fillcolor=white];
v4 [pos="0.4,1.5!", fillcolor=white];
v5 [pos="1.4,1.5!", fillcolor=white];
v6 [pos="1.8,1.9!", fillcolor=white];
v7 [pos="0.8,1.9!", fillcolor=white];
// bottom edges
e0 [pos="0.9, 0.5!", color="#5E81AC"];
//e1 [pos="1.6, 0.7!", color="#5E81AC"];
//e2 [pos="1.3, 0.9!", color="#5E81AC"];
e3 [pos="0.6, 0.7!", color="#5E81AC"];
// middle edges
e4 [pos="0.4, 1.0!", color="#5E81AC"];
//e5 [pos="1.4, 1.0!" color="#5E81AC"];
//e6 [pos="1.8, 1.4!", color="#5E81AC"];
//e7 [pos="0.8, 1.4!", color="#5E81AC"];
// top edges
//e8 [pos="0.9, 1.5!", color="#5E81AC"];
//e9 [pos="1.6, 1.7!", color="#5E81AC"];
//e10 [pos="1.3, 1.9!", color="#5E81AC"];
//e11 [pos="0.6, 1.7!", color="#5E81AC"];
v0 -- v1 [style=solid];
v1 -- v2 [style=solid];
v2 -- v3 [style=dotted];
v3 -- v0 [style=dotted];
v0 -- v4 [style=solid];
v1 -- v5 [style=solid];
v2 -- v6 [style=solid];
v3 -- v7 [style=dotted];
v4 -- v5 [style=solid];
v5 -- v6 [style=solid];
v6 -- v7 [style=solid];
v7 -- v4 [style=solid];
e0 -- e3 [color="#5E81AC"];
e3 -- e4 [color="#5E81AC"];
e4 -- e0 [color="#5E81AC"];
}](../_images/graphviz-661c502a1de394618de4d3adef3cf48e94f8f257.png)
Case 1
![graph case2 {
node [shape=point, fontname="source code pro"];
edge [style=solid, penwidth=2];
v0 [pos="0.4,0.5!", fillcolor=black];
v1 [pos="1.4,0.5!", fillcolor=black];
v2 [pos="1.8,0.9!", fillcolor=white];
v3 [pos="0.8,0.9!", fillcolor=white];
v4 [pos="0.4,1.5!", fillcolor=white];
v5 [pos="1.4,1.5!", fillcolor=white];
v6 [pos="1.8,1.9!", fillcolor=white];
v7 [pos="0.8,1.9!", fillcolor=white];
// bottom edges
//e0 [pos="0.9, 0.5!", color="#5E81AC"];
e1 [pos="1.6, 0.7!", color="#5E81AC"];
//e2 [pos="1.3, 0.9!", color="#5E81AC"];
e3 [pos="0.6, 0.7!", color="#5E81AC"];
// middle edges
e4 [pos="0.4, 1.0!", color="#5E81AC"];
e5 [pos="1.4, 1.0!" color="#5E81AC"];
//e6 [pos="1.8, 1.4!", color="#5E81AC"];
//e7 [pos="0.8, 1.4!", color="#5E81AC"];
// top edges
//e8 [pos="0.9, 1.5!", color="#5E81AC"];
//e9 [pos="1.6, 1.7!", color="#5E81AC"];
//e10 [pos="1.3, 1.9!", color="#5E81AC"];
//e11 [pos="0.6, 1.7!", color="#5E81AC"];
v0 -- v1 [style=solid];
v1 -- v2 [style=solid];
v2 -- v3 [style=dotted];
v3 -- v0 [style=dotted];
v0 -- v4 [style=solid];
v1 -- v5 [style=solid];
v2 -- v6 [style=solid];
v3 -- v7 [style=dotted];
v4 -- v5 [style=solid];
v5 -- v6 [style=solid];
v6 -- v7 [style=solid];
v7 -- v4 [style=solid];
e1 -- e3 [color="#5E81AC"];
e3 -- e5 [color="#5E81AC"];
e5 -- e1 [color="#5E81AC"];
e3 -- e4 [color="#5E81AC"];
e4 -- e5 [color="#5E81AC"];
}](../_images/graphviz-1ba7c782e484c2ab43f697dab3fcf9cbfa0695b8.png)
Case 2
![graph case1 {
node [shape=point, fontname="source code pro"];
edge [style=solid, penwidth=2];
v0 [pos="0.4,0.5!", fillcolor=black];
v1 [pos="1.4,0.5!", fillcolor=white];
v2 [pos="1.8,0.9!", fillcolor=white];
v3 [pos="0.8,0.9!", fillcolor=white];
v4 [pos="0.4,1.5!", fillcolor=white];
v5 [pos="1.4,1.5!", fillcolor=black];
v6 [pos="1.8,1.9!", fillcolor=white];
v7 [pos="0.8,1.9!", fillcolor=white];
// bottom edges
e0 [pos="0.9, 0.5!", color="#5E81AC"];
//e1 [pos="1.6, 0.7!", color="#5E81AC"];
//e2 [pos="1.3, 0.9!", color="#5E81AC"];
e3 [pos="0.6, 0.7!", color="#5E81AC"];
// middle edges
e4 [pos="0.4, 1.0!", color="#5E81AC"];
e5 [pos="1.4, 1.0!" color="#5E81AC"];
//e6 [pos="1.8, 1.4!", color="#5E81AC"];
//e7 [pos="0.8, 1.4!", color="#5E81AC"];
// top edges
e8 [pos="0.9, 1.5!", color="#5E81AC"];
e9 [pos="1.6, 1.7!", color="#5E81AC"];
//e10 [pos="1.3, 1.9!", color="#5E81AC"];
//e11 [pos="0.6, 1.7!", color="#5E81AC"];
v0 -- v1 [style=solid];
v1 -- v2 [style=solid];
v2 -- v3 [style=dotted];
v3 -- v0 [style=dotted];
v0 -- v4 [style=solid];
v1 -- v5 [style=solid];
v2 -- v6 [style=solid];
v3 -- v7 [style=dotted];
v4 -- v5 [style=solid];
v5 -- v6 [style=solid];
v6 -- v7 [style=solid];
v7 -- v4 [style=solid];
e0 -- e3 [color="#5E81AC"];
e3 -- e4 [color="#5E81AC"];
e4 -- e0 [color="#5E81AC"];
e5 -- e8 [color="#5E81AC"];
e8 -- e9 [color="#5E81AC"];
e9 -- e5 [color="#5E81AC"];
}](../_images/graphviz-860fee7e067f6f21675cb12fc5e57cfaa2cff586.png)
Case 3
![graph case4 {
node [shape=point, fontname="source code pro"];
edge [style=solid, penwidth=2];
v0 [pos="0.4,0.5!", fillcolor=black];
v1 [pos="1.4,0.5!", fillcolor=white];
v2 [pos="1.8,0.9!", fillcolor=white];
v3 [pos="0.8,0.9!", fillcolor=white];
v4 [pos="0.4,1.5!", fillcolor=white];
v5 [pos="1.4,1.5!", fillcolor=white];
v6 [pos="1.8,1.9!", fillcolor=black];
v7 [pos="0.8,1.9!", fillcolor=white];
// bottom edges
e0 [pos="0.9, 0.5!", color="#5E81AC"];
//e1 [pos="1.6, 0.7!", color="#5E81AC"];
//e2 [pos="1.3, 0.9!", color="#5E81AC"];
e3 [pos="0.6, 0.7!", color="#5E81AC"];
// middle edges
e4 [pos="0.4, 1.0!", color="#5E81AC"];
//e5 [pos="1.4, 1.0!" color="#5E81AC"];
e6 [pos="1.8, 1.4!", color="#5E81AC"];
//e7 [pos="0.8, 1.4!", color="#5E81AC"];
// top edges
//e8 [pos="0.9, 1.5!", color="#5E81AC"];
e9 [pos="1.6, 1.7!", color="#5E81AC"];
e10 [pos="1.3, 1.9!", color="#5E81AC"];
//e11 [pos="0.6, 1.7!", color="#5E81AC"];
v0 -- v1 [style=solid];
v1 -- v2 [style=solid];
v2 -- v3 [style=dotted];
v3 -- v0 [style=dotted];
v0 -- v4 [style=solid];
v1 -- v5 [style=solid];
v2 -- v6 [style=solid];
v3 -- v7 [style=dotted];
v4 -- v5 [style=solid];
v5 -- v6 [style=solid];
v6 -- v7 [style=solid];
v7 -- v4 [style=solid];
e0 -- e3 [color="#5E81AC"];
e3 -- e4 [color="#5E81AC"];
e4 -- e0 [color="#5E81AC"];
e6 -- e9 [color="#5E81AC"];
e9 -- e10 [color="#5E81AC"];
e10 -- e6 [color="#5E81AC"];
}](../_images/graphviz-6f30955ce0d0444ac5850ee844c2f77885f3cdda.png)
Case 4
![graph case5 {
node [shape=point, fontname="source code pro"];
edge [style=solid, penwidth=2];
v0 [pos="0.4,0.5!", fillcolor=white];
v1 [pos="1.4,0.5!", fillcolor=black];
v2 [pos="1.8,0.9!", fillcolor=black];
v3 [pos="0.8,0.9!", fillcolor=black];
v4 [pos="0.4,1.5!", fillcolor=white];
v5 [pos="1.4,1.5!", fillcolor=white];
v6 [pos="1.8,1.9!", fillcolor=white];
v7 [pos="0.8,1.9!", fillcolor=white];
// bottom edges
e0 [pos="0.9, 0.5!", color="#5E81AC"];
//e1 [pos="1.6, 0.7!", color="#5E81AC"];
//e2 [pos="1.3, 0.9!", color="#5E81AC"];
e3 [pos="0.6, 0.7!", color="#5E81AC"];
// middle edges
//e4 [pos="0.4, 1.0!", color="#5E81AC"];
e5 [pos="1.4, 1.0!" color="#5E81AC"];
e6 [pos="1.8, 1.4!", color="#5E81AC"];
e7 [pos="0.8, 1.4!", color="#5E81AC"];
// top edges
//e8 [pos="0.9, 1.5!", color="#5E81AC"];
//e9 [pos="1.6, 1.7!", color="#5E81AC"];
//e10 [pos="1.3, 1.9!", color="#5E81AC"];
//e11 [pos="0.6, 1.7!", color="#5E81AC"];
v0 -- v1 [style=solid];
v1 -- v2 [style=solid];
v2 -- v3 [style=dotted];
v3 -- v0 [style=dotted];
v0 -- v4 [style=solid];
v1 -- v5 [style=solid];
v2 -- v6 [style=solid];
v3 -- v7 [style=dotted];
v4 -- v5 [style=solid];
v5 -- v6 [style=solid];
v6 -- v7 [style=solid];
v7 -- v4 [style=solid];
e0 -- e3 [color="#5E81AC"];
e3 -- e5 [color="#5E81AC"];
e5 -- e0 [color="#5E81AC"];
e5 -- e7 [color="#5E81AC"];
e5 -- e6 [color="#5E81AC"];
e6 -- e7 [color="#5E81AC"];
e3 -- e7 [color="#5E81AC"];
}](../_images/graphviz-bd0b19620d219aa71d87415b33a015d4af8a4898.png)
Case 5
![graph case6 {
node [shape=point, fontname="source code pro"];
edge [style=solid, penwidth=2];
v0 [pos="0.4,0.5!", fillcolor=black];
v1 [pos="1.4,0.5!", fillcolor=black];
v2 [pos="1.8,0.9!", fillcolor=white];
v3 [pos="0.8,0.9!", fillcolor=white];
v4 [pos="0.4,1.5!", fillcolor=white];
v5 [pos="1.4,1.5!", fillcolor=white];
v6 [pos="1.8,1.9!", fillcolor=black];
v7 [pos="0.8,1.9!", fillcolor=white];
// bottom edges
//e0 [pos="0.9, 0.5!", color="#5E81AC"];
e1 [pos="1.6, 0.7!", color="#5E81AC"];
//e2 [pos="1.3, 0.9!", color="#5E81AC"];
e3 [pos="0.6, 0.7!", color="#5E81AC"];
// middle edges
e4 [pos="0.4, 1.0!", color="#5E81AC"];
e5 [pos="1.4, 1.0!" color="#5E81AC"];
e6 [pos="1.8, 1.4!", color="#5E81AC"];
//e7 [pos="0.8, 1.4!", color="#5E81AC"];
// top edges
//e8 [pos="0.9, 1.5!", color="#5E81AC"];
e9 [pos="1.6, 1.7!", color="#5E81AC"];
e10 [pos="1.3, 1.9!", color="#5E81AC"];
//e11 [pos="0.6, 1.7!", color="#5E81AC"];
v0 -- v1 [style=solid];
v1 -- v2 [style=solid];
v2 -- v3 [style=dotted];
v3 -- v0 [style=dotted];
v0 -- v4 [style=solid];
v1 -- v5 [style=solid];
v2 -- v6 [style=solid];
v3 -- v7 [style=dotted];
v4 -- v5 [style=solid];
v5 -- v6 [style=solid];
v6 -- v7 [style=solid];
v7 -- v4 [style=solid];
e3 -- e1 [color="#5E81AC"];
e1 -- e5 [color="#5E81AC"];
e5 -- e3 [color="#5E81AC"];
e4 -- e5 [color="#5E81AC"];
e4 -- e3 [color="#5E81AC"];
e6 -- e9 [color="#5E81AC"];
e9 -- e10 [color="#5E81AC"];
e10 -- e6 [color="#5E81AC"];
}](../_images/graphviz-cf64ef96611399a6bf834c7896b7f6f7f62df450.png)
Case 6
![graph case7 {
node [shape=point, fontname="source code pro"];
edge [style=solid, penwidth=2];
v0 [pos="0.4,0.5!", fillcolor=white];
v1 [pos="1.4,0.5!", fillcolor=black];
v2 [pos="1.8,0.9!", fillcolor=white];
v3 [pos="0.8,0.9!", fillcolor=white];
v4 [pos="0.4,1.5!", fillcolor=black];
v5 [pos="1.4,1.5!", fillcolor=white];
v6 [pos="1.8,1.9!", fillcolor=black];
v7 [pos="0.8,1.9!", fillcolor=white];
// bottom edges
e0 [pos="0.9, 0.5!", color="#5E81AC"];
e1 [pos="1.6, 0.7!", color="#5E81AC"];
//e2 [pos="1.3, 0.9!", color="#5E81AC"];
//e3 [pos="0.6, 0.7!", color="#5E81AC"];
// middle edges
e4 [pos="0.4, 1.0!", color="#5E81AC"];
e5 [pos="1.4, 1.0!" color="#5E81AC"];
e6 [pos="1.8, 1.4!", color="#5E81AC"];
//e7 [pos="0.8, 1.4!", color="#5E81AC"];
// top edges
e8 [pos="0.9, 1.5!", color="#5E81AC"];
e9 [pos="1.6, 1.7!", color="#5E81AC"];
e10 [pos="1.3, 1.9!", color="#5E81AC"];
e11 [pos="0.6, 1.7!", color="#5E81AC"];
v0 -- v1 [style=solid];
v1 -- v2 [style=solid];
v2 -- v3 [style=dotted];
v3 -- v0 [style=dotted];
v0 -- v4 [style=solid];
v1 -- v5 [style=solid];
v2 -- v6 [style=solid];
v3 -- v7 [style=dotted];
v4 -- v5 [style=solid];
v5 -- v6 [style=solid];
v6 -- v7 [style=solid];
v7 -- v4 [style=solid];
e0 -- e1 [color="#5E81AC"];
e1 -- e5 [color="#5E81AC"];
e5 -- e0 [color="#5E81AC"];
e4 -- e8 [color="#5E81AC"];
e8 -- e11 [color="#5E81AC"];
e11 -- e4 [color="#5E81AC"];
e6 -- e9 [color="#5E81AC"];
e9 -- e10 [color="#5E81AC"];
e10 -- e6 [color="#5E81AC"];
}](../_images/graphviz-235ca4eca4e81eca0ed76941ddd43212d701d787.png)
Case 7
![graph case8 {
node [shape=point, fontname="source code pro"];
edge [style=solid, penwidth=2];
v0 [pos="0.4,0.5!", fillcolor=black];
v1 [pos="1.4,0.5!", fillcolor=black];
v2 [pos="1.8,0.9!", fillcolor=black];
v3 [pos="0.8,0.9!", fillcolor=black];
v4 [pos="0.4,1.5!", fillcolor=white];
v5 [pos="1.4,1.5!", fillcolor=white];
v6 [pos="1.8,1.9!", fillcolor=white];
v7 [pos="0.8,1.9!", fillcolor=white];
// bottom edges
//e0 [pos="0.9, 0.5!", color="#5E81AC"];
//e1 [pos="1.6, 0.7!", color="#5E81AC"];
//e2 [pos="1.3, 0.9!", color="#5E81AC"];
//e3 [pos="0.6, 0.7!", color="#5E81AC"];
// middle edges
e4 [pos="0.4, 1.0!", color="#5E81AC"];
e5 [pos="1.4, 1.0!" color="#5E81AC"];
e6 [pos="1.8, 1.4!", color="#5E81AC"];
e7 [pos="0.8, 1.4!", color="#5E81AC"];
// top edges
//e8 [pos="0.9, 1.5!", color="#5E81AC"];
//e9 [pos="1.6, 1.7!", color="#5E81AC"];
//e10 [pos="1.3, 1.9!", color="#5E81AC"];
//e11 [pos="0.6, 1.7!", color="#5E81AC"];
v0 -- v1 [style=solid];
v1 -- v2 [style=solid];
v2 -- v3 [style=dotted];
v3 -- v0 [style=dotted];
v0 -- v4 [style=solid];
v1 -- v5 [style=solid];
v2 -- v6 [style=solid];
v3 -- v7 [style=dotted];
v4 -- v5 [style=solid];
v5 -- v6 [style=solid];
v6 -- v7 [style=solid];
v7 -- v4 [style=solid];
e4 -- e5 [color="#5E81AC"];
e5 -- e6 [color="#5E81AC"];
e6 -- e4 [color="#5E81AC"];
e4 -- e7 [color="#5E81AC"];
e7 -- e6 [color="#5E81AC"];
}](../_images/graphviz-fd5bcc93b23f955f21c275c024c6175e3c11aef2.png)
Case 8
![graph case9 {
node [shape=point, fontname="source code pro"];
edge [style=solid, penwidth=2];
v0 [pos="0.4,0.5!", fillcolor=black];
v1 [pos="1.4,0.5!", fillcolor=white];
v2 [pos="1.8,0.9!", fillcolor=black];
v3 [pos="0.8,0.9!", fillcolor=black];
v4 [pos="0.4,1.5!", fillcolor=white];
v5 [pos="1.4,1.5!", fillcolor=white];
v6 [pos="1.8,1.9!", fillcolor=white];
v7 [pos="0.8,1.9!", fillcolor=black];
// bottom edges
e0 [pos="0.9, 0.5!", color="#5E81AC"];
e1 [pos="1.6, 0.7!", color="#5E81AC"];
//e2 [pos="1.3, 0.9!", color="#5E81AC"];
//e3 [pos="0.6, 0.7!", color="#5E81AC"];
// middle edges
e4 [pos="0.4, 1.0!", color="#5E81AC"];
//e5 [pos="1.4, 1.0!" color="#5E81AC"];
e6 [pos="1.8, 1.4!", color="#5E81AC"];
//e7 [pos="0.8, 1.4!", color="#5E81AC"];
// top edges
//e8 [pos="0.9, 1.5!", color="#5E81AC"];
//e9 [pos="1.6, 1.7!", color="#5E81AC"];
e10 [pos="1.3, 1.9!", color="#5E81AC"];
e11 [pos="0.6, 1.7!", color="#5E81AC"];
v0 -- v1 [style=solid];
v1 -- v2 [style=solid];
v2 -- v3 [style=dotted];
v3 -- v0 [style=dotted];
v0 -- v4 [style=solid];
v1 -- v5 [style=solid];
v2 -- v6 [style=solid];
v3 -- v7 [style=dotted];
v4 -- v5 [style=solid];
v5 -- v6 [style=solid];
v6 -- v7 [style=solid];
v7 -- v4 [style=solid];
e0 -- e1 [color="#5E81AC"];
e1 -- e6 [color="#5E81AC"];
e6 -- e0 [color="#5E81AC"];
e0 -- e10 [color="#5E81AC"];
e10 -- e6 [color="#5E81AC"];
e0 -- e4 [color="#5E81AC"];
e4 -- e11 [color="#5E81AC"];
e11 -- e10 [color="#5E81AC"];
e4 -- e10 [color="#5E81AC"];
}](../_images/graphviz-291f256a0c13b706b239e86885e6b3acbdb2525a.png)
Case 9
![graph case10 {
node [shape=point, fontname="source code pro"];
edge [style=solid, penwidth=2];
v0 [pos="0.4,0.5!", fillcolor=black];
v1 [pos="1.4,0.5!", fillcolor=white];
v2 [pos="1.8,0.9!", fillcolor=black];
v3 [pos="0.8,0.9!", fillcolor=white];
v4 [pos="0.4,1.5!", fillcolor=black];
v5 [pos="1.4,1.5!", fillcolor=white];
v6 [pos="1.8,1.9!", fillcolor=black];
v7 [pos="0.8,1.9!", fillcolor=white];
// bottom edges
e0 [pos="0.9, 0.5!", color="#5E81AC"];
e1 [pos="1.6, 0.7!", color="#5E81AC"];
e2 [pos="1.3, 0.9!", color="#5E81AC"];
e3 [pos="0.6, 0.7!", color="#5E81AC"];
// middle edges
//e4 [pos="0.4, 1.0!", color="#5E81AC"];
//e5 [pos="1.4, 1.0!" color="#5E81AC"];
//e6 [pos="1.8, 1.4!", color="#5E81AC"];
//e7 [pos="0.8, 1.4!", color="#5E81AC"];
// top edges
e8 [pos="0.9, 1.5!", color="#5E81AC"];
e9 [pos="1.6, 1.7!", color="#5E81AC"];
e10 [pos="1.3, 1.9!", color="#5E81AC"];
e11 [pos="0.6, 1.7!", color="#5E81AC"];
v0 -- v1 [style=solid];
v1 -- v2 [style=solid];
v2 -- v3 [style=dotted];
v3 -- v0 [style=dotted];
v0 -- v4 [style=solid];
v1 -- v5 [style=solid];
v2 -- v6 [style=solid];
v3 -- v7 [style=dotted];
v4 -- v5 [style=solid];
v5 -- v6 [style=solid];
v6 -- v7 [style=solid];
v7 -- v4 [style=solid];
e0 -- e3 [color="#5E81AC"];
e3 -- e8 [color="#5E81AC"];
e8 -- e0 [color="#5E81AC"];
e8 -- e11 [color="#5E81AC"];
e11 -- e3 [color="#5E81AC"];
e1 -- e2 [color="#5E81AC"];
e2 -- e9 [color="#5E81AC"];
e9 -- e1 [color="#5E81AC"];
e9 -- e10 [color="#5E81AC"];
e10 -- e2 [color="#5E81AC"];
}](../_images/graphviz-9eab86fd86347227da74dc2e6a619dbca4c7bfc7.png)
Case 10
![graph case11 {
node [shape=point, fontname="source code pro"];
edge [style=solid, penwidth=2];
v0 [pos="0.4,0.5!", fillcolor=black];
v1 [pos="1.4,0.5!", fillcolor=white];
v2 [pos="1.8,0.9!", fillcolor=black];
v3 [pos="0.8,0.9!", fillcolor=black];
v4 [pos="0.4,1.5!", fillcolor=white];
v5 [pos="1.4,1.5!", fillcolor=white];
v6 [pos="1.8,1.9!", fillcolor=black];
v7 [pos="0.8,1.9!", fillcolor=white];
// bottom edges
e0 [pos="0.9, 0.5!", color="#5E81AC"];
e1 [pos="1.6, 0.7!", color="#5E81AC"];
//e2 [pos="1.3, 0.9!", color="#5E81AC"];
//e3 [pos="0.6, 0.7!", color="#5E81AC"];
// middle edges
e4 [pos="0.4, 1.0!", color="#5E81AC"];
//e5 [pos="1.4, 1.0!" color="#5E81AC"];
//e6 [pos="1.8, 1.4!", color="#5E81AC"];
e7 [pos="0.8, 1.4!", color="#5E81AC"];
// top edges
//e8 [pos="0.9, 1.5!", color="#5E81AC"];
e9 [pos="1.6, 1.7!", color="#5E81AC"];
e10 [pos="1.3, 1.9!", color="#5E81AC"];
//e11 [pos="0.6, 1.7!", color="#5E81AC"];
v0 -- v1 [style=solid];
v1 -- v2 [style=solid];
v2 -- v3 [style=dotted];
v3 -- v0 [style=dotted];
v0 -- v4 [style=solid];
v1 -- v5 [style=solid];
v2 -- v6 [style=solid];
v3 -- v7 [style=dotted];
v4 -- v5 [style=solid];
v5 -- v6 [style=solid];
v6 -- v7 [style=solid];
v7 -- v4 [style=solid];
e0 -- e1 [color="#5E81AC"];
e1 -- e9 [color="#5E81AC"];
e9 -- e0 [color="#5E81AC"];
e0 -- e4 [color="#5E81AC"];
e4 -- e7 [color="#5E81AC"];
e7 -- e0 [color="#5E81AC"];
e7 -- e10 [color="#5E81AC"];
e10 -- e9 [color="#5E81AC"];
e9 -- e7 [color="#5E81AC"];
}](../_images/graphviz-9e95e069d68c015b4541853f9f50593061a8f59f.png)
Case 11
![graph case12 {
node [shape=point, fontname="source code pro"];
edge [style=solid, penwidth=2];
v0 [pos="0.4,0.5!", fillcolor=white];
v1 [pos="1.4,0.5!", fillcolor=black];
v2 [pos="1.8,0.9!", fillcolor=black];
v3 [pos="0.8,0.9!", fillcolor=black];
v4 [pos="0.4,1.5!", fillcolor=black];
v5 [pos="1.4,1.5!", fillcolor=white];
v6 [pos="1.8,1.9!", fillcolor=white];
v7 [pos="0.8,1.9!", fillcolor=white];
// bottom edges
e0 [pos="0.9, 0.5!", color="#5E81AC"];
//e1 [pos="1.6, 0.7!", color="#5E81AC"];
//e2 [pos="1.3, 0.9!", color="#5E81AC"];
e3 [pos="0.6, 0.7!", color="#5E81AC"];
// middle edges
e4 [pos="0.4, 1.0!", color="#5E81AC"];
e5 [pos="1.4, 1.0!" color="#5E81AC"];
e6 [pos="1.8, 1.4!", color="#5E81AC"];
e7 [pos="0.8, 1.3!", color="#5E81AC"];
// top edges
e8 [pos="0.9, 1.5!", color="#5E81AC"];
//e9 [pos="1.6, 1.7!", color="#5E81AC"];
//e10 [pos="1.3, 1.9!", color="#5E81AC"];
e11 [pos="0.6, 1.7!", color="#5E81AC"];
v0 -- v1 [style=solid];
v1 -- v2 [style=solid];
v2 -- v3 [style=dotted];
v3 -- v0 [style=dotted];
v0 -- v4 [style=solid];
v1 -- v5 [style=solid];
v2 -- v6 [style=solid];
v3 -- v7 [style=dotted];
v4 -- v5 [style=solid];
v5 -- v6 [style=solid];
v6 -- v7 [style=solid];
v7 -- v4 [style=solid];
e0 -- e3 [color="#5E81AC"];
e3 -- e5 [color="#5E81AC"];
e5 -- e6 [color="#5E81AC"];
e6 -- e7 [color="#5E81AC"];
e7 -- e3 [color="#5E81AC"];
e0 -- e5 [color="#5E81AC"];
e5 -- e7 [color="#5E81AC"];
e4 -- e11 [color="#5E81AC"];
e11 -- e8 [color="#5E81AC"];
e8 -- e4 [color="#5E81AC"];
}](../_images/graphviz-f91748261c6a088571db656a993820fe72316e6d.png)
Case 12
![graph case13 {
node [shape=point, fontname="source code pro"];
edge [style=solid, penwidth=2];
v0 [pos="0.4,0.5!", fillcolor=black];
v1 [pos="1.4,0.5!", fillcolor=white];
v2 [pos="1.8,0.9!", fillcolor=black];
v3 [pos="0.8,0.9!", fillcolor=white];
v4 [pos="0.4,1.5!", fillcolor=white];
v5 [pos="1.4,1.5!", fillcolor=black];
v6 [pos="1.8,1.9!", fillcolor=white];
v7 [pos="0.8,1.9!", fillcolor=black];
// bottom edges
e0 [pos="0.9, 0.5!", color="#5E81AC"];
e1 [pos="1.6, 0.7!", color="#5E81AC"];
e2 [pos="1.3, 0.9!", color="#5E81AC"];
e3 [pos="0.6, 0.7!", color="#5E81AC"];
// middle edges
e4 [pos="0.4, 1.0!", color="#5E81AC"];
e5 [pos="1.4, 1.1!" color="#5E81AC"];
e6 [pos="1.8, 1.4!", color="#5E81AC"];
e7 [pos="0.8, 1.4!", color="#5E81AC"];
// top edges
e8 [pos="1.0, 1.5!", color="#5E81AC"];
e9 [pos="1.6, 1.7!", color="#5E81AC"];
e10 [pos="1.3, 1.9!", color="#5E81AC"];
e11 [pos="0.6, 1.7!", color="#5E81AC"];
v0 -- v1 [style=solid];
v1 -- v2 [style=solid];
v2 -- v3 [style=dotted];
v3 -- v0 [style=dotted];
v0 -- v4 [style=solid];
v1 -- v5 [style=solid];
v2 -- v6 [style=solid];
v3 -- v7 [style=dotted];
v4 -- v5 [style=solid];
v5 -- v6 [style=solid];
v6 -- v7 [style=solid];
v7 -- v4 [style=solid];
e0 -- e3 [color="#5E81AC"];
e3 -- e4 [color="#5E81AC"];
e4 -- e0 [color="#5E81AC"];
e1 -- e2 [color="#5E81AC"];
e2 -- e6 [color="#5E81AC"];
e6 -- e1 [color="#5E81AC"];
e5 -- e8 [color="#5E81AC"];
e8 -- e9 [color="#5E81AC"];
e9 -- e5 [color="#5E81AC"];
e7 -- e10 [color="#5E81AC"];
e10 -- e11 [color="#5E81AC"];
e11 -- e7 [color="#5E81AC"];
}](../_images/graphviz-5238cb4636d455806b8cf7888c960dc0480ae868.png)
Case 13
![graph case14 {
node [shape=point, fontname="source code pro"];
edge [style=solid, penwidth=2];
v0 [pos="0.4,0.5!", fillcolor=white];
v1 [pos="1.4,0.5!", fillcolor=black];
v2 [pos="1.8,0.9!", fillcolor=black];
v3 [pos="0.8,0.9!", fillcolor=black];
v4 [pos="0.4,1.5!", fillcolor=white];
v5 [pos="1.4,1.5!", fillcolor=white];
v6 [pos="1.8,1.9!", fillcolor=white];
v7 [pos="0.8,1.9!", fillcolor=black];
// bottom edges
e0 [pos="0.9, 0.5!", color="#5E81AC"];
//e1 [pos="1.6, 0.7!", color="#5E81AC"];
//e2 [pos="1.3, 0.9!", color="#5E81AC"];
e3 [pos="0.6, 0.7!", color="#5E81AC"];
// middle edges
//e4 [pos="0.4, 1.0!", color="#5E81AC"];
e5 [pos="1.4, 0.75!" color="#5E81AC"];
e6 [pos="1.8, 1.6!", color="#5E81AC"];
//e7 [pos="0.8, 1.4!", color="#5E81AC"];
// top edges
//e8 [pos="0.9, 1.5!", color="#5E81AC"];
//e9 [pos="1.6, 1.7!", color="#5E81AC"];
e10 [pos="1.3, 1.9!", color="#5E81AC"];
e11 [pos="0.6, 1.7!", color="#5E81AC"];
v0 -- v1 [style=solid];
v1 -- v2 [style=solid];
v2 -- v3 [style=dotted];
v3 -- v0 [style=dotted];
v0 -- v4 [style=solid];
v1 -- v5 [style=solid];
v2 -- v6 [style=solid];
v3 -- v7 [style=dotted];
v4 -- v5 [style=solid];
v5 -- v6 [style=solid];
v6 -- v7 [style=solid];
v7 -- v4 [style=solid];
e0 -- e3 [color="#5E81AC"];
e3 -- e11 [color="#5E81AC"];
e11 -- e0 [color="#5E81AC"];
e0 -- e5 [color="#5E81AC"];
e5 -- e6 [color="#5E81AC"];
e6 -- e11 [color="#5E81AC"];
e11 -- e10 [color="#5E81AC"];
e10 -- e6 [color="#5E81AC"];
e0 -- e6 [color="#5E81AC"];
}](../_images/graphviz-91212ca6b0f2d453d834e9633590acac079d3b79.png)
Case 14
![graph legend {
node [shape=point, fontname="source code pro"];
edge [style=solid, penwidth=2];
v0 [pos="0.,1.!", fillcolor=black];
v1 [pos="0.,0.75!", fillcolor=white];
Inside [shape=plaintext, pos="0.6,1.!"];
Outside [shape=plaintext, pos="0.6,0.75!"];
blank [pos="0.,0!", color=white];
}](../_images/graphviz-46f8828434efc501ffac55b5a4fd16cf929f3290.png)
Marching Cubes 33#
Chernyaev [Che95]
See also MarchingCubes()
One of the main shortcomings of the marching cubes algorithm is that there exist several ambiguous cases - situations in which there are multiple possible triangulations that could be used to separate the inside from the outside of the surface. For example, the opposite corners of Case 4 could be connected through the center of the cube. These ambiguities can lead to topological errors and non-watertight surfaces. Several methods have been proposed to resolve these ambiguities, including an extend lookup table that has 33 entries, rather than 15 [Che95]. Additional tests are used to test whether diagonal nodes are connected or separated to choose the correct triangulation.
Marching Tetrahedra#
Bloomenthal [Blo94]
See also MarchingTetrahedra()
Another approach to resolve the ambiguities of marching cubes is to partition tetrahedra, rather than cubes.
Mixed-Surface Lookup Table
![graph case0 {
node [shape=point, fontname="source code pro"];
edge [style=solid, penwidth=2];
v6 [pos="0.,0.!", fillcolor=white];
v7 [pos="0.6,-0.2!", fillcolor=white];
v8 [pos="0.9,0.2!", fillcolor=white];
v9 [pos="0.4,0.8!", fillcolor=white];
//v0 [pos="0.3,-0.1!", color="#5E81AC"];
//v1 [pos="0.75,0.!", color="#5E81AC"];
//v2 [pos="0.45,0.1!", color="#5E81AC"];
//v3 [pos="0.5,0.3!", color="#5E81AC"];
//v4 [pos="0.65,0.5!", color="#5E81AC"];
//v5 [pos="0.2,0.4!", color="#5E81AC"];
v6 -- v7 [style=solid];
v7 -- v8 [style=solid];
v8 -- v6 [style=dotted];
v6 -- v9 [style=solid];
v7 -- v9 [style=solid];
v8 -- v9 [style=solid];
}](../_images/graphviz-4af776d2f7acaed1c86e3eaa09cc5b53d8380436.png)
Case 0
![graph case1 {
node [shape=point, fontname="source code pro"];
edge [style=solid, penwidth=2];
v6 [pos="0.,0.!", fillcolor=white];
v7 [pos="0.6,-0.2!", fillcolor=white];
v8 [pos="0.9,0.2!", fillcolor=white];
v9 [pos="0.4,0.8!", fillcolor=black];
//v0 [pos="0.3,-0.1!", color="#5E81AC"];
//v1 [pos="0.75,0.!", color="#5E81AC"];
//v2 [pos="0.45,0.1!", color="#5E81AC"];
v3 [pos="0.5,0.3!", color="#5E81AC"];
v4 [pos="0.65,0.5!", color="#5E81AC"];
v5 [pos="0.2,0.4!", color="#5E81AC"];
v6 -- v7 [style=solid];
v7 -- v8 [style=solid];
v8 -- v6 [style=dotted];
v6 -- v9 [style=solid];
v7 -- v9 [style=solid];
v8 -- v9 [style=solid];
v3 -- v5 [color="#5E81AC"];
v5 -- v4 [color="#5E81AC"];
v4 -- v3 [color="#5E81AC"];
}](../_images/graphviz-38724d67d9e096b3ba24abba8c98c9f0584fe39d.png)
Case 1
![graph case2 {
node [shape=point, fontname="source code pro"];
edge [style=solid, penwidth=2];
v6 [pos="0.,0.!", fillcolor=white];
v7 [pos="0.6,-0.2!", fillcolor=white];
v8 [pos="0.9,0.2!", fillcolor=black];
v9 [pos="0.4,0.8!", fillcolor=white];
//v0 [pos="0.3,-0.1!", color="#5E81AC"];
v1 [pos="0.75,0.!", color="#5E81AC"];
v2 [pos="0.45,0.1!", color="#5E81AC"];
//v3 [pos="0.5,0.3!", color="#5E81AC"];
v4 [pos="0.65,0.5!", color="#5E81AC"];
//v5 [pos="0.2,0.4!", color="#5E81AC"];
v6 -- v7 [style=solid];
v7 -- v8 [style=solid];
v8 -- v6 [style=dotted];
v6 -- v9 [style=solid];
v7 -- v9 [style=solid];
v8 -- v9 [style=solid];
v4 -- v2 [color="#5E81AC"];
v2 -- v1 [color="#5E81AC"];
v1 -- v4 [color="#5E81AC"];
}](../_images/graphviz-8805074f0524fdf818620fd668815295665b0a97.png)
Case 2
![graph case3 {
node [shape=point, fontname="source code pro"];
edge [style=solid, penwidth=2];
v6 [pos="0.,0.!", fillcolor=white];
v7 [pos="0.6,-0.2!", fillcolor=white];
v8 [pos="0.9,0.2!", fillcolor=black];
v9 [pos="0.4,0.8!", fillcolor=black];
//v0 [pos="0.3,-0.1!", color="#5E81AC"];
v1 [pos="0.75,0.!", color="#5E81AC"];
v2 [pos="0.45,0.1!", color="#5E81AC"];
v3 [pos="0.5,0.3!", color="#5E81AC"];
//v4 [pos="0.65,0.5!", color="#5E81AC"];
v5 [pos="0.2,0.4!", color="#5E81AC"];
v6 -- v7 [style=solid];
v7 -- v8 [style=solid];
v8 -- v6 [style=dotted];
v6 -- v9 [style=solid];
v7 -- v9 [style=solid];
v8 -- v9 [style=solid];
v1 -- v3 [color="#5E81AC"];
v3 -- v5 [color="#5E81AC"];
v5 -- v2 [color="#5E81AC"];
v2 -- v1 [color="#5E81AC"];
}](../_images/graphviz-7d5f544eb74f5402ba853df253853b13dbafd59d.png)
Case 3
![graph case4 {
node [shape=point, fontname="source code pro"];
edge [style=solid, penwidth=2];
v6 [pos="0.,0.!", fillcolor=white];
v7 [pos="0.6,-0.2!", fillcolor=black];
v8 [pos="0.9,0.2!", fillcolor=white];
v9 [pos="0.4,0.8!", fillcolor=white];
v0 [pos="0.3,-0.1!", color="#5E81AC"];
v1 [pos="0.75,0.!", color="#5E81AC"];
//v2 [pos="0.45,0.1!", color="#5E81AC"];
v3 [pos="0.5,0.3!", color="#5E81AC"];
//v4 [pos="0.65,0.5!", color="#5E81AC"];
//v5 [pos="0.2,0.4!", color="#5E81AC"];
v6 -- v7 [style=solid];
v7 -- v8 [style=solid];
v8 -- v6 [style=dotted];
v6 -- v9 [style=solid];
v7 -- v9 [style=solid];
v8 -- v9 [style=solid];
v0 -- v3 [color="#5E81AC"];
v3 -- v1 [color="#5E81AC"];
v1 -- v0 [color="#5E81AC"];
}](../_images/graphviz-abf4a1dd072219e9afd558928109d73950feae76.png)
Case 4
![graph case5 {
node [shape=point, fontname="source code pro"];
edge [style=solid, penwidth=2];
v6 [pos="0.,0.!", fillcolor=white];
v7 [pos="0.6,-0.2!", fillcolor=black];
v8 [pos="0.9,0.2!", fillcolor=white];
v9 [pos="0.4,0.8!", fillcolor=black];
v0 [pos="0.3,-0.1!", color="#5E81AC"];
v1 [pos="0.75,0.!", color="#5E81AC"];
//v2 [pos="0.45,0.1!", color="#5E81AC"];
//v3 [pos="0.5,0.3!", color="#5E81AC"];
v4 [pos="0.65,0.5!", color="#5E81AC"];
v5 [pos="0.2,0.4!", color="#5E81AC"];
v6 -- v7 [style=solid];
v7 -- v8 [style=solid];
v8 -- v6 [style=dotted];
v6 -- v9 [style=solid];
v7 -- v9 [style=solid];
v8 -- v9 [style=solid];
v1 -- v0 [color="#5E81AC"];
v0 -- v5 [color="#5E81AC"];
v5 -- v4 [color="#5E81AC"];
v4 -- v1 [color="#5E81AC"];
}](../_images/graphviz-64e70f0ea1cc0924cc543fa4b0873761bc7fdc96.png)
Case 5
![graph case6 {
node [shape=point, fontname="source code pro"];
edge [style=solid, penwidth=2];
v6 [pos="0.,0.!", fillcolor=white];
v7 [pos="0.6,-0.2!", fillcolor=black];
v8 [pos="0.9,0.2!", fillcolor=black];
v9 [pos="0.4,0.8!", fillcolor=white];
v0 [pos="0.3,-0.1!", color="#5E81AC"];
//v1 [pos="0.75,0.!", color="#5E81AC"];
v2 [pos="0.45,0.1!", color="#5E81AC"];
v3 [pos="0.5,0.3!", color="#5E81AC"];
v4 [pos="0.65,0.5!", color="#5E81AC"];
//v5 [pos="0.2,0.4!", color="#5E81AC"];
v6 -- v7 [style=solid];
v7 -- v8 [style=solid];
v8 -- v6 [style=dotted];
v6 -- v9 [style=solid];
v7 -- v9 [style=solid];
v8 -- v9 [style=solid];
v0 -- v3 [color="#5E81AC"];
v3 -- v4 [color="#5E81AC"];
v4 -- v2 [color="#5E81AC"];
v2 -- v0 [color="#5E81AC"];
}](../_images/graphviz-053a55e6bcbe0680cea45aee412f8a4daebcb9ce.png)
Case 6
![graph case7 {
node [shape=point, fontname="source code pro"];
edge [style=solid, penwidth=2];
v6 [pos="0.,0.!", fillcolor=white];
v7 [pos="0.6,-0.2!", fillcolor=black];
v8 [pos="0.9,0.2!", fillcolor=black];
v9 [pos="0.4,0.8!", fillcolor=black];
v0 [pos="0.3,-0.1!", color="#5E81AC"];
//v1 [pos="0.75,0.!", color="#5E81AC"];
v2 [pos="0.45,0.1!", color="#5E81AC"];
//v3 [pos="0.5,0.3!", color="#5E81AC"];
//v4 [pos="0.65,0.5!", color="#5E81AC"];
v5 [pos="0.2,0.4!", color="#5E81AC"];
v6 -- v7 [style=solid];
v7 -- v8 [style=solid];
v8 -- v6 [style=dotted];
v6 -- v9 [style=solid];
v7 -- v9 [style=solid];
v8 -- v9 [style=solid];
v0 -- v5 [color="#5E81AC"];
v5 -- v2 [color="#5E81AC"];
v2 -- v0 [color="#5E81AC"];
}](../_images/graphviz-c3524e8b04cb71aba45dcd9f531bb31201773549.png)
Case 7
![graph case8 {
node [shape=point, fontname="source code pro"];
edge [style=solid, penwidth=2];
v6 [pos="0.,0.!", fillcolor=black];
v7 [pos="0.6,-0.2!", fillcolor=white];
v8 [pos="0.9,0.2!", fillcolor=white];
v9 [pos="0.4,0.8!", fillcolor=white];
v0 [pos="0.3,-0.1!", color="#5E81AC"];
//v1 [pos="0.75,0.!", color="#5E81AC"];
v2 [pos="0.45,0.1!", color="#5E81AC"];
//v3 [pos="0.5,0.3!", color="#5E81AC"];
//v4 [pos="0.65,0.5!", color="#5E81AC"];
v5 [pos="0.2,0.4!", color="#5E81AC"];
v6 -- v7 [style=solid];
v7 -- v8 [style=solid];
v8 -- v6 [style=dotted];
v6 -- v9 [style=solid];
v7 -- v9 [style=solid];
v8 -- v9 [style=solid];
v0 -- v2 [color="#5E81AC"];
v2 -- v5 [color="#5E81AC"];
v5 -- v0 [color="#5E81AC"];
}](../_images/graphviz-8ee04b842d6bbea747d5055e58fc7994cdf1f258.png)
Case 8
![graph case9 {
node [shape=point, fontname="source code pro"];
edge [style=solid, penwidth=2];
v6 [pos="0.,0.!", fillcolor=black];
v7 [pos="0.6,-0.2!", fillcolor=white];
v8 [pos="0.9,0.2!", fillcolor=white];
v9 [pos="0.4,0.8!", fillcolor=black];
v0 [pos="0.3,-0.1!", color="#5E81AC"];
//v1 [pos="0.75,0.!", color="#5E81AC"];
v2 [pos="0.45,0.1!", color="#5E81AC"];
v3 [pos="0.5,0.3!", color="#5E81AC"];
v4 [pos="0.65,0.5!", color="#5E81AC"];
//v5 [pos="0.2,0.4!", color="#5E81AC"];
v6 -- v7 [style=solid];
v7 -- v8 [style=solid];
v8 -- v6 [style=dotted];
v6 -- v9 [style=solid];
v7 -- v9 [style=solid];
v8 -- v9 [style=solid];
v0 -- v2 [color="#5E81AC"];
v2 -- v4 [color="#5E81AC"];
v4 -- v3 [color="#5E81AC"];
v3 -- v0 [color="#5E81AC"];
}](../_images/graphviz-03aea28c552b885cf480f73e4cd9c13021863198.png)
Case 9
![graph case10 {
node [shape=point, fontname="source code pro"];
edge [style=solid, penwidth=2];
v6 [pos="0.,0.!", fillcolor=black];
v7 [pos="0.6,-0.2!", fillcolor=white];
v8 [pos="0.9,0.2!", fillcolor=black];
v9 [pos="0.4,0.8!", fillcolor=white];
v0 [pos="0.3,-0.1!", color="#5E81AC"];
v1 [pos="0.75,0.!", color="#5E81AC"];
//v2 [pos="0.45,0.1!", color="#5E81AC"];
//v3 [pos="0.5,0.3!", color="#5E81AC"];
v4 [pos="0.65,0.5!", color="#5E81AC"];
v5 [pos="0.2,0.4!", color="#5E81AC"];
v6 -- v7 [style=solid];
v7 -- v8 [style=solid];
v8 -- v6 [style=dotted];
v6 -- v9 [style=solid];
v7 -- v9 [style=solid];
v8 -- v9 [style=solid];
v0 -- v1 [color="#5E81AC"];
v1 -- v4 [color="#5E81AC"];
v4 -- v5 [color="#5E81AC"];
v5 -- v0 [color="#5E81AC"];
}](../_images/graphviz-5666add66a6c2a5ec7a596c0d49773555186c5c5.png)
Case 10
![graph case11 {
node [shape=point, fontname="source code pro"];
edge [style=solid, penwidth=2];
v6 [pos="0.,0.!", fillcolor=black];
v7 [pos="0.6,-0.2!", fillcolor=white];
v8 [pos="0.9,0.2!", fillcolor=black];
v9 [pos="0.4,0.8!", fillcolor=black];
v0 [pos="0.3,-0.1!", color="#5E81AC"];
v1 [pos="0.75,0.!", color="#5E81AC"];
//v2 [pos="0.45,0.1!", color="#5E81AC"];
v3 [pos="0.5,0.3!", color="#5E81AC"];
//v4 [pos="0.65,0.5!", color="#5E81AC"];
//v5 [pos="0.2,0.4!", color="#5E81AC"];
v6 -- v7 [style=solid];
v7 -- v8 [style=solid];
v8 -- v6 [style=dotted];
v6 -- v9 [style=solid];
v7 -- v9 [style=solid];
v8 -- v9 [style=solid];
v0 -- v1 [color="#5E81AC"];
v1 -- v3 [color="#5E81AC"];
v3 -- v0 [color="#5E81AC"];
}](../_images/graphviz-683679e52af34d6e002eb2a26a3293bc607049e9.png)
Case 11
![graph case12 {
node [shape=point, fontname="source code pro"];
edge [style=solid, penwidth=2];
v6 [pos="0.,0.!", fillcolor=black];
v7 [pos="0.6,-0.2!", fillcolor=black];
v8 [pos="0.9,0.2!", fillcolor=white];
v9 [pos="0.4,0.8!", fillcolor=white];
//v0 [pos="0.3,-0.1!", color="#5E81AC"];
v1 [pos="0.75,0.!", color="#5E81AC"];
v2 [pos="0.45,0.1!", color="#5E81AC"];
v3 [pos="0.5,0.3!", color="#5E81AC"];
//v4 [pos="0.65,0.5!", color="#5E81AC"];
v5 [pos="0.2,0.4!", color="#5E81AC"];
v6 -- v7 [style=solid];
v7 -- v8 [style=solid];
v8 -- v6 [style=dotted];
v6 -- v9 [style=solid];
v7 -- v9 [style=solid];
v8 -- v9 [style=solid];
v1 -- v2 [color="#5E81AC"];
v2 -- v5 [color="#5E81AC"];
v5 -- v3 [color="#5E81AC"];
v3 -- v1 [color="#5E81AC"];
}](../_images/graphviz-522311f906670482bb4aea95892786f0244c24da.png)
Case 12
![graph case6 {
node [shape=point, fontname="source code pro"];
edge [style=solid, penwidth=2];
v6 [pos="0.,0.!", fillcolor=black];
v7 [pos="0.6,-0.2!", fillcolor=black];
v8 [pos="0.9,0.2!", fillcolor=white];
v9 [pos="0.4,0.8!", fillcolor=black];
//v0 [pos="0.3,-0.1!", color="#5E81AC"];
v1 [pos="0.75,0.!", color="#5E81AC"];
v2 [pos="0.45,0.1!", color="#5E81AC"];
//v3 [pos="0.5,0.3!", color="#5E81AC"];
v4 [pos="0.65,0.5!", color="#5E81AC"];
//v5 [pos="0.2,0.4!", color="#5E81AC"];
v6 -- v7 [style=solid];
v7 -- v8 [style=solid];
v8 -- v6 [style=dotted];
v6 -- v9 [style=solid];
v7 -- v9 [style=solid];
v8 -- v9 [style=solid];
v1 -- v2 [color="#5E81AC"];
v2 -- v4 [color="#5E81AC"];
v4 -- v1 [color="#5E81AC"];
}](../_images/graphviz-fae1331422040d662f355757f6992d57336aeaac.png)
Case 13
![graph case14 {
node [shape=point, fontname="source code pro"];
edge [style=solid, penwidth=2];
v6 [pos="0.,0.!", fillcolor=black];
v7 [pos="0.6,-0.2!", fillcolor=black];
v8 [pos="0.9,0.2!", fillcolor=black];
v9 [pos="0.4,0.8!", fillcolor=white];
//v0 [pos="0.3,-0.1!", color="#5E81AC"];
//v1 [pos="0.75,0.!", color="#5E81AC"];
//v2 [pos="0.45,0.1!", color="#5E81AC"];
v3 [pos="0.5,0.3!", color="#5E81AC"];
v4 [pos="0.65,0.5!", color="#5E81AC"];
v5 [pos="0.2,0.4!", color="#5E81AC"];
v6 -- v7 [style=solid];
v7 -- v8 [style=solid];
v8 -- v6 [style=dotted];
v6 -- v9 [style=solid];
v7 -- v9 [style=solid];
v8 -- v9 [style=solid];
v3 -- v4 [color="#5E81AC"];
v4 -- v5 [color="#5E81AC"];
v5 -- v3 [color="#5E81AC"];
}](../_images/graphviz-1929c80e8c53599bf62be23255fb0ce0f14454d6.png)
Case 14
![graph case15 {
node [shape=point, fontname="source code pro"];
edge [style=solid, penwidth=2];
v6 [pos="0.,0.!", fillcolor=black];
v7 [pos="0.6,-0.2!", fillcolor=black];
v8 [pos="0.9,0.2!", fillcolor=black];
v9 [pos="0.4,0.8!", fillcolor=black];
//v0 [pos="0.3,-0.1!", color="#5E81AC"];
//v1 [pos="0.75,0.!", color="#5E81AC"];
//v2 [pos="0.45,0.1!", color="#5E81AC"];
//v3 [pos="0.5,0.3!", color="#5E81AC"];
//v4 [pos="0.65,0.5!", color="#5E81AC"];
//v5 [pos="0.2,0.4!", color="#5E81AC"];
v6 -- v7 [style=solid];
v7 -- v8 [style=solid];
v8 -- v6 [style=dotted];
v6 -- v9 [style=solid];
v7 -- v9 [style=solid];
v8 -- v9 [style=solid];
}](../_images/graphviz-c46c0ffa3a9536068612a9072f92536640a4cf86.png)
Case 15
![graph legend {
node [shape=point, fontname="source code pro"];
edge [style=solid, penwidth=2];
v0 [pos="0.,1.!", fillcolor=black];
v1 [pos="0.,0.75!", fillcolor=white];
Inside [shape=plaintext, pos="0.6,1.!"];
Outside [shape=plaintext, pos="0.6,0.75!"];
blank [pos="0.,0!", color=white];
}](../_images/graphviz-46f8828434efc501ffac55b5a4fd16cf929f3290.png)
A similar lookup table can be constructed for volume elements (tetrahedra and wedges). Quadrilateral and wedge elements can be decomposed into triangles and tetrahedra, respectively, however care must be taken to ensure the edges of adjacent wedges are partitioned consistently so that they are split along the same diagonal.