1
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
<html xmlns="http://www.w3.org/1999/xhtml">
4
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
5
<title>Ipelib: ipe::Vector Class Reference</title>
6
<link href="tabs.css" rel="stylesheet" type="text/css"/>
7
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
10
<!-- Generated by Doxygen 1.6.1 -->
11
<div class="navigation" id="top">
14
<li><a href="index.html"><span>Main Page</span></a></li>
15
<li><a href="modules.html"><span>Modules</span></a></li>
16
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
17
<li class="current"><a href="annotated.html"><span>Classes</span></a></li>
22
<li><a href="annotated.html"><span>Class List</span></a></li>
23
<li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
24
<li><a href="functions.html"><span>Class Members</span></a></li>
27
<div class="navpath"><a class="el" href="namespaceipe.html">ipe</a>::<a class="el" href="classipe_1_1_vector.html">Vector</a>
30
<div class="contents">
31
<h1>ipe::Vector Class Reference<br/>
33
[<a class="el" href="group__geo.html">Ipe Geometry</a>]</small>
34
</h1><!-- doxytag: class="ipe::Vector" -->
35
<p>Two-dimensional vector.
36
<a href="#_details">More...</a></p>
38
<p><code>#include <ipegeo.h></code></p>
40
<p><a href="classipe_1_1_vector-members.html">List of all members.</a></p>
41
<h2>Public Member Functions</h2>
43
<li><a class="el" href="classipe_1_1_vector.html#a9aedcf004469e106f41dadc9d4c62c87">Vector</a> ()
44
<li><a class="el" href="classipe_1_1_vector.html#a38d42604d73a43033827d448cd5399f9">Vector</a> (<a class="el" href="classipe_1_1_angle.html">Angle</a> alpha)
45
<li><a class="el" href="classipe_1_1_vector.html#a86b983c2e27848118e6915eeab637c38">Vector</a> (double x0, double y0)
46
<li>double <a class="el" href="classipe_1_1_vector.html#ad6885e6f5ccc84c350586dc5d80ab0e3">sqLen</a> () const
47
<li>double <a class="el" href="classipe_1_1_vector.html#a0dc0ef365ced49d06a5fe2939110ef27">len</a> () const
48
<li><a class="el" href="classipe_1_1_angle.html">Angle</a> <a class="el" href="classipe_1_1_vector.html#a5fe639c2d2ab81e520362beb9da4e449">angle</a> () const
49
<li><a class="el" href="classipe_1_1_vector.html">Vector</a> <a class="el" href="classipe_1_1_vector.html#a8ce08766d55e9cdb038a9e2a33770bd4">normalized</a> () const
50
<li><a class="el" href="classipe_1_1_vector.html">Vector</a> <a class="el" href="classipe_1_1_vector.html#a2e9b25c727b204a7e800a26c610710e6">orthogonal</a> () const
51
<li>double <a class="el" href="classipe_1_1_vector.html#acb93428adb40dc8b985b1e117f2b785f">factorize</a> (<a class="el" href="classipe_1_1_vector.html">Vector</a> &unit) const
52
<li>bool <a class="el" href="classipe_1_1_vector.html#ab04ec135769232012ce31a38ca6963ef">snap</a> (const <a class="el" href="classipe_1_1_vector.html">Vector</a> &mouse, <a class="el" href="classipe_1_1_vector.html">Vector</a> &pos, double &bound) const
53
<li>bool <a class="el" href="classipe_1_1_vector.html#adb1f3336edfdb29b15d87a52a985d3d9">operator==</a> (const <a class="el" href="classipe_1_1_vector.html">Vector</a> &rhs) const
54
<li>bool <a class="el" href="classipe_1_1_vector.html#ac92a5bedc550bfef7ca92dd543109d42">operator!=</a> (const <a class="el" href="classipe_1_1_vector.html">Vector</a> &rhs) const
55
<li>void <a class="el" href="classipe_1_1_vector.html#ac83e87030a6d2c3bf0e7c50edf3f15b7">operator+=</a> (const <a class="el" href="classipe_1_1_vector.html">Vector</a> &rhs)
56
<li>void <a class="el" href="classipe_1_1_vector.html#a3fb016381f7021c7ebb960aa4a3268b6">operator-=</a> (const <a class="el" href="classipe_1_1_vector.html">Vector</a> &rhs)
57
<li>void <a class="el" href="classipe_1_1_vector.html#a94b73c51ef714b506afd5dbae4f562e8">operator*=</a> (double rhs)
58
<li><a class="el" href="classipe_1_1_vector.html">Vector</a> <a class="el" href="classipe_1_1_vector.html#a35636730f8f73ec1de8c635d2d3416d4">operator+</a> (const <a class="el" href="classipe_1_1_vector.html">Vector</a> &rhs) const
59
<li><a class="el" href="classipe_1_1_vector.html">Vector</a> <a class="el" href="classipe_1_1_vector.html#acc3cc64b3397b2ed8cf2a492386be7b9">operator-</a> (const <a class="el" href="classipe_1_1_vector.html">Vector</a> &rhs) const
60
<li><a class="el" href="classipe_1_1_vector.html">Vector</a> <a class="el" href="classipe_1_1_vector.html#a1e84886d4b5a1bd0bad56e1462af05f0">operator*</a> (double rhs) const
61
<li><a class="el" href="classipe_1_1_vector.html">Vector</a> <a class="el" href="classipe_1_1_vector.html#ad828e9c5c3197678d001f1e34127cc56">operator-</a> () const
63
<h2>Public Attributes</h2>
65
<li>double <a class="el" href="classipe_1_1_vector.html#a58668804796f6ee15eaa12c19e780e6e">x</a>
66
<li>double <a class="el" href="classipe_1_1_vector.html#a3d1e88586b23678ae56cbc46e1436e11">y</a>
68
<h2>Static Public Attributes</h2>
70
<li>static <a class="el" href="classipe_1_1_vector.html">Vector</a> <a class="el" href="classipe_1_1_vector.html#a417d6c7cc04768887921fbeae6bc4d17">ZERO</a> = <a class="el" href="classipe_1_1_vector.html">Vector</a>(0.0, 0.0)
72
<h2>Related Functions</h2>
73
<p>(Note that these are not member functions.) </p>
75
<li><a class="el" href="classipe_1_1_vector.html">Vector</a> <a class="el" href="classipe_1_1_vector.html#af1b7f920324ab230c303c352421c799a">operator*</a> (double lhs, const <a class="el" href="classipe_1_1_vector.html">Vector</a> &rhs)
76
<li>double <a class="el" href="classipe_1_1_vector.html#a05cf85096758f8283563aa8e98f05590">dot</a> (const <a class="el" href="classipe_1_1_vector.html">Vector</a> &lhs, const <a class="el" href="classipe_1_1_vector.html">Vector</a> &rhs)
78
<hr/><a name="_details"></a><h2>Detailed Description</h2>
79
<p>Two-dimensional vector. </p>
80
<p>Unlike some other libraries, I don't make a difference between points and vectors. </p>
81
<hr/><h2>Constructor & Destructor Documentation</h2>
82
<a class="anchor" id="a9aedcf004469e106f41dadc9d4c62c87"></a><!-- doxytag: member="ipe::Vector::Vector" ref="a9aedcf004469e106f41dadc9d4c62c87" args="()" -->
84
<div class="memproto">
85
<table class="memname">
87
<td class="memname">ipe::Vector::Vector </td>
89
<td class="paramname"></td>
90
<td> ) </td>
91
<td><code> [inline]</code></td>
97
<p>Uninitialized vector. </p>
101
<a class="anchor" id="a38d42604d73a43033827d448cd5399f9"></a><!-- doxytag: member="ipe::Vector::Vector" ref="a38d42604d73a43033827d448cd5399f9" args="(Angle alpha)" -->
102
<div class="memitem">
103
<div class="memproto">
104
<table class="memname">
106
<td class="memname">Vector::Vector </td>
108
<td class="paramtype"><a class="el" href="classipe_1_1_angle.html">Angle</a> </td>
109
<td class="paramname"> <em>alpha</em></td>
110
<td> ) </td>
111
<td><code> [explicit]</code></td>
117
<p>Construct a unit vector with this direction. </p>
121
<a class="anchor" id="a86b983c2e27848118e6915eeab637c38"></a><!-- doxytag: member="ipe::Vector::Vector" ref="a86b983c2e27848118e6915eeab637c38" args="(double x0, double y0)" -->
122
<div class="memitem">
123
<div class="memproto">
124
<table class="memname">
126
<td class="memname">ipe::Vector::Vector </td>
128
<td class="paramtype">double </td>
129
<td class="paramname"> <em>x0</em>, </td>
132
<td class="paramkey"></td>
134
<td class="paramtype">double </td>
135
<td class="paramname"> <em>y0</em></td><td> </td>
140
<td></td><td></td><td><code> [inline, explicit]</code></td>
146
<p>Construct a vector. </p>
150
<hr/><h2>Member Function Documentation</h2>
151
<a class="anchor" id="ad6885e6f5ccc84c350586dc5d80ab0e3"></a><!-- doxytag: member="ipe::Vector::sqLen" ref="ad6885e6f5ccc84c350586dc5d80ab0e3" args="() const " -->
152
<div class="memitem">
153
<div class="memproto">
154
<table class="memname">
156
<td class="memname">double ipe::Vector::sqLen </td>
158
<td class="paramname"></td>
159
<td> ) </td>
160
<td> const<code> [inline]</code></td>
166
<p>Return square of Euclidean length. </p>
167
<p>Return square of vector's length. </p>
171
<a class="anchor" id="a0dc0ef365ced49d06a5fe2939110ef27"></a><!-- doxytag: member="ipe::Vector::len" ref="a0dc0ef365ced49d06a5fe2939110ef27" args="() const " -->
172
<div class="memitem">
173
<div class="memproto">
174
<table class="memname">
176
<td class="memname">double Vector::len </td>
178
<td class="paramname"></td>
179
<td> ) </td>
188
<a class="anchor" id="a5fe639c2d2ab81e520362beb9da4e449"></a><!-- doxytag: member="ipe::Vector::angle" ref="a5fe639c2d2ab81e520362beb9da4e449" args="() const " -->
189
<div class="memitem">
190
<div class="memproto">
191
<table class="memname">
193
<td class="memname"><a class="el" href="classipe_1_1_angle.html">Angle</a> Vector::angle </td>
195
<td class="paramname"></td>
196
<td> ) </td>
203
<p>Return angle of the vector (with positive x-direction). </p>
204
<p>The returned angle lies between -pi and +pi. Returns zero for the zero vector. </p>
208
<a class="anchor" id="a8ce08766d55e9cdb038a9e2a33770bd4"></a><!-- doxytag: member="ipe::Vector::normalized" ref="a8ce08766d55e9cdb038a9e2a33770bd4" args="() const " -->
209
<div class="memitem">
210
<div class="memproto">
211
<table class="memname">
213
<td class="memname"><a class="el" href="classipe_1_1_vector.html">Vector</a> Vector::normalized </td>
215
<td class="paramname"></td>
216
<td> ) </td>
223
<p>Return this vector normalized (with length one). </p>
224
<p>Normalizing the zero vector returns the vector (1,0). </p>
228
<a class="anchor" id="a2e9b25c727b204a7e800a26c610710e6"></a><!-- doxytag: member="ipe::Vector::orthogonal" ref="a2e9b25c727b204a7e800a26c610710e6" args="() const " -->
229
<div class="memitem">
230
<div class="memproto">
231
<table class="memname">
233
<td class="memname"><a class="el" href="classipe_1_1_vector.html">Vector</a> Vector::orthogonal </td>
235
<td class="paramname"></td>
236
<td> ) </td>
243
<p>Return this vector turned 90 degrees to the left. </p>
247
<a class="anchor" id="acb93428adb40dc8b985b1e117f2b785f"></a><!-- doxytag: member="ipe::Vector::factorize" ref="acb93428adb40dc8b985b1e117f2b785f" args="(Vector &unit) const " -->
248
<div class="memitem">
249
<div class="memproto">
250
<table class="memname">
252
<td class="memname">double Vector::factorize </td>
254
<td class="paramtype"><a class="el" href="classipe_1_1_vector.html">Vector</a> & </td>
255
<td class="paramname"> <em>unit</em></td>
256
<td> ) </td>
262
<p>Normalizes this vector into <em>unit</em> and returns length. If this is the zero vector, <em>unit</em> is set to (1,0). </p>
266
<a class="anchor" id="ab04ec135769232012ce31a38ca6963ef"></a><!-- doxytag: member="ipe::Vector::snap" ref="ab04ec135769232012ce31a38ca6963ef" args="(const Vector &mouse, Vector &pos, double &bound) const " -->
267
<div class="memitem">
268
<div class="memproto">
269
<table class="memname">
271
<td class="memname">bool Vector::snap </td>
273
<td class="paramtype">const <a class="el" href="classipe_1_1_vector.html">Vector</a> & </td>
274
<td class="paramname"> <em>mouse</em>, </td>
277
<td class="paramkey"></td>
279
<td class="paramtype"><a class="el" href="classipe_1_1_vector.html">Vector</a> & </td>
280
<td class="paramname"> <em>pos</em>, </td>
283
<td class="paramkey"></td>
285
<td class="paramtype">double & </td>
286
<td class="paramname"> <em>bound</em></td><td> </td>
291
<td></td><td></td><td> const</td>
297
<p><a class="el" href="classipe_1_1_snap.html" title="Performs snapping operations, and stores snapping state.">Snap</a> to nearby vertex. </p>
298
<p>If distance between <em>mouse</em> and this vector is less than <em>bound</em>, set <em>pos</em> to this vector and <em>bound</em> to the distance, and return <code>true</code>. </p>
302
<a class="anchor" id="adb1f3336edfdb29b15d87a52a985d3d9"></a><!-- doxytag: member="ipe::Vector::operator==" ref="adb1f3336edfdb29b15d87a52a985d3d9" args="(const Vector &rhs) const " -->
303
<div class="memitem">
304
<div class="memproto">
305
<table class="memname">
307
<td class="memname">bool ipe::Vector::operator== </td>
309
<td class="paramtype">const <a class="el" href="classipe_1_1_vector.html">Vector</a> & </td>
310
<td class="paramname"> <em>rhs</em></td>
311
<td> ) </td>
312
<td> const<code> [inline]</code></td>
322
<a class="anchor" id="ac92a5bedc550bfef7ca92dd543109d42"></a><!-- doxytag: member="ipe::Vector::operator!=" ref="ac92a5bedc550bfef7ca92dd543109d42" args="(const Vector &rhs) const " -->
323
<div class="memitem">
324
<div class="memproto">
325
<table class="memname">
327
<td class="memname">bool ipe::Vector::operator!= </td>
329
<td class="paramtype">const <a class="el" href="classipe_1_1_vector.html">Vector</a> & </td>
330
<td class="paramname"> <em>rhs</em></td>
331
<td> ) </td>
332
<td> const<code> [inline]</code></td>
342
<a class="anchor" id="ac83e87030a6d2c3bf0e7c50edf3f15b7"></a><!-- doxytag: member="ipe::Vector::operator+=" ref="ac83e87030a6d2c3bf0e7c50edf3f15b7" args="(const Vector &rhs)" -->
343
<div class="memitem">
344
<div class="memproto">
345
<table class="memname">
347
<td class="memname">void ipe::Vector::operator+= </td>
349
<td class="paramtype">const <a class="el" href="classipe_1_1_vector.html">Vector</a> & </td>
350
<td class="paramname"> <em>rhs</em></td>
351
<td> ) </td>
352
<td><code> [inline]</code></td>
358
<p>Vector-addition. </p>
362
<a class="anchor" id="a3fb016381f7021c7ebb960aa4a3268b6"></a><!-- doxytag: member="ipe::Vector::operator-=" ref="a3fb016381f7021c7ebb960aa4a3268b6" args="(const Vector &rhs)" -->
363
<div class="memitem">
364
<div class="memproto">
365
<table class="memname">
367
<td class="memname">void ipe::Vector::operator-= </td>
369
<td class="paramtype">const <a class="el" href="classipe_1_1_vector.html">Vector</a> & </td>
370
<td class="paramname"> <em>rhs</em></td>
371
<td> ) </td>
372
<td><code> [inline]</code></td>
378
<p>Vector-subtraction. </p>
382
<a class="anchor" id="a94b73c51ef714b506afd5dbae4f562e8"></a><!-- doxytag: member="ipe::Vector::operator*=" ref="a94b73c51ef714b506afd5dbae4f562e8" args="(double rhs)" -->
383
<div class="memitem">
384
<div class="memproto">
385
<table class="memname">
387
<td class="memname">void ipe::Vector::operator*= </td>
389
<td class="paramtype">double </td>
390
<td class="paramname"> <em>rhs</em></td>
391
<td> ) </td>
392
<td><code> [inline]</code></td>
398
<p>Multiply vector by scalar. </p>
402
<a class="anchor" id="a35636730f8f73ec1de8c635d2d3416d4"></a><!-- doxytag: member="ipe::Vector::operator+" ref="a35636730f8f73ec1de8c635d2d3416d4" args="(const Vector &rhs) const " -->
403
<div class="memitem">
404
<div class="memproto">
405
<table class="memname">
407
<td class="memname"><a class="el" href="classipe_1_1_vector.html">Vector</a> ipe::Vector::operator+ </td>
409
<td class="paramtype">const <a class="el" href="classipe_1_1_vector.html">Vector</a> & </td>
410
<td class="paramname"> <em>rhs</em></td>
411
<td> ) </td>
412
<td> const<code> [inline]</code></td>
418
<p>Vector-addition. </p>
422
<a class="anchor" id="acc3cc64b3397b2ed8cf2a492386be7b9"></a><!-- doxytag: member="ipe::Vector::operator-" ref="acc3cc64b3397b2ed8cf2a492386be7b9" args="(const Vector &rhs) const " -->
423
<div class="memitem">
424
<div class="memproto">
425
<table class="memname">
427
<td class="memname"><a class="el" href="classipe_1_1_vector.html">Vector</a> ipe::Vector::operator- </td>
429
<td class="paramtype">const <a class="el" href="classipe_1_1_vector.html">Vector</a> & </td>
430
<td class="paramname"> <em>rhs</em></td>
431
<td> ) </td>
432
<td> const<code> [inline]</code></td>
438
<p>Vector-subtraction. </p>
442
<a class="anchor" id="a1e84886d4b5a1bd0bad56e1462af05f0"></a><!-- doxytag: member="ipe::Vector::operator*" ref="a1e84886d4b5a1bd0bad56e1462af05f0" args="(double rhs) const " -->
443
<div class="memitem">
444
<div class="memproto">
445
<table class="memname">
447
<td class="memname"><a class="el" href="classipe_1_1_vector.html">Vector</a> ipe::Vector::operator* </td>
449
<td class="paramtype">double </td>
450
<td class="paramname"> <em>rhs</em></td>
451
<td> ) </td>
452
<td> const<code> [inline]</code></td>
458
<p><a class="el" href="classipe_1_1_vector.html" title="Two-dimensional vector.">Vector</a> * scalar. </p>
462
<a class="anchor" id="ad828e9c5c3197678d001f1e34127cc56"></a><!-- doxytag: member="ipe::Vector::operator-" ref="ad828e9c5c3197678d001f1e34127cc56" args="() const " -->
463
<div class="memitem">
464
<div class="memproto">
465
<table class="memname">
467
<td class="memname"><a class="el" href="classipe_1_1_vector.html">Vector</a> ipe::Vector::operator- </td>
469
<td class="paramname"></td>
470
<td> ) </td>
471
<td> const<code> [inline]</code></td>
477
<p>Unary minus for <a class="el" href="classipe_1_1_vector.html" title="Two-dimensional vector.">Vector</a>. </p>
481
<hr/><h2>Friends And Related Function Documentation</h2>
482
<a class="anchor" id="af1b7f920324ab230c303c352421c799a"></a><!-- doxytag: member="ipe::Vector::operator*" ref="af1b7f920324ab230c303c352421c799a" args="(double lhs, const Vector &rhs)" -->
483
<div class="memitem">
484
<div class="memproto">
485
<table class="memname">
487
<td class="memname"><a class="el" href="classipe_1_1_vector.html">Vector</a> operator* </td>
489
<td class="paramtype">double </td>
490
<td class="paramname"> <em>lhs</em>, </td>
493
<td class="paramkey"></td>
495
<td class="paramtype">const <a class="el" href="classipe_1_1_vector.html">Vector</a> & </td>
496
<td class="paramname"> <em>rhs</em></td><td> </td>
501
<td></td><td></td><td><code> [related]</code></td>
507
<p>Scalar * vector. </p>
511
<a class="anchor" id="a05cf85096758f8283563aa8e98f05590"></a><!-- doxytag: member="ipe::Vector::dot" ref="a05cf85096758f8283563aa8e98f05590" args="(const Vector &lhs, const Vector &rhs)" -->
512
<div class="memitem">
513
<div class="memproto">
514
<table class="memname">
516
<td class="memname">double dot </td>
518
<td class="paramtype">const <a class="el" href="classipe_1_1_vector.html">Vector</a> & </td>
519
<td class="paramname"> <em>lhs</em>, </td>
522
<td class="paramkey"></td>
524
<td class="paramtype">const <a class="el" href="classipe_1_1_vector.html">Vector</a> & </td>
525
<td class="paramname"> <em>rhs</em></td><td> </td>
530
<td></td><td></td><td><code> [related]</code></td>
536
<p>Dotproduct of two vectors. </p>
540
<hr/><h2>Member Data Documentation</h2>
541
<a class="anchor" id="a417d6c7cc04768887921fbeae6bc4d17"></a><!-- doxytag: member="ipe::Vector::ZERO" ref="a417d6c7cc04768887921fbeae6bc4d17" args="" -->
542
<div class="memitem">
543
<div class="memproto">
544
<table class="memname">
546
<td class="memname"><a class="el" href="classipe_1_1_vector.html">Vector</a> <a class="el" href="classipe_1_1_vector.html#a417d6c7cc04768887921fbeae6bc4d17">Vector::ZERO</a> = <a class="el" href="classipe_1_1_vector.html">Vector</a>(0.0, 0.0)<code> [static]</code></td>
552
<p>The origin (zero vector). </p>
556
<a class="anchor" id="a58668804796f6ee15eaa12c19e780e6e"></a><!-- doxytag: member="ipe::Vector::x" ref="a58668804796f6ee15eaa12c19e780e6e" args="" -->
557
<div class="memitem">
558
<div class="memproto">
559
<table class="memname">
561
<td class="memname">double <a class="el" href="classipe_1_1_vector.html#a58668804796f6ee15eaa12c19e780e6e">ipe::Vector::x</a></td>
567
<p>Coordinates are public. </p>
571
<a class="anchor" id="a3d1e88586b23678ae56cbc46e1436e11"></a><!-- doxytag: member="ipe::Vector::y" ref="a3d1e88586b23678ae56cbc46e1436e11" args="" -->
572
<div class="memitem">
573
<div class="memproto">
574
<table class="memname">
576
<td class="memname">double <a class="el" href="classipe_1_1_vector.html#a3d1e88586b23678ae56cbc46e1436e11">ipe::Vector::y</a></td>
582
<p>Coordinates are public. </p>
586
<hr/>The documentation for this class was generated from the following files:<ul>