LSSTApplications  21.0.0+1b62c9342b,21.0.0+4a36882ba2,21.0.0-1-ga51b5d4+2c88556dba,21.0.0-17-gf9a0284+69dd6c2060,21.0.0-2-g103fe59+d751821c91,21.0.0-2-g1367e85+ad4ce71c09,21.0.0-2-g2909d54+4a36882ba2,21.0.0-2-g45278ab+1b62c9342b,21.0.0-2-g4bc9b9f+56aff0fea6,21.0.0-2-g5242d73+ad4ce71c09,21.0.0-2-g54e2caa+120cd827f5,21.0.0-2-g66bcc37+905c13b855,21.0.0-2-g7f82c8f+ae0b31d2cf,21.0.0-2-g8dde007+5461f6ec49,21.0.0-2-g8f08a60+05ed0ab9e4,21.0.0-2-g973f35b+b1744c1cf5,21.0.0-2-ga326454+ae0b31d2cf,21.0.0-2-ga63a54e+8eea6ad1d1,21.0.0-2-ga885a99+4aa8b35973,21.0.0-2-gc738bc1+96c5b647eb,21.0.0-2-gde069b7+d0bdec52a8,21.0.0-2-ge17e5af+ad4ce71c09,21.0.0-2-ge712728+f9003e3bc5,21.0.0-2-gecfae73+e945072e23,21.0.0-2-gfc62afb+ad4ce71c09,21.0.0-20-g55224fe4+1b10d9d6c3,21.0.0-3-g4c5b185+b08abf4bf6,21.0.0-3-g5051ac2+1b62c9342b,21.0.0-3-g6d51c4a+905c13b855,21.0.0-3-gaa929c8+2605bebd58,21.0.0-3-gd222c45+21ef063859,21.0.0-3-gd5de2f2+905c13b855,21.0.0-4-g8a80011+75be782dbc,21.0.0-5-gb7080ec+ae7922c7fe,21.0.0-5-gcff38f6+c276328c15,21.0.0-6-gd3283ba+2605bebd58,21.0.0-8-g19111d86+0648bf24f8,21.0.0-8-gd9c33f4a0+ec3713772a,w.2021.02
LSSTDataManagementBasePackage
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 " << xMin << ' ' << yMin << " xmax ymax " << xMax << ' ' << yMax << endl;
126 }
127 } // namespace jointcal
128 } // namespace lsst
y
int y
Definition: SpanSet.cc:49
lsst::jointcal::Frame::operator+
Frame operator+(const Frame &right) const
union of Frames
Definition: Frame.cc:74
std::fabs
T fabs(T... args)
xmax
int xmax
Definition: SpanSet.cc:49
lsst::jointcal::Frame::rescale
Frame rescale(const double factor) const
rescale it. The center does not move.
Definition: Frame.cc:110
lsst::jointcal::Frame::print
void print(std::ostream &out) const
Definition: Frame.cc:124
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::xMin
double xMin
coordinate of boundary.
Definition: Frame.h:41
lsst::jointcal::Point::y
double y
Definition: Point.h:41
lsst::jointcal::Frame::cutMargin
void cutMargin(const double marginSize)
shrinks the frame (if marginSize>0), enlarges it (if marginSize<0).
Definition: Frame.cc:108
std::ostream
STL class.
x
double x
Definition: ChebyshevBoundedField.cc:277
max
int max
Definition: BoundedField.cc:104
lsst::jointcal
Definition: Associations.h:49
result
py::object result
Definition: _schema.cc:429
lsst::jointcal::Frame::operator*
Frame operator*(const Frame &right) const
intersection of Frame's.
Definition: Frame.cc:54
lsst
A base class for image defects.
Definition: imageAlgorithm.dox:1
lsst::jointcal::Frame::minDistToEdges
double minDistToEdges(const Point &point) const
distance to closest boundary.
Definition: Frame.cc:49
xmin
int xmin
Definition: SpanSet.cc:49
lsst::jointcal::Frame::Frame
Frame()
Default constructor.
Definition: Frame.cc:46
lsst::jointcal::Frame::inFrame
bool inFrame(double x, double y) const
inside?
Definition: Frame.cc:120
std::endl
T endl(T... args)
std::right
T right(T... args)
lsst::jointcal::Frame::getArea
double getArea() const
Definition: Frame.cc:118
min
int min
Definition: BoundedField.cc:103
std
STL namespace.
lsst::afw::cameraGeom::swap
void swap(CameraSys &a, CameraSys &b)
Definition: CameraSys.h:157
lsst::jointcal::Point
A point in a plane.
Definition: Point.h:36
lsst::jointcal::Point::x
double x
coordinate
Definition: Point.h:41
Frame.h
lsst::jointcal::Frame
rectangle with sides parallel to axes.
Definition: Frame.h:38
lsst::jointcal::Frame::operator==
bool operator==(const Frame &right) const
necessary for comparisons (!= is defined from this one implicitely)
Definition: Frame.cc:97