This commit is contained in:
Alec Jacobson
2017-07-03 09:42:50 +01:00
parent eb5b63d1f4
commit 2cfa0316a6
2 changed files with 91 additions and 5 deletions
+74 -4
View File
@@ -220,6 +220,8 @@ sudo apt-get install libxrandr-dev
sudo apt-get install libxi-dev
sudo apt-get install libxmu-dev
sudo apt-get install libblas-dev
sudo apt-get install libxinerama-dev
sudo apt-get install libxcursor-dev
</code></pre>
<p><em>Note for windows users</em>: libigl only supports the Microsoft Visual Studio 2015 compiler in 64bit mode. It will not work with a 32bit build and it will not work
@@ -958,7 +960,11 @@ functionality as common Matlab functions.</p>
<tbody>
<tr>
<td style="text-align:left;"><code>igl::any_of</code></td>
<td style="text-align:left;"><code>igl::all</code></td>
<td style="text-align:left;">Whether all elements are non-zero (true)</td>
</tr>
<tr>
<td style="text-align:left;"><code>igl::any</code></td>
<td style="text-align:left;">Whether any elements are non-zero (true)</td>
</tr>
<tr>
@@ -977,14 +983,30 @@ functionality as common Matlab functions.</p>
<td style="text-align:left;"><code>igl::colon</code></td>
<td style="text-align:left;">Act like Matlab&#8217;s <code>:</code>, similar to Eigen&#8217;s <code>LinSpaced</code></td>
</tr>
<tr>
<td style="text-align:left;"><code>igl::components</code></td>
<td style="text-align:left;">Connected components of graph (cf. Matlab&#8217;s <code>graphconncomp</code>)</td>
</tr>
<tr>
<td style="text-align:left;"><code>igl::count</code></td>
<td style="text-align:left;">Count non-zeros in rows or columns</td>
</tr>
<tr>
<td style="text-align:left;"><code>igl::cross</code></td>
<td style="text-align:left;">Cross product per-row</td>
</tr>
<tr>
<td style="text-align:left;"><code>igl::cumsum</code></td>
<td style="text-align:left;">Cummulative summation</td>
</tr>
<tr>
<td style="text-align:left;"><code>igl::dot</code></td>
<td style="text-align:left;">dot product per-row</td>
</tr>
<tr>
<td style="text-align:left;"><code>igl::eigs</code></td>
<td style="text-align:left;">Solve sparse eigen value problem</td>
</tr>
<tr>
<td style="text-align:left;"><code>igl::find</code></td>
<td style="text-align:left;">Find subscripts of non-zero entries</td>
@@ -1009,14 +1031,30 @@ functionality as common Matlab functions.</p>
<td style="text-align:left;"><code>igl::isdiag</code></td>
<td style="text-align:left;">Determine whether matrix is diagonal</td>
</tr>
<tr>
<td style="text-align:left;"><code>igl::ismember</code></td>
<td style="text-align:left;">Determine whether elements in A occur in B</td>
</tr>
<tr>
<td style="text-align:left;"><code>igl::jet</code></td>
<td style="text-align:left;">Quantized colors along the rainbow.</td>
</tr>
<tr>
<td style="text-align:left;"><code>igl::max</code></td>
<td style="text-align:left;">Compute maximum entry per row or column</td>
</tr>
<tr>
<td style="text-align:left;"><code>igl::median</code></td>
<td style="text-align:left;">Compute the median per column</td>
</tr>
<tr>
<td style="text-align:left;"><code>igl::min</code></td>
<td style="text-align:left;">Compute minimum entry per row or column</td>
</tr>
<tr>
<td style="text-align:left;"><code>igl::mod</code></td>
<td style="text-align:left;">Compute per element modulo</td>
</tr>
<tr>
<td style="text-align:left;"><code>igl::mode</code></td>
<td style="text-align:left;">Compute the mode per column</td>
@@ -1037,6 +1075,10 @@ functionality as common Matlab functions.</p>
<td style="text-align:left;"><code>igl::parula</code></td>
<td style="text-align:left;">Generate a quantized colormap from blue to yellow</td>
</tr>
<tr>
<td style="text-align:left;"><code>igl::pinv</code></td>
<td style="text-align:left;">Compute Moore-Penrose pseudoinverse</td>
</tr>
<tr>
<td style="text-align:left;"><code>igl::randperm</code></td>
<td style="text-align:left;">Generate a random permutation of [0,&#8230;,n&#8211;1]</td>
@@ -1045,10 +1087,38 @@ functionality as common Matlab functions.</p>
<td style="text-align:left;"><code>igl::rgb_to_hsv</code></td>
<td style="text-align:left;">Convert RGB colors to HSV (cf. Matlab&#8217;s <code>rgb2hsv</code>)</td>
</tr>
<tr>
<td style="text-align:left;"><code>igl::repmat</code></td>
<td style="text-align:left;">Repeat a matrix along columns and rows</td>
</tr>
<tr>
<td style="text-align:left;"><code>igl::round</code></td>
<td style="text-align:left;">Per-element round to whole number</td>
</tr>
<tr>
<td style="text-align:left;"><code>igl::setdiff</code></td>
<td style="text-align:left;">Set difference of matrix elements</td>
</tr>
<tr>
<td style="text-align:left;"><code>igl::setunion</code></td>
<td style="text-align:left;">Set union of matrix elements</td>
</tr>
<tr>
<td style="text-align:left;"><code>igl::setxor</code></td>
<td style="text-align:left;">Set exclusive &#8220;or&#8221; of matrix elements</td>
</tr>
<tr>
<td style="text-align:left;"><code>igl::slice</code></td>
<td style="text-align:left;">Slice parts of matrix using index lists: (cf. Matlab&#8217;s <code>B = A(I,J)</code>)</td>
</tr>
<tr>
<td style="text-align:left;"><code>igl::slice_mask</code></td>
<td style="text-align:left;">Slice parts of matrix using boolean masks: (cf. Matlab&#8217;s <code>B = A(M,N)</code>)</td>
</tr>
<tr>
<td style="text-align:left;"><code>igl::slice_into</code></td>
<td style="text-align:left;">Slice left-hand side of matrix assignment using index lists (cf. Matlab&#8217;s <code>B(I,J) = A</code>)</td>
</tr>
<tr>
<td style="text-align:left;"><code>igl::sort</code></td>
<td style="text-align:left;">Sort elements or rows of matrix</td>
@@ -1747,18 +1817,18 @@ measuring bending, albeit in a discretization-dependent way.</p>
<p>Libigl, supports these common flavors. Selecting one is a matter of setting the
energy type before the precompuation phase:</p>
<pre><code class="cpp">igl::ARAPData data;
<pre><code class="cpp">igl::ARAPData arap_data;
arap_data.energy = igl::ARAP_ENERGY_TYPE_SPOKES;
//arap_data.energy = igl::ARAP_ENERGY_TYPE_SPOKES_AND_RIMS;
//arap_data.energy = igl::ARAP_ENERGY_TYPE_ELEMENTS; //triangles or tets
igl::arap_precomputation(V,F,dim,b,data);
igl::arap_precomputation(V,F,dim,b,arap_data);
</code></pre>
<p>Just like <code>igl::min_quad_with_fixed_*</code>, this precomputation phase only depends
on the mesh, fixed vertex indices <code>b</code> and the energy parameters. To solve with
certain constraints on the positions of vertices in <code>b</code>, we may call:</p>
<pre><code class="cpp">igl::arap_solve(bc,data,U);
<pre><code class="cpp">igl::arap_solve(bc,arap_data,U);
</code></pre>
<p>which uses <code>U</code> as an initial guess and then computes the solution into it.</p>