<?xml version="1.0"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en"> <head> <title>Synopsis Cross-Reference</title> <meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type"/> <link href="/style.css" type="text/css" rel="stylesheet" /> </head> <body class="Source"> <h1>Synopsis Cross-Reference</h1> <div class="navigation"> <span class="normal"><a href="../index.html" >Index</a></span> <span class="normal"><a href="../dir.html" >Directory Listing</a></span> </div> File: <b >Nurbs.h</b><pre class="sxr"><a id="line1"></a><span class="lineno"> 1</span><span class="line">#ifndef Nurbs_h_</span> <a id="line2"></a><span class="lineno"> 2</span><span class="line">#define Nurbs_h_</span> <a id="line3"></a><span class="lineno"> 3</span> <a id="line4"></a><span class="lineno"> 4</span><span class="line">#include "Path.h"</span> <a id="line5"></a><span class="lineno"> 5</span><span class="line">#include <vector></span> <a id="line6"></a><span class="lineno"> 6</span> <a id="line7"></a><span class="lineno"> 7</span><span class="line"><span class="keyword">namespace</span> <a href="http://localhost:8000/sxr/ident?full=1&string=Paths" title="namespace Paths">Paths</a></span> <a id="line8"></a><span class="lineno"> 8</span><span class="line">{</span> <a id="line9"></a><span class="lineno"> 9</span> <a id="line10"></a><span class="lineno">10</span><span class="line"><span class="comment">//. The Nurbs class. It implements a nurbs curve</span></span> <a id="line11"></a><span class="lineno">11</span><span class="line"><span class="comment">//. for the given order. It is a very powerful</span></span> <a id="line12"></a><span class="lineno">12</span><span class="line"><span class="comment">//. and flexible curve representation. For simpler</span></span> <a id="line13"></a><span class="lineno">13</span><span class="line"><span class="comment">//. cases you may prefer to use a `Bezier` curve.</span></span> <a id="line14"></a><span class="lineno">14</span><span class="line"><span class="comment">//.</span></span> <a id="line15"></a><span class="lineno">15</span><span class="line"><span class="comment">//. While non-rational curves are not sufficient to represent a circle,</span></span> <a id="line16"></a><span class="lineno">16</span><span class="line"><span class="comment">//. this is one of many sets of NURBS control points for an almost uniformly </span></span> <a id="line17"></a><span class="lineno">17</span><span class="line"><span class="comment">//. parameterized circle:</span></span> <a id="line18"></a><span class="lineno">18</span><span class="line"><span class="comment">//.</span></span> <a id="line19"></a><span class="lineno">19</span><span class="line"><span class="comment">//. +--+----+-------------+</span></span> <a id="line20"></a><span class="lineno">20</span><span class="line"><span class="comment">//. |x | y | weight |</span></span> <a id="line21"></a><span class="lineno">21</span><span class="line"><span class="comment">//. +==+====+=============+</span></span> <a id="line22"></a><span class="lineno">22</span><span class="line"><span class="comment">//. |1 | 0 | 1 |</span></span> <a id="line23"></a><span class="lineno">23</span><span class="line"><span class="comment">//. +--+----+-------------+</span></span> <a id="line24"></a><span class="lineno">24</span><span class="line"><span class="comment">//. |1 | 1 | `sqrt(2)/2` |</span></span> <a id="line25"></a><span class="lineno">25</span><span class="line"><span class="comment">//. +--+----+-------------+</span></span> <a id="line26"></a><span class="lineno">26</span><span class="line"><span class="comment">//. |0 | 1 | 1 |</span></span> <a id="line27"></a><span class="lineno">27</span><span class="line"><span class="comment">//. +--+----+-------------+</span></span> <a id="line28"></a><span class="lineno">28</span><span class="line"><span class="comment">//. |-1| 1 | `sqrt(2)/2` |</span></span> <a id="line29"></a><span class="lineno">29</span><span class="line"><span class="comment">//. +--+----+-------------+</span></span> <a id="line30"></a><span class="lineno">30</span><span class="line"><span class="comment">//. |-1| 0 | 1 |</span></span> <a id="line31"></a><span class="lineno">31</span><span class="line"><span class="comment">//. +--+----+-------------+</span></span> <a id="line32"></a><span class="lineno">32</span><span class="line"><span class="comment">//. |-1| -1 | `sqrt(2)/2` |</span></span> <a id="line33"></a><span class="lineno">33</span><span class="line"><span class="comment">//. +--+----+-------------+</span></span> <a id="line34"></a><span class="lineno">34</span><span class="line"><span class="comment">//. |0 | -1 | 1 |</span></span> <a id="line35"></a><span class="lineno">35</span><span class="line"><span class="comment">//. +--+----+-------------+</span></span> <a id="line36"></a><span class="lineno">36</span><span class="line"><span class="comment">//. |1 | -1 | `sqrt(2)/2` |</span></span> <a id="line37"></a><span class="lineno">37</span><span class="line"><span class="comment">//. +--+----+-------------+</span></span> <a id="line38"></a><span class="lineno">38</span><span class="line"><span class="comment">//. |1 | 0 | 1 |</span></span> <a id="line39"></a><span class="lineno">39</span><span class="line"><span class="comment">//. +--+----+-------------+</span></span> <a id="line40"></a><span class="lineno">40</span><span class="line"><span class="comment">//.</span></span> <a id="line41"></a><span class="lineno">41</span><span class="line"><span class="comment">//. The order is three, the knot vector is {0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 4}.</span></span> <a id="line42"></a><span class="lineno">42</span><span class="line"><span class="comment">//. It should be noted that the circle is composed of four quarter circles,</span></span> <a id="line43"></a><span class="lineno">43</span><span class="line"><span class="comment">//. tied together with double knots. Although double knots in a third order NURBS</span></span> <a id="line44"></a><span class="lineno">44</span><span class="line"><span class="comment">//. curve would normally result in loss of continuity in the first derivative,</span></span> <a id="line45"></a><span class="lineno">45</span><span class="line"><span class="comment">//. the control points are positioned in such a way that the first derivative is continuous.</span></span> <a id="line46"></a><span class="lineno">46</span><span class="line"><span class="comment">//. (From Wikipedia_ )</span></span> <a id="line47"></a><span class="lineno">47</span><span class="line"><span class="comment">//.</span></span> <a id="line48"></a><span class="lineno">48</span><span class="line"><span class="comment">//. .. _Wikipedia: http://en.wikipedia.org/wiki/NURBS</span></span> <a id="line49"></a><span class="lineno">49</span><span class="line"><span class="comment">//.</span></span> <a id="line50"></a><span class="lineno">50</span><span class="line"><span class="comment">//. Example::</span></span> <a id="line51"></a><span class="lineno">51</span><span class="line"><span class="comment">//.</span></span> <a id="line52"></a><span class="lineno">52</span><span class="line"><span class="comment">//. Nurbs<3> circle;</span></span> <a id="line53"></a><span class="lineno">53</span><span class="line"><span class="comment">//. circle.insert_control_point(0, Vertex(1., 0.), 1.);</span></span> <a id="line54"></a><span class="lineno">54</span><span class="line"><span class="comment">//. circle.insert_control_point(0, Vertex(1., 1.), sqrt(2.)/2.);</span></span> <a id="line55"></a><span class="lineno">55</span><span class="line"><span class="comment">//. ...</span></span> <a id="line56"></a><span class="lineno">56</span><span class="line"><span class="comment">//.</span></span> <a id="line57"></a><span class="lineno">57</span><span class="line">template <size_t Order></span> <a id="line58"></a><span class="lineno">58</span><span class="line"><span class="keyword">class</span> <a href="http://localhost:8000/sxr/ident?full=1&string=Paths%3A%3ANurbs" title="class Paths::Nurbs">Nurbs</a> : <span class="keyword">public</span> <a href="http://localhost:8000/sxr/ident?full=1&string=Path" title="class Path">Path</a></span> <a id="line59"></a><span class="lineno">59</span><span class="line">{</span> <a id="line60"></a><span class="lineno">60</span><span class="line"><span class="keyword">public</span>:</span> <a id="line61"></a><span class="lineno">61</span><span class="line"> <span class="comment">//. Create a new Nurbs curve.</span></span> <a id="line62"></a><span class="lineno">62</span><span class="line"> <a href="http://localhost:8000/sxr/ident?full=1&string=Paths%3A%3ANurbs%3A%3ANurbs%28%29" title="member function Paths::Nurbs::Nurbs()">Nurbs</a>();</span> <a id="line63"></a><span class="lineno">63</span><span class="line"> <span class="comment">//. Inserts a control point with the given weight.</span></span> <a id="line64"></a><span class="lineno">64</span><span class="line"><span class="comment"> //. The knot value determines the position in the sequence.</span></span> <a id="line65"></a><span class="lineno">65</span><span class="line"><span class="comment"> //.</span></span> <a id="line66"></a><span class="lineno">66</span><span class="line"><span class="comment"> //. Parameters:</span></span> <a id="line67"></a><span class="lineno">67</span><span class="line"><span class="comment"> //. :knot: the parameter value at which to insert a new knot</span></span> <a id="line68"></a><span class="lineno">68</span><span class="line"><span class="comment"> //. :vertex: the control point</span></span> <a id="line69"></a><span class="lineno">69</span><span class="line"><span class="comment"> //. :weight: the weight of the control point</span></span> <a id="line70"></a><span class="lineno">70</span><span class="line"> <span class="keyword">void</span> <a href="http://localhost:8000/sxr/ident?full=1&string=Paths%3A%3ANurbs%3A%3Ainsert_control_point%28double%2Cconst%20Vertex%26%2Cdouble%29" title="member function Paths::Nurbs::insert_control_point(double,const Vertex&,double)">insert_control_point</a>(<span class="keyword">double</span> knot, <span class="keyword">const</span> <a href="http://localhost:8000/sxr/ident?full=1&string=Vertex" title="struct Vertex">Vertex</a> &vertex,</span> <a id="line71"></a><span class="lineno">71</span><span class="line"> <span class="keyword">double</span> weight);</span> <a id="line72"></a><span class="lineno">72</span><span class="line"> virtual <span class="keyword">void</span> <a href="http://localhost:8000/sxr/ident?full=1&string=Paths%3A%3ANurbs%3A%3Adraw%28%29" title="member function Paths::Nurbs::draw()">draw</a>();</span> <a id="line73"></a><span class="lineno">73</span><span class="line"><span class="keyword">private</span>:</span> <a id="line74"></a><span class="lineno">74</span><span class="line"> <span class="comment">//. The data...</span></span> <a id="line75"></a><span class="lineno">75</span><span class="line"> std::<a href="http://localhost:8000/sxr/ident?full=1&string=std%3A%3Avector" title="class std::vector">vector</a><<a href="http://localhost:8000/sxr/ident?full=1&string=Vertex" title="struct Vertex">Vertex</a>> <a href="http://localhost:8000/sxr/ident?full=1&string=Paths%3A%3ANurbs%3A%3Acontrols_" title="data member Paths::Nurbs::controls_">controls_</a>;</span> <a id="line76"></a><span class="lineno">76</span><span class="line"> std::<a href="http://localhost:8000/sxr/ident?full=1&string=std%3A%3Avector" title="class std::vector">vector</a><<span class="keyword">double</span>> <a href="http://localhost:8000/sxr/ident?full=1&string=Paths%3A%3ANurbs%3A%3Aweights_" title="data member Paths::Nurbs::weights_">weights_</a>;</span> <a id="line77"></a><span class="lineno">77</span><span class="line"> std::<a href="http://localhost:8000/sxr/ident?full=1&string=std%3A%3Avector" title="class std::vector">vector</a><<span class="keyword">double</span>> <a href="http://localhost:8000/sxr/ident?full=1&string=Paths%3A%3ANurbs%3A%3Aknots_" title="data member Paths::Nurbs::knots_">knots_</a>;</span> <a id="line78"></a><span class="lineno">78</span><span class="line">};</span> <a id="line79"></a><span class="lineno">79</span> <a id="line80"></a><span class="lineno">80</span><span class="line">}</span> <a id="line81"></a><span class="lineno">81</span> <a id="line82"></a><span class="lineno">82</span><span class="line">#endif</span> </pre> <div class="logo">Generated on Fri Apr 17 08:48:15 2009 by <br/> <a href="http://synopsis.fresco.org" ><img src="../synopsis.png" alt="logo"/> synopsis</a> (version devel)</div> </body> </html>