added tutorial entry for vector field tracing
This commit is contained in:
+19
-4
@@ -146,7 +146,8 @@ lecture notes links to a cross-platform example application.</p>
|
||||
<li><a href="#marchingcubes">705 Marching Cubes</a></li>
|
||||
<li><a href="#facetorientation">706 Facet Orientation</a></li>
|
||||
<li><a href="#sweptvolume">707 Swept Volume</a></li>
|
||||
<li><a href="#pickingverticesandfaces">708 Picking vertices and faces</a></li>
|
||||
<li><a href="#pickingverticesandfaces">708 Picking Vertices and Faces</a></li>
|
||||
<li><a href="#vectorfieldvisualizer">709 Vector Field Visualization</a></li>
|
||||
</ul></li>
|
||||
<li><a href="#future">Chapter 8: Outlook for continuing development</a></li>
|
||||
</ul>
|
||||
@@ -2057,7 +2058,7 @@ harmonic parametrization, it does not need to have a fixed boundary.</p>
|
||||
<span class="math">\([\mathbf{u},\mathbf{v}]^t A [\mathbf{u},\mathbf{v}]\)</span> is equal to the <a href="http://en.wikipedia.org/wiki/Vector_area">vector
|
||||
area</a> of the mesh.</p>
|
||||
|
||||
<p>Using libigl, this matrix energy can be written in a few lines of codes. The
|
||||
<p>Using libigl, this matrix energy can be written in a few lines of code. The
|
||||
cotangent matrix can be computed using <code>igl::cotmatrix</code>:</p>
|
||||
|
||||
<pre><code class="cpp">SparseMatrix<double> L;
|
||||
@@ -2078,7 +2079,7 @@ igl::repdiag(L,2,L_flat);
|
||||
igl::vector_area_matrix(F,A);
|
||||
</code></pre>
|
||||
|
||||
<p>The final energy matrix is the sum of these two matrices. Note that in this
|
||||
<p>The final energy matrix is <span class="math">\(L_{flat} - 2A\)</span>. Note that in this
|
||||
case we do not need to fix the boundary. To remove the null space of the energy and make the minimum unique, it is sufficient to fix two arbitrary
|
||||
vertices to two arbitrary positions. The full source code is provided in <a href="502_LSCMParam/main.cpp">Example 502</a>.</p>
|
||||
|
||||
@@ -3362,7 +3363,7 @@ undergoing a rigid motion with non-trivial rotation is <em><strong>not</strong><
|
||||
exactly representably by triangle mesh: it will be a piecewise-ruled surface.</p>
|
||||
|
||||
<p>To see this, consider the surface swept by a single edge’s line segment as it
|
||||
performs a screw motion. </p>
|
||||
performs a screw motion.</p>
|
||||
|
||||
<p>This means that if we’d like to the surface of the swept volume of a triangle
|
||||
mesh undergoing a rigid motion and we’d like the output to be another triangle
|
||||
@@ -3442,6 +3443,20 @@ vertices are colored in red." />
|
||||
vertices are colored in red.</figcaption>
|
||||
</figure>
|
||||
|
||||
<h2 id="vectorfieldvisualizer"><a href="#vectorfieldvisualizer">Vector Field Visualization</a></h2>
|
||||
|
||||
<p>Vector fields on surfaces are commonly visualized by tracing <a href="https://en.wikipedia.org/wiki/Streamlines,_streaklines,_and_pathlines">streamlines</a>. Libigl
|
||||
supports the seeding and tracing of streamlines, for both simple vector fields
|
||||
and for N-rosy fields. The seeds for the streamlines are initialized using <code>streamlines_init</code>,
|
||||
and the lines are traced using <code>streamlines_next</code>. Each call to <code>streamlines_next</code> extends
|
||||
each line by one triangle, allowing interactive rendering of the traced lines, as demonstrated
|
||||
in <a href="709_VectorFieldVisualizer/main.cpp">Example 709</a>.</p>
|
||||
|
||||
<figure>
|
||||
<img src="images/streamlines.jpg" alt="(Example 709) Interactive streamlines tracing." />
|
||||
<figcaption>(<a href="709_VectorFieldVisualizer/main.cpp">Example 709</a>) Interactive streamlines tracing.</figcaption>
|
||||
</figure>
|
||||
|
||||
<h1 id="future">Outlook for continuing development</h1>
|
||||
|
||||
<p>Libigl is in active development, and we plan to focus on the following features
|
||||
|
||||
Reference in New Issue
Block a user