lsst.jointcal
g29ae962dfc+7e0e65d7b2
Toggle main menu visibility
Loading...
Searching...
No Matches
src
Frame.cc
Go to the documentation of this file.
1
// -*- LSST-C++ -*-
2
/*
3
* This file is part of jointcal.
4
*
5
* Developed for the LSST Data Management System.
6
* This product includes software developed by the LSST Project
7
* (https://www.lsst.org).
8
* See the COPYRIGHT file at the top-level directory of this distribution
9
* for details of code ownership.
10
*
11
* This program is free software: you can redistribute it and/or modify
12
* it under the terms of the GNU General Public License as published by
13
* the Free Software Foundation, either version 3 of the License, or
14
* (at your option) any later version.
15
*
16
* This program is distributed in the hope that it will be useful,
17
* but WITHOUT ANY WARRANTY; without even the implied warranty of
18
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19
* GNU General Public License for more details.
20
*
21
* You should have received a copy of the GNU General Public License
22
* along with this program. If not, see <https://www.gnu.org/licenses/>.
23
*/
24
25
#include <iostream>
26
27
#include "
lsst/jointcal/Frame.h
"
28
29
namespace
lsst
{
30
namespace
jointcal
{
31
32
using namespace
std;
33
34
/****************** Frame class methods ***********************/
35
Frame::Frame
(
const
Point
&lowerLeft,
const
Point
&upperRight) {
36
*
this
=
Frame
(lowerLeft.
x
, lowerLeft.
y
, upperRight.
x
, upperRight.
y
);
37
}
38
39
Frame::Frame
(
double
xmin,
double
ymin,
double
xmax,
double
ymax) {
40
xMin
=
min
(xmin, xmax);
41
xMax
=
max
(xmin, xmax);
42
yMin
=
min
(ymin, ymax);
43
yMax
=
max
(ymin, ymax);
44
}
45
46
Frame::Frame
() {
xMin
=
xMax
=
yMin
=
yMax
= 0; }
47
48
/* positive if inside, negative if outside */
49
double
Frame::minDistToEdges
(
const
Point
&point)
const
{
50
return
min
(
min
(point.
x
-
xMin
,
xMax
- point.
x
)
/* minx */
,
51
min
(point.
y
-
yMin
,
yMax
- point.
y
)
/* miny */
);
52
}
53
54
Frame
Frame::operator*
(
const
Frame
&
right
)
const
{
55
Frame
result = *
this
;
56
result *=
right
;
57
return
result;
58
}
59
60
Frame
&
Frame::operator*=
(
const
Frame
&
right
) {
61
Frame
rightCopy =
right
;
62
// make sure that coordinates are properly ordered
63
order();
64
rightCopy.order();
65
xMin
=
max
(
xMin
, rightCopy.
xMin
);
66
xMax
=
min
(
xMax
,
right
.xMax);
67
yMin
=
max
(
yMin
,
right
.yMin);
68
yMax
=
min
(
yMax
,
right
.yMax);
69
// check for an actual overlap. Why was this check added?
70
if
(
xMin
>
xMax
||
yMin
>
yMax
) *
this
=
Frame
();
71
return
*
this
;
72
}
73
74
Frame
Frame::operator+
(
const
Frame
&
right
)
const
{
75
Frame
result = *
this
;
76
result +=
right
;
77
return
result;
78
}
79
80
Frame
&
Frame::operator+=
(
const
Frame
&
right
) {
81
Frame
rightCopy =
right
;
82
// make sure that coordinates are properly ordered
83
order();
84
rightCopy.order();
85
xMin
=
min
(
xMin
, rightCopy.
xMin
);
86
xMax
=
max
(
xMax
,
right
.xMax);
87
yMin
=
min
(
yMin
,
right
.yMin);
88
yMax
=
max
(
yMax
,
right
.yMax);
89
return
*
this
;
90
}
91
92
void
Frame::order() {
93
if
(
xMin
>
xMax
)
swap
(
xMin
,
xMax
);
94
if
(
yMin
>
yMax
)
swap
(
yMin
,
yMax
);
95
}
96
97
bool
Frame::operator==
(
const
Frame
&
right
)
const
{
98
return
((
xMin
==
right
.xMin) && (
xMax
==
right
.xMax) && (
yMin
==
right
.yMin) && (
yMax
==
right
.yMax));
99
}
100
101
void
Frame::cutMargin
(
const
double
marginX,
const
double
marginY) {
102
xMin
+= marginX;
103
yMin
+= marginY;
104
xMax
-= marginX;
105
yMax
-= marginY;
106
}
107
108
void
Frame::cutMargin
(
const
double
marginSize) {
cutMargin
(marginSize, marginSize); }
109
110
Frame
Frame::rescale
(
const
double
factor)
const
{
111
double
hxsize =
fabs
(factor * 0.5 * (
xMax
-
xMin
));
112
double
xcenter = 0.5 * (
xMax
+
xMin
);
113
double
hysize =
fabs
(factor * 0.5 * (
yMax
-
yMin
));
114
double
ycenter = 0.5 * (
yMax
+
yMin
);
115
return
Frame
(xcenter - hxsize, ycenter - hysize, xcenter + hxsize, ycenter + hysize);
116
}
117
118
double
Frame::getArea
()
const
{
return
fabs
((
xMax
-
xMin
) * (
yMax
-
yMin
)); }
119
120
bool
Frame::inFrame
(
double
x,
double
y)
const
{
121
return
((x <=
xMax
) && (y <=
yMax
) && (x >=
xMin
) && (y >=
yMin
));
122
}
123
124
void
Frame::print
(
ostream
&stream)
const
{
125
stream <<
"(xMin,yMin), (xMax,yMax): ("
<<
std::setprecision
(12) <<
xMin
<<
", "
<<
yMin
<<
"), ("
<<
xMax
126
<<
", "
<<
yMax
<<
")"
;
127
}
128
}
// namespace jointcal
129
}
// namespace lsst
Frame.h
std::ostream
lsst::jointcal::Frame::yMax
double yMax
Definition
Frame.h:41
lsst::jointcal::Frame::print
void print(std::ostream &out) const
Definition
Frame.cc:124
lsst::jointcal::Frame::cutMargin
void cutMargin(double marginSize)
shrinks the frame (if marginSize>0), enlarges it (if marginSize<0).
Definition
Frame.cc:108
lsst::jointcal::Frame::inFrame
bool inFrame(double x, double y) const
inside?
Definition
Frame.cc:120
lsst::jointcal::Frame::operator*
Frame operator*(const Frame &right) const
intersection of Frame's.
Definition
Frame.cc:54
lsst::jointcal::Frame::minDistToEdges
double minDistToEdges(const Point &point) const
distance to closest boundary.
Definition
Frame.cc:49
lsst::jointcal::Frame::xMin
double xMin
coordinate of boundary.
Definition
Frame.h:41
lsst::jointcal::Frame::Frame
Frame()
Default constructor.
Definition
Frame.cc:46
lsst::jointcal::Frame::operator==
bool operator==(const Frame &right) const
necessary for comparisons (!= is defined from this one implicitely)
Definition
Frame.cc:97
lsst::jointcal::Frame::rescale
Frame rescale(double factor) const
rescale it. The center does not move.
Definition
Frame.cc:110
lsst::jointcal::Frame::getArea
double getArea() const
Definition
Frame.cc:118
lsst::jointcal::Frame::operator*=
Frame & operator*=(const Frame &right)
intersection of Frame's
Definition
Frame.cc:60
lsst::jointcal::Frame::operator+=
Frame & operator+=(const Frame &right)
union of Frames
Definition
Frame.cc:80
lsst::jointcal::Frame::yMin
double yMin
Definition
Frame.h:41
lsst::jointcal::Frame::operator+
Frame operator+(const Frame &right) const
union of Frames
Definition
Frame.cc:74
lsst::jointcal::Frame::xMax
double xMax
Definition
Frame.h:41
lsst::jointcal::Point
A point in a plane.
Definition
Point.h:37
lsst::jointcal::Point::x
double x
coordinate
Definition
Point.h:42
lsst::jointcal::Point::y
double y
Definition
Point.h:42
std::fabs
T fabs(T... args)
std::right
T right(T... args)
std::max
T max(T... args)
std::min
T min(T... args)
lsst::jointcal
Definition
Associations.h:50
lsst
std::setprecision
T setprecision(T... args)
std::swap
T swap(T... args)
Generated on
for lsst.jointcal by
1.17.0