GRALE
line2d.h
Go to the documentation of this file.
1 /*
2 
3  This file is a part of GRALE, a library to facilitate the simulation
4  and inversion of gravitational lenses.
5 
6  Copyright (C) 2008-2012 Jori Liesenborgs
7 
8  Contact: jori.liesenborgs@gmail.com
9 
10  This program is free software; you can redistribute it and/or modify
11  it under the terms of the GNU General Public License as published by
12  the Free Software Foundation; either version 2 of the License, or
13  (at your option) any later version.
14 
15  This program is distributed in the hope that it will be useful,
16  but WITHOUT ANY WARRANTY; without even the implied warranty of
17  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18  GNU General Public License for more details.
19 
20  You should have received a copy of the GNU General Public License
21  along with this program; if not, write to the Free Software
22  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
23 
24 */
25 
30 #ifndef GRALE_LINE2D_H
31 
32 #define GRALE_LINE2D_H
33 
34 #include "graleconfig.h"
35 #include "vector2d.h"
36 
37 namespace grale
38 {
39 
41 template<class T>
42 class Line2D
43 {
44 public:
45  Line2D() { }
46  Line2D(Vector2D<T> point, Vector2D<T> direction) { m_pt = point; m_dir = direction; }
47  ~Line2D() { }
48  Vector2D<T> getIntersection(const Line2D<T> &l) const;
49  Vector2D<T> getIntersection(const Line2D<T> &l, T &factor) const;
50  T getIntersectionFactor(const Line2D<T> &l) const;
51  Vector2D<T> getPoint(T factor) const { return m_pt + m_dir*factor; }
52  Vector2D<T> getDirection() const { return m_dir; }
53 private:
54  Vector2D<T> m_pt, m_dir;
55 };
56 
57 template<class T>
59 {
60  Vector2D<T> diff = l.m_pt - m_pt;
61  T coeff = (l.m_dir.getY()*diff.getX() - l.m_dir.getX()*diff.getY())/(m_dir.getX()*l.m_dir.getY() - m_dir.getY()*l.m_dir.getX());
62  Vector2D<T> result = m_pt + m_dir*coeff;
63  return result;
64 }
65 
66 template<class T>
67 inline Vector2D<T> Line2D<T>::getIntersection(const Line2D<T> &l, T &factor) const
68 {
69  Vector2D<T> diff = l.m_pt - m_pt;
70  T coeff = (l.m_dir.getY()*diff.getX() - l.m_dir.getX()*diff.getY())/(m_dir.getX()*l.m_dir.getY() - m_dir.getY()*l.m_dir.getX());
71  Vector2D<T> result = m_pt + m_dir*coeff;
72  factor = coeff;
73  return result;
74 }
75 
76 template<class T>
77 inline T Line2D<T>::getIntersectionFactor(const Line2D<T> &l) const
78 {
79  Vector2D<T> diff = l.m_pt-m_pt;
80  T coeff = (l.m_dir.getY()*diff.getX() - l.m_dir.getX()*diff.getY())/(m_dir.getX()*l.m_dir.getY() - m_dir.getY()*l.m_dir.getX());
81  return coeff;
82 }
83 
84 } // end namespace
85 
86 #endif // GRALE_LINE2D_H
87