Skip to content
Snippets Groups Projects
Commit 1bd6e204 authored by Katarina Furmanova's avatar Katarina Furmanova
Browse files

surfaces

parent dd820e72
No related branches found
No related tags found
No related merge requests found
Pipeline #
......@@ -296,7 +296,7 @@
<div style="width: 50%;">
<figure style="margin: auto; width: 90%">
<img src="img/topogeo.png" alt="topology vs geometry" style="width:100%">
<figcaption style="text-align: center; margin: auto">All of the illustreted surface have
<figcaption style="text-align: center; margin: auto">All of the illustrated surface have
different geometry.
Further, the two surfaces on the left have the same topology, as do the two on the right.
But the sphere
......@@ -374,7 +374,7 @@
Based on the type of topological elements included in the representations, we can split them into
several categories:
</p>
<p class="mb-0"><i class="fa fa-arrow-right text-primary me-2"></i>Point represenetations
<p class="mb-0"><i class="fa fa-arrow-right text-primary me-2"></i>Point representations
- include only information associated with vertices, no connectivity.</p>
<p class="mb-0"><i class="fa fa-arrow-right text-primary me-2"></i>Wireframes
- pseudosurface representation, includes connectivity of vertices, but no information about how they
......@@ -410,8 +410,8 @@
contour</i>
of this function, since only points <i>P(x,y,x)</i> for which the function returns 0 are part of the
surface. If the equality is not set to 0, but to a different value (level), we are talking about
<i>level sets</i>, as the object is then formed by set of points corrsponding to a certain "level" of
the fuction.
<i>level sets</i>, as the object is then formed by set of points corresponding to a certain "level" of
the function.
In case we are considering the zero contour or zero level set as the surface of the object, the function
is
often called <i>signed distance function (SDF)</i>, since the sign of the returned value
......@@ -432,16 +432,16 @@
<div style="display: flex;">
<div style=" margin: auto; width: 80%;">
<p class="mb-4">
Now, using this definition, let's try completing two taks:
Now, using this definition, let's try completing two tasks:
<p class="mb-0"><i class="fa fa-arrow-right text-primary me-2"></i>T1: Find coordinates of 20
different
points
on the surface of the circle.</p>
<ul>
<li>Using this deffinition, there is no straightforward solution! We can only guess
<li>Using this definition, there is no straightforward solution! We can only guess
coordinates and try
if
the equation is fullfilled.
the equation is fulfilled.
</li>
</ul>
<p class="mb-0"><i class="fa fa-arrow-right text-primary me-2"></i>T2: Find out if a point [3⁄4,
......@@ -478,7 +478,7 @@
<p class="mb-4">
With parametric representations, the surface of the object is expressed as a function of one or more
parameters.
In addition to the defintion of the function, we also need the information about the extent of the
In addition to the definition of the function, we also need the information about the extent of the
parameter(s).
The parametric definition in 3D thus takes the following form:
<div style="display: flex; width: 100%;">
......@@ -511,7 +511,7 @@
<div style="display: flex;">
<div style=" margin: auto; width: 80%;">
<p class="mb-4">
Now, using this definition, let's try completing the two taks:
Now, using this definition, let's try completing the two tasks:
<p class="mb-0"><i class="fa fa-arrow-right text-primary me-2"></i>T1: Find coordinates of 20
different points on the surface of the circle.</p>
<ul>
......@@ -524,7 +524,7 @@
<p class="mb-0"><i class="fa fa-arrow-right text-primary me-2"></i>T2: Find out if a point [2⁄5,
3⁄4] lies inside or outside of the circle.</p>
<ul>
<li>There is no straightforward way to test it with this deffinition.
<li>There is no straightforward way to test it with this definition.
</li>
</ul>
</p>
......@@ -546,11 +546,11 @@
<h5>Explicit representations</h5>
<p class="mb-4">
With explicit representations, one coordinate of a surface point (dependent vriable) is expressed as a
With explicit representations, one coordinate of a surface point (dependent variable) is expressed as a
function of other
coordinate(s) (independent variable(s)).
The parametric definition in 3D, where z coordinate is expressed as a function of x and y thus takes
the form <i>z = f (x,y)</i>, but in order for this deffintion to be useful, we neet to specify the scope
the form <i>z = f (x,y)</i>, but in order for this definition to be useful, we need to specify the scope
of x and y: <i> a &le; x &le; b; c &le; y &le; d </i>.
<div style="background-color: rgb(242, 242, 242); padding: 25px 25px;">
......@@ -571,7 +571,7 @@
<div style="display: flex;">
<div style=" margin: auto; width: 80%;">
<p class="mb-4">
Now, using this definition, let's try completing our two taks:
Now, using this definition, let's try completing our two tasks:
<p class="mb-0"><i class="fa fa-arrow-right text-primary me-2"></i>T1: Find coordinates of 20
different points on the surface of the circle.</p>
<ul>
......@@ -584,7 +584,7 @@
<p class="mb-0"><i class="fa fa-arrow-right text-primary me-2"></i>T2: Find out if a point [2⁄5,
3⁄4] lies inside or outside of the circle.</p>
<ul>
<li>There is no straightforward way to test it with this deffinition. But we can convert
<li>There is no straightforward way to test it with this definition. But we can convert
it to implicit form.
</li>
</ul>
......@@ -600,14 +600,14 @@
</div>
<br>
<p class="mb-4"><b>Conclusion:</b> Explicit representations are bad for determining if points lie in/out
or on surface
but they are great for finding points (sampling). Incidentally, this is a common way to proceduraly
or on the surface
but they are great for finding points (sampling). Incidentally, this is a common way to procedurally
generate a so-called heightfields or heightmaps for terrains (e.g., in games). The x and y coordinates
are regularly sampled and a z value is generated by the function.
<br><br>
In some literature, you will find what we described here as parametric representations included under
explicit definitions. That is also correct, since in essence they also explicitly describe the surface
of the object. For the sake of completnes, we keep the two deffintions separate.
of the object. For the sake of completeness, we keep the two definitions separate.
<br><br>
Furthermore, in a broader sense of the word, explicit representations are representations that
explicitly list
......@@ -622,23 +622,23 @@
topology of the object.
Such representations
are called <b>point clouds</b>. A point cloud consists of a discrete set of unstructured or
semi-structured points. They are the typicall product of 3D scanning process, e.g., photogrammetry,
semi-structured points. They are the typical product of 3D scanning process, e.g., photogrammetry,
which works by capturing multiple
overlapping images of an object or area from different angles. Using image matching and triangulation,
the positions of points in 3D space are then estimated (see image below).
<br><br>
Some technologies, such as laser scanning (LiDAR), produce more structured results. LiDAR scanners
measure
the time it takes for the emmited light beam to reftect back to the sensor to estimate distance. Since
the scanning is performed in regular grid pattern, the resulting scan from one direction is essentialy a
the time it takes for the emitted light beam to reflect back to the sensor to estimate distance. Since
the scanning is performed in regular grid pattern, the resulting scan from one direction is essentially a
2D
image encoding the distances of points from the scanner, reuslting in 2.5D represenations called
image encoding the distances of points from the scanner, resulting in 2.5D representations called
<b>range
image</b>. Here, the topology can be inferred thanks to regular grid arragment of points. However,
image</b>. Here, the topology can be inferred thanks to regular grid arrangement of points. However,
the scanning
is typically performed from multiple directions, much like in photogrammetry, resulting in
semi-structured 3D point cloud.
There are numerous other techniques used for acquisition of 3D sptial point-based data, with wide
There are numerous other techniques used for acquisition of 3D spatial point-based data, with wide
spectrum of applications,
such as digital archeology, gaming and movies (e.g., to create realistic models of real
world objects), medicine and dentistry (e.g., for prosthetics construction), and extended reality
......@@ -669,18 +669,18 @@
</div>
<br>
Point-based representations can either visualizaed directly or converted to surface representation. For
Point-based representations can either be visualized directly or converted to surface representation. For
direct
visualization, point-based rendering techniques such as billboarding or surface splatting can be used. In
billboarding,
each point is replaced by a flat primitive patch (typically a circle or a square) facing the camere,
effectivally
each point is replaced by a flat primitive patch (typically a circle or a square) facing the camera,
effectively
covering the gaps between points. Splatting works similarly, but the
patches are oriented according to estimated surface normal at the given point, which allows correctly
lighting
the object. The patches are blended in order to create illusion of smooth surface. Since the rendering is
performed
on point-wise bases, it is easily parallelizable and thus can be efficiently perfomed on GPU.
on point-wise bases, it is easily parallelizable and thus can be efficiently performed on GPU.
<br><br>
<div style="display: flex; align-items: center;">
......@@ -710,27 +710,106 @@
topology and
extract the surface for further analysis and processing. Here, triangulation-based techniques (e.g.,
Delaunay triangulation)
such as alpha-shapes are used. In these techniqe the whole point cloud is triangulated, and the unsuitable
such as alpha-shapes are used. In these technique the whole point cloud is triangulated, and the unsuitable
edges are removed.
Both point-based rendering and surface recontruction techniques are covered in more details in followup
cources (PV112, PA010).
Both point-based rendering and surface reconstruction techniques are covered in more details in followup
courses (PV112, PA010).
</p>
<h2 id="surfaces">Surface representations</h2>
<h5>Wireframes</h5>
<h2>Edge-based representations: wireframes</h2>
<p class="mb-4">
Wireframes is a so-called pseudo-surface representation of a three-dimensional (3D) object using eges to
define its structure. It is essentially a "skeleton" of the 3D model, showing only the edges where
surfaces meet, without rendering the actual surfaces, textures, or colors. This type of model is used to
understand the basic shape, structure, and geometry of the object without the computational expense of
rendering a full 3D image.
Wireframe is a pseudo-surface representation of a three-dimensional object containing vertices and
edges connecting them, without information about the actual surfaces. It is essentially
a "skeleton" of the 3D model. The representation does contain some topological information (vertex connectivity),
but it is still incomplete and ambiguous. Take a look at the image bellow. If we wanted to add
surface to the wireframe model on the left, it could be interpreted in numerous different ways.
Wireframes are often used for the purpose of visualization in 3D modelling software, either as standalone
representations or in combination with
surfaces, to provide understanding of the basic shape, structure, and topology of the objects
(e.g., polygonal meshes).
<div style="margin: auto; width: 60%;">
<figure style="margin: auto; width:100%">
<img src="img/wire.PNG" alt="wireframe" style="width:100%">
<figcaption style="text-align: center; margin: auto">Multiple interpretations of wireframe model (leftmost).
</figcaption>
</figure>
</div>
<br>
</p>
<h2 id="surfaces">Surface representations</h2>
<h5>Polygon soup</h5>
The simplest representation that contains the information about surfaces is a so-called <b>polygon soup</b>.
This representations consists of set of vertices, edges, and polygons formed by them. However, the set of polygons
is <b>unstructured</b> - there is no information about adjacency of polygons or connectivity of vertices, hence the term "soup".
It is often used for storing 3D models and several commonly used
file formats, such as OBJ or STL, belong to this category. In many cases, such representation can be sufficient, as
rendering is typically parallelized and each polygon is processed independently of its neighbors.
<br><br>
In cases were the adjacency and connectivity is necessary, it can typically be easily computed from the
available data. For example, the Wavefront OBJ file consist of 4 lists. The first three list specify vertex coordinates,
normals, and texture coordinates. The last list contains list of polygons (faces), which are defines by indices referring
to the first three list (see example below). Adjacency can be inferred based on the faces sharing same vertices.
<div style="margin: auto; width: 60%;">
<figure style="margin: auto; width:100%">
<img src="img/obj.svg" alt="obj" style="width:100%">
<figcaption style="text-align: center; margin: auto">Excerpt from exemplary OBJ file.
</figcaption>
</figure>
</div>
<h5>Polygon mesh</h5>
Perhaps the most common way of representing 3D objects in computer graphics is using polygonal mesh.
Like polygon soup, this representations consists of geometry given by vertices, edges, and polygons formed by them.
However, unlike polygon soup, we are also working with topology, described by connectivity adjacency relationships (e.g.,
which vertices are connected, which faces are adjacent to edge, etc.). These relationships are important,
since since without them, we would have ambiguous representation (much like in case of wireframes).
<div style="margin: auto; width: 40%;">
<figure style="margin: auto; width:100%">
<img src="img/topochangej.svg" alt="change in topology" style="width:100%">
<figcaption style="text-align: center; margin: auto">Two pairs of triangles with same vertex geometry
but different topology.
</figcaption>
</figure>
</div>
<br>
There are several types of polygonal meshes used in computer graphics, that can be categorized by their topology:
<p class="mb-0"><i class="fa fa-arrow-right text-primary me-2"></i> <b>Structured meshes</b> - have regular
connectivity, i.e., each vertex is connected to the same number of other vertices in regular pattern. As such,
we do not need to store connectivity information since it is inherent. Furthermore, is also leads to
efficient algorithms, such as neighborhood search.
<br><br>
The most commonly used type of structured meshes is <b>quadrilateral mesh</b>. It consists of
interconnected four-sided polygons, known as quadrilaterals or quads. Becaus of their flowing geometry
quad meshes are particularly suitable for modelling and animation. They naturally support the creation
of edge and face loops, which are continuous loops of edges (or faces) useful for defining areas of articulation
and for achieving smooth deformations (see image below). Furthermore, quad meshes also support regular subdivision,
which enables increasing level of detail without unexpected results and is another technique commonly used in
3D modelling and animation (more on that in course PA010). Lastly, it is also very easy to triangulate quad mesh,
since each quad can be diagonally split into 2 triangles.
<div style="margin: auto; width: 40%;">
<figure style="margin: auto; width:100%">
<img src="img/loops.png" alt="edge loops" style="width:100%">
<figcaption style="text-align: center; margin: auto">Edge loops on a facial model (Source:
<a href=https://www.artstation.com/isaacdamasceno>Isaac Damasceno</a>).
</figcaption>
</figure>
</div>
<br>
<h5>Parametric surfaces</h5>
<h5>Implicit surfaces</h5>
Note: In recent years, implicit modelling and representations are gaining popularity as they are suitable
......
public/lectures/img/loops.png

151 KiB

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="332.61905mm"
height="188.23215mm"
viewBox="0 0 332.61905 188.23215"
version="1.1"
id="svg1033"
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)"
sodipodi:docname="obj.svg">
<defs
id="defs1027">
<marker
style="overflow:visible"
id="Arrow2Lend"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow2Lend"
inkscape:isstock="true">
<path
transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
style="fill:#008000;fill-opacity:1;fill-rule:evenodd;stroke:#008000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
id="path1749" />
</marker>
<marker
style="overflow:visible"
id="Arrow1Mend"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Mend"
inkscape:isstock="true">
<path
transform="matrix(-0.4,0,0,-0.4,-4,0)"
style="fill:#008000;fill-opacity:1;fill-rule:evenodd;stroke:#008000;stroke-width:1pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path1737" />
</marker>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.979899"
inkscape:cx="1062.2668"
inkscape:cy="277.47073"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
inkscape:document-rotation="0"
showgrid="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:window-width="1471"
inkscape:window-height="1040"
inkscape:window-x="1946"
inkscape:window-y="0"
inkscape:window-maximized="0" />
<metadata
id="metadata1030">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Vrstva 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-27.214285,-62.744045)">
<rect
style="opacity:0.999;fill:#e6e6e6;fill-opacity:1;stroke:none;stroke-width:0.511527;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers stroke fill"
id="rect2046"
width="332.61905"
height="188.23215"
x="27.214285"
y="62.744045" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05556px;line-height:1.25;font-family:'Courier New';-inkscape-font-specification:'Courier New';stroke-width:0.264583"
x="34.395828"
y="74.083336"
id="text1640"><tspan
sodipodi:role="line"
id="tspan1638"
x="34.395828"
y="74.083336"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:'Courier New';-inkscape-font-specification:'Courier New';stroke-width:0.264583">OBJ File</tspan><tspan
sodipodi:role="line"
x="34.395828"
y="82.993759"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Courier New';-inkscape-font-specification:'Courier New';fill:#008000;stroke-width:0.264583"
id="tspan1642"># List of vertices (x, y, z)</tspan><tspan
sodipodi:role="line"
x="34.395828"
y="91.81321"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Courier New';-inkscape-font-specification:'Courier New';stroke-width:0.264583"
id="tspan1644">v 0.123 0.234 0.345</tspan><tspan
sodipodi:role="line"
x="34.395828"
y="100.63266"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Courier New';-inkscape-font-specification:'Courier New';stroke-width:0.264583"
id="tspan1682">v 0.213 0.445 0.475 </tspan><tspan
sodipodi:role="line"
x="34.395828"
y="109.45211"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Courier New';-inkscape-font-specification:'Courier New';stroke-width:0.264583"
id="tspan1684">v 0.115 0.315 0.353 </tspan><tspan
sodipodi:role="line"
x="34.395828"
y="118.27156"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Courier New';-inkscape-font-specification:'Courier New';stroke-width:0.264583"
id="tspan1646">v ... ... </tspan><tspan
sodipodi:role="line"
x="34.395828"
y="127.09101"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Courier New';-inkscape-font-specification:'Courier New';stroke-width:0.264583"
id="tspan1648" /><tspan
sodipodi:role="line"
x="34.395828"
y="135.91046"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Courier New';-inkscape-font-specification:'Courier New';stroke-width:0.264583"
id="tspan1650"><tspan
style="fill:#008000"
id="tspan1678"># List of texture coordinates(u,v)</tspan> </tspan><tspan
sodipodi:role="line"
x="34.395828"
y="144.7299"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Courier New';-inkscape-font-specification:'Courier New';stroke-width:0.264583"
id="tspan1652">vt 0.500 1 </tspan><tspan
sodipodi:role="line"
x="34.395828"
y="153.54936"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Courier New';-inkscape-font-specification:'Courier New';stroke-width:0.264583"
id="tspan1654">vt ... ... </tspan><tspan
sodipodi:role="line"
x="34.395828"
y="162.3688"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Courier New';-inkscape-font-specification:'Courier New';stroke-width:0.264583"
id="tspan1656" /><tspan
sodipodi:role="line"
x="34.395828"
y="171.18826"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Courier New';-inkscape-font-specification:'Courier New';stroke-width:0.264583"
id="tspan1658"><tspan
style="fill:#008000"
id="tspan1680"># List of vertex normals (x,y,z)</tspan> </tspan><tspan
sodipodi:role="line"
x="34.395828"
y="180.00771"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Courier New';-inkscape-font-specification:'Courier New';stroke-width:0.264583"
id="tspan1660">vn 0.707 0.000 0.707 </tspan><tspan
sodipodi:role="line"
x="34.395828"
y="188.82716"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Courier New';-inkscape-font-specification:'Courier New';stroke-width:0.264583"
id="tspan1662">vn ... ... </tspan><tspan
sodipodi:role="line"
x="34.395828"
y="197.64661"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Courier New';-inkscape-font-specification:'Courier New';stroke-width:0.264583"
id="tspan1664" /><tspan
sodipodi:role="line"
x="34.395828"
y="206.46606"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Courier New';-inkscape-font-specification:'Courier New';fill:#008000;stroke-width:0.264583"
id="tspan1666"># List of faces (indices of v, vt, vn)</tspan><tspan
sodipodi:role="line"
x="34.395828"
y="215.28551"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Courier New';-inkscape-font-specification:'Courier New';stroke-width:0.264583"
id="tspan1668">f 1/2/1 2/1/2 3/3/3 </tspan><tspan
sodipodi:role="line"
x="34.395828"
y="224.10497"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Courier New';-inkscape-font-specification:'Courier New';stroke-width:0.264583"
id="tspan1670">f 3/1/3 4/2/5 5/3/5 </tspan><tspan
sodipodi:role="line"
x="34.395828"
y="232.92441"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Courier New';-inkscape-font-specification:'Courier New';stroke-width:0.264583"
id="tspan1672">f 6/4/1 3/5/3 4/2/5</tspan><tspan
sodipodi:role="line"
x="34.395828"
y="241.74387"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Courier New';-inkscape-font-specification:'Courier New';stroke-width:0.264583"
id="tspan1674">f ... ... </tspan><tspan
sodipodi:role="line"
x="34.395828"
y="250.56331"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Courier New';-inkscape-font-specification:'Courier New';stroke-width:0.264583"
id="tspan1676" /></text>
<ellipse
style="opacity:0.999;fill:none;fill-opacity:1;stroke:#008000;stroke-width:0.458964;stroke-miterlimit:8;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers stroke fill"
id="path1686"
cx="44.35685"
cy="213.44879"
rx="4.1118817"
ry="3.9523566" />
<ellipse
style="opacity:0.999;fill:none;fill-opacity:1;stroke:#008000;stroke-width:0.458965;stroke-miterlimit:8;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers stroke fill"
id="path1686-0"
cx="78.57724"
cy="213.28108"
rx="4.1118817"
ry="3.9523566" />
<ellipse
style="opacity:0.999;fill:none;fill-opacity:1;stroke:#008000;stroke-width:0.458965;stroke-miterlimit:8;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers stroke fill"
id="path1686-0-6"
cx="112.38683"
cy="213.14745"
rx="4.1118817"
ry="3.9523566" />
<path
style="fill:none;stroke:#008000;stroke-width:0.511528;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2Lend)"
d="M 140.22916,213.93452 C 303.51488,216.95833 296.45913,99.017312 139.41884,100.04053"
id="path1726"
sodipodi:nodetypes="cc" />
<text
xml:space="preserve"
style="font-size:7.05556px;line-height:1.25;font-family:sans-serif;fill:#008000;stroke-width:0.264583"
x="263.2605"
y="149.9382"
id="text2026"><tspan
sodipodi:role="line"
id="tspan2024"
x="263.2605"
y="149.9382"
style="fill:#008000;stroke-width:0.264583">This face is formed by</tspan><tspan
sodipodi:role="line"
x="263.2605"
y="158.75764"
style="fill:#008000;stroke-width:0.264583"
id="tspan2028">the first, second, and </tspan><tspan
sodipodi:role="line"
x="263.2605"
y="167.5771"
style="fill:#008000;stroke-width:0.264583"
id="tspan2030">third vertex in the list</tspan><tspan
sodipodi:role="line"
x="263.2605"
y="176.39655"
style="fill:#008000;stroke-width:0.264583"
id="tspan2032">of vertices.</tspan></text>
</g>
</svg>
This diff is collapsed.
public/lectures/img/wire.PNG

108 KiB

0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment