Library of Assembled Shared Sources
line_segment_2d.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
44
45/** @class lass::prim::LineSegment2D
46 * @brief 2D Line Segment
47 * @author Bram de Greve [BdG]
48 * @date 2003
49 */
50
51
52
53#ifndef LASS_GUARDIAN_OF_INCLUSION_PRIM_LINE_SEGMENT_2D_H
54#define LASS_GUARDIAN_OF_INCLUSION_PRIM_LINE_SEGMENT_2D_H
55
56#include "prim_common.h"
57#include "parameter_policy.h"
58#include "point_2d.h"
60
61
62
63namespace lass
64{
65
66namespace prim
67{
68
69template
70<
71 typename T,
72 class ParameterPolicy = Bounded
73>
74class LineSegment2D
75{
76public:
77
78 typedef LineSegment2D<T, ParameterPolicy> TSelf;
79 typedef ParameterPolicy TParameterPolicy;
80
81 typedef Point2D<T> TPoint;
82 typedef typename TPoint::TVector TVector;
83 typedef typename TPoint::TNumTraits TNumTraits;
84 typedef typename TPoint::TValue TValue;
85 typedef typename TPoint::TParam TParam;
86 typedef typename TPoint::TReference TReference;
87 typedef typename TPoint::TConstReference TConstReference;
88
89 enum
90 {
91 dimension = TPoint::dimension
92 };
93
94 template <typename U> struct Rebind
95 {
96 typedef LineSegment2D<U, ParameterPolicy> Type;
97 };
98
99 LineSegment2D();
100 LineSegment2D(const TPoint& tail, const TPoint& head);
101
102 const TPoint& tail() const;
103 TPoint& tail();
104 const TPoint& head() const;
105 TPoint& head();
106
107 const TPoint point(TParam t) const;
108 const TValue t(const TPoint& point) const;
109 const TVector vector() const;
110 const TValue length() const;
111
112private:
113
114 TPoint tail_;
115 TPoint head_;
116};
117
118template <typename T, class PPa, class PPb> bool operator==(const LineSegment2D<T, PPa>& a, const LineSegment2D<T, PPb>& b);
119template <typename T, class PPa, class PPb> bool operator!=(const LineSegment2D<T, PPa>& a, const LineSegment2D<T, PPb>& b);
120
121template <typename T, class PP>
122T squaredDistance(const LineSegment2D<T, PP>& segment, const Point2D<T>& point);
123
124template <typename T, class PP>
125T distance(const LineSegment2D<T, PP>& segment, const Point2D<T>& point);
126
127template <typename T, class PPa, class PPb>
128Result intersect(const LineSegment2D<T, PPa>& a, const LineSegment2D<T, PPb>& b, T& tA, T& tB);
129
130template <typename T, class PPa, class PPb>
131Result intersect(const LineSegment2D<T, PPa>& a, const LineSegment2D<T, PPb>& b, Point2D<T>& point);
132
133template <typename T, class PPa, class PPb>
134bool intersects(const LineSegment2D<T, PPa>& a, const LineSegment2D<T, PPb>& b);
135
136template<typename T, class PP>
137std::ostream& operator<<(std::ostream& stream, const LineSegment2D<T, PP>& segment);
138
139template<typename T, class PP>
140io::XmlOStream& operator<<(io::XmlOStream& stream, const LineSegment2D<T, PP>& segment);
141
142template<typename T, class PP>
143lass::io::MatlabOStream& operator<<(lass::io::MatlabOStream& stream, const LineSegment2D<T, PP>& segment);
144
145}
146
147}
148
149#include "line_segment_2d.inl"
150
151#define LASS_PRIM_HAVE_PY_EXPORT_TRAITS_LINE_SEGMENT_2D
152#ifdef LASS_GUARDIAN_OF_INCLUSION_UTIL_PYOBJECT_PLUS_H
154#endif
155
156#ifdef LASS_GUARDIAN_OF_INCLUSION_PRIM_RAY_2D_H
157# include "line_segment_2d_ray_2d.h"
158#endif
159
160#endif
Output stream for writing a selection of geometric primitives to matlab M files.
Output stream for writing a selection of geometric primitives to XML files.
const TVector vector() const
Return vector from tail to head.
const TPoint point(TParam t) const
Return point on ray by it's parameter.
const TValue length() const
Return length of line segment.
const TValue t(const TPoint &point) const
set of geometrical primitives
Definition aabb_2d.h:81
Result
meta information on the result you have from an operation like an intersection ...
Definition result.h:74
Library for Assembled Shared Sources.
Definition config.h:53
Parameters supplied to functions must be in the range of the primitive.