Library of Assembled Shared Sources
point_2dh.h
Go to the documentation of this file.
1/** @file
2 * @author Bram de Greve (bram@cocamware.com)
3 * @author Tom De Muer (tom@cocamware.com)
4 *
5 * *** BEGIN LICENSE INFORMATION ***
6 *
7 * The contents of this file are subject to the Common Public Attribution License
8 * Version 1.0 (the "License"); you may not use this file except in compliance with
9 * the License. You may obtain a copy of the License at
10 * http://lass.sourceforge.net/cpal-license. The License is based on the
11 * Mozilla Public License Version 1.1 but Sections 14 and 15 have been added to cover
12 * use of software over a computer network and provide for limited attribution for
13 * the Original Developer. In addition, Exhibit A has been modified to be consistent
14 * with Exhibit B.
15 *
16 * Software distributed under the License is distributed on an "AS IS" basis, WITHOUT
17 * WARRANTY OF ANY KIND, either express or implied. See the License for the specific
18 * language governing rights and limitations under the License.
19 *
20 * The Original Code is LASS - Library of Assembled Shared Sources.
21 *
22 * The Initial Developer of the Original Code is Bram de Greve and Tom De Muer.
23 * The Original Developer is the Initial Developer.
24 *
25 * All portions of the code written by the Initial Developer are:
26 * Copyright (C) 2004-2011 the Initial Developer.
27 * All Rights Reserved.
28 *
29 * Contributor(s):
30 *
31 * Alternatively, the contents of this file may be used under the terms of the
32 * GNU General Public License Version 2 or later (the GPL), in which case the
33 * provisions of GPL are applicable instead of those above. If you wish to allow use
34 * of your version of this file only under the terms of the GPL and not to allow
35 * others to use your version of this file under the CPAL, indicate your decision by
36 * deleting the provisions above and replace them with the notice and other
37 * provisions required by the GPL License. If you do not delete the provisions above,
38 * a recipient may use your version of this file under either the CPAL or the GPL.
39 *
40 * *** END LICENSE INFORMATION ***
41 */
42
43/** @struct lass::prim::Point2DH
44 * @brief homogenous 2D Point
45 * @author BdG
46 * @date 2003
47 */
48
49#ifndef LASS_GUARDIAN_OF_INCLUSION_PRIM_POINT_2DH_H
50#define LASS_GUARDIAN_OF_INCLUSION_PRIM_POINT_2DH_H
51
52#include "prim_common.h"
53#include "point_2d.h"
54#include "vector_3d.h"
55
56namespace lass
57{
58namespace prim
59{
60
61template<typename T>
62struct LASS_SIMD_ALIGN Point2DH
63{
64public:
65
66 typedef Point2DH<T> TSelf;
67
68 typedef Point2D<T> TPoint;
69 typedef Vector3D<T> TVector;
70
71 typedef typename TVector::TValue TValue;
72 typedef typename TVector::TParam TParam;
73 typedef typename TVector::TReference TReference;
74 typedef typename TVector::TConstReference TConstReference;
75 typedef typename TVector::TNumTraits TNumTraits;
76
77 enum { dimension = TPoint::dimension }; /**< number of dimensions */
78
79 template <typename U> struct Rebind
80 {
81 typedef Point2DH<U> Type;
82 };
83
84 TValue x;
85 TValue y;
86 TValue z;
87
88 Point2DH();
89 Point2DH(TParam iX, TParam iY, TParam iZ = TNumTraits::one);
90 Point2DH(const TPoint& iAffinePoint);
91 explicit Point2DH(const TVector& iPositionVector);
92
93 const TVector position() const;
94 TConstReference operator[](size_t iIndex) const;
95 TReference operator[](size_t iIndex);
96 TConstReference at(signed iIndex) const;
97 TReference at(signed iIndex);
98
99 const Point2DH<T>& operator+() const;
100 const Point2DH<T> operator-() const;
101
102 Point2DH<T>& operator+=(const Point2DH<T>& iB);
103 Point2DH<T>& operator-=(const Point2DH<T>& iB);
104 Point2DH<T>& operator*=(TParam iB);
105 Point2DH<T>& operator/=(TParam iB);
106
107 bool isZero() const;
108 bool isInfinite() const;
109 bool isNaN() const;
110 bool isValid() const;
111 const TValue weight() const;
112 const Point2D<T> affine() const;
113
115};
116
117template<typename T> bool operator==(const Point2DH<T>& iA, const Point2DH<T>& iB);
118template<typename T> bool operator!=(const Point2DH<T>& iA, const Point2DH<T>& iB);
119
120template<typename T> Point2DH<T> operator+(const Point2DH<T>& iA, const Point2DH<T>& iB);
121template<typename T> Point2DH<T> operator+(const Point2DH<T>& iA, const Point2D<T>& iB);
122template<typename T> Point2DH<T> operator+(const Point2D<T>& iA, const Point2DH<T>& iB);
123template<typename T> Point2DH<T> operator+(const Point2D<T>& iA, const Point2D<T>& iB);
124
125template<typename T> Point2DH<T> operator-(const Point2DH<T>& iA, const Point2DH<T>& iB);
126template<typename T> Point2DH<T> operator*(const Point2DH<T>& iA, typename Point2DH<T>::TParam iB);
127template<typename T> Point2DH<T> operator/(const Point2DH<T>& iA, typename Point2DH<T>::TParam iB);
128template<typename T> Point2DH<T> operator*(typename Point2DH<T>::TParam iA, const Point2DH<T>& iB);
129
130template<typename T> std::ostream& operator<<(std::ostream& oOStream, const Point2DH<T>& iB);
131template<typename T> io::XmlOStream& operator<<(io::XmlOStream& oOStream, const Point2DH<T>& iB);
132template<typename T> std::istream& operator>>(std::istream& ioIStream, Point2DH<T>& oB);
133
134
135
136}
137
138}
139
140#include "point_2dh.inl"
141
142#endif
143
144// --- END OF FILE ------------------------------------------------------------------------------
Output stream for writing a selection of geometric primitives to XML files.
#define LASS_SIMD_ALIGN
if LASS_SIMD_ALIGNMENT is set, use LASS_SIMD_ALIGN to align some structures on SIMD alignment boundar...
set of geometrical primitives
Definition aabb_2d.h:81
Library for Assembled Shared Sources.
Definition config.h:53
homogenous 2D Point
Definition point_2dh.h:63
void homogenize()
Rescale point so that weight is 1.
bool isValid() const
Return true if point is valid.
TReference at(signed iIndex)
Wrap index around range.
TConstReference at(signed iIndex) const
Wrap index around range.
bool isNaN() const
Return true if at least one of the components is NaN.
bool isZero() const
Return true if point is origin (0, 0, z).
bool isInfinite() const
Return true if point is at infinite distance of origin.
const Point2D< T > affine() const
Return rescaled version of point with weight = 1.
const Point2DH< T > & operator+() const
A weird way to get back the same object.
const TValue weight() const
Return weight of point.