39 #include <visp3/core/vpRectOriented.h> 45 : m_center(), m_width(), m_height(), m_theta(), m_topLeft(), m_topRight(), m_bottomLeft(), m_bottomRight()
61 m_topLeft.
set_i(m_center.
get_i() - m_height * cos(m_theta) / 2.0 - m_width * sin(m_theta) / 2.0);
62 m_topLeft.
set_j(m_center.
get_j() + m_height * sin(m_theta) / 2.0 - m_width * cos(m_theta) / 2.0);
63 m_bottomLeft.
set_i(m_center.
get_i() + m_height * cos(m_theta) / 2.0 - m_width * sin(m_theta) / 2.0);
64 m_bottomLeft.
set_j(m_center.
get_j() - m_height * sin(m_theta) / 2.0 - m_width * cos(m_theta) / 2.0);
65 m_bottomRight.
set_i(m_center.
get_i() + m_height * cos(m_theta) / 2.0 + m_width * sin(m_theta) / 2.0);
66 m_bottomRight.
set_j(m_center.
get_j() - m_height * sin(m_theta) / 2.0 + m_width * cos(m_theta) / 2.0);
67 m_topRight.
set_i(m_center.
get_i() - m_height * cos(m_theta) / 2.0 + m_width * sin(m_theta) / 2.0);
68 m_topRight.
set_j(m_center.
get_j() + m_height * sin(m_theta) / 2.0 + m_width * cos(m_theta) / 2.0);
80 m_topLeft.
set_i(m_center.
get_i() - m_height / 2.0);
81 m_topLeft.
set_j(m_center.
get_j() - m_width / 2.0);
82 m_bottomLeft.
set_i(m_center.
get_i() + m_height / 2.0);
83 m_bottomLeft.
set_j(m_center.
get_j() - m_width / 2.0);
84 m_bottomRight.
set_i(m_center.
get_i() + m_height / 2.0);
85 m_bottomRight.
set_j(m_center.
get_j() + m_width / 2.0);
86 m_topRight.
set_i(m_center.
get_i() - m_height / 2.0);
87 m_topRight.
set_j(m_center.
get_j() + m_width / 2.0);
90 #if (VISP_CXX_STANDARD < VISP_CXX_STANDARD_11) 117 m_topLeft.
set_i(m_center.
get_i() - m_height / 2.0);
118 m_topLeft.
set_j(m_center.
get_j() - m_width / 2.0);
119 m_bottomLeft.
set_i(m_center.
get_i() + m_height / 2.0);
120 m_bottomLeft.
set_j(m_center.
get_j() - m_width / 2.0);
121 m_bottomRight.
set_i(m_center.
get_i() + m_height / 2.0);
122 m_bottomRight.
set_j(m_center.
get_j() + m_width / 2.0);
123 m_topRight.
set_i(m_center.
get_i() - m_height / 2.0);
124 m_topRight.
set_j(m_center.
get_j() + m_width / 2.0);
132 if (std::fabs(m_theta) > std::numeric_limits<double>::epsilon())
135 return vpRect(m_topLeft, m_bottomRight);
146 m_bottomLeft = bottomLeft;
147 m_bottomRight = bottomRight;
148 m_topRight = topRight;
151 m_width = sqrt((m_topRight.
get_i() - m_topLeft.
get_i()) * (m_topRight.
get_i() - m_topLeft.
get_i()) +
153 m_height = sqrt((m_bottomLeft.
get_i() - m_topLeft.
get_i()) * (m_bottomLeft.
get_i() - m_topLeft.
get_i()) +
155 m_theta = atan2(m_topRight.
get_i() - m_topLeft.
get_i(), m_topRight.
get_j() - m_topLeft.
get_j());
161 m_topLeft += center - m_center;
162 m_bottomLeft += center - m_center;
163 m_bottomRight += center - m_center;
164 m_topRight += center - m_center;
188 m_topLeft.
set_i(m_center.
get_i() - m_height * cos(m_theta) / 2.0 - m_width * sin(m_theta) / 2);
189 m_topLeft.
set_j(m_center.
get_j() + m_height * sin(m_theta) / 2.0 - m_width * cos(m_theta) / 2);
190 m_bottomLeft.
set_i(m_center.
get_i() + m_height * cos(m_theta) / 2.0 - m_width * sin(m_theta) / 2);
191 m_bottomLeft.
set_j(m_center.
get_j() - m_height * sin(m_theta) / 2.0 - m_width * cos(m_theta) / 2);
192 m_bottomRight.
set_i(m_center.
get_i() + m_height * cos(m_theta) / 2.0 + m_width * sin(m_theta) / 2);
193 m_bottomRight.
set_j(m_center.
get_j() - m_height * sin(m_theta) / 2.0 + m_width * cos(m_theta) / 2);
194 m_topRight.
set_i(m_center.
get_i() - m_height * cos(m_theta) / 2.0 + m_width * sin(m_theta) / 2);
195 m_topRight.
set_j(m_center.
get_j() + m_height * sin(m_theta) / 2.0 + m_width * cos(m_theta) / 2);
208 m_topLeft.
set_i(m_center.
get_i() - m_height * cos(m_theta) / 2.0 - m_width * sin(m_theta) / 2);
209 m_topLeft.
set_j(m_center.
get_j() + m_height * sin(m_theta) / 2.0 - m_width * cos(m_theta) / 2);
210 m_bottomLeft.
set_i(m_center.
get_i() + m_height * cos(m_theta) / 2.0 - m_width * sin(m_theta) / 2);
211 m_bottomLeft.
set_j(m_center.
get_j() - m_height * sin(m_theta) / 2.0 - m_width * cos(m_theta) / 2);
212 m_bottomRight.
set_i(m_center.
get_i() + m_height * cos(m_theta) / 2.0 + m_width * sin(m_theta) / 2);
213 m_bottomRight.
set_j(m_center.
get_j() - m_height * sin(m_theta) / 2.0 + m_width * cos(m_theta) / 2);
214 m_topRight.
set_i(m_center.
get_i() - m_height * cos(m_theta) / 2.0 + m_width * sin(m_theta) / 2);
215 m_topRight.
set_j(m_center.
get_j() + m_height * sin(m_theta) / 2.0 + m_width * cos(m_theta) / 2);
224 if (!isLeft(point, m_topLeft, m_bottomLeft))
226 if (!isLeft(point, m_bottomLeft, m_bottomRight))
228 if (!isLeft(point, m_bottomRight, m_topRight))
230 if (!isLeft(point, m_topRight, m_topLeft))
240 double c = -(a * point1.
get_i() + b * point1.
get_j());
241 double d = a * pointToTest.
get_i() + b * pointToTest.
get_j() + c;
vpImagePoint getTopRight() const
Get the top-right corner.
Used to indicate that a value is not in the allowed range.
vpImagePoint getBottomRight() const
Get the bottom-right corner.
void setPoints(const vpImagePoint &topLeft, const vpImagePoint &topRight, const vpImagePoint &bottomLeft, const vpImagePoint &bottomRight)
double getOrientation() const
Get the rectangle orientation (rad).
vpRectOriented()
Default constructor.
void getCenter(double &x, double &y) const
error that can be emited by ViSP classes.
vpRectOriented & operator=(const vpRectOriented &rect)=default
void setCenter(const vpImagePoint ¢er)
Set the center of the rectangle.
double getWidth() const
Get the rectangle width.
vpImagePoint getBottomLeft() const
Get the bottom-left corner.
bool isInside(const vpImagePoint &point) const
Check whether the point is inside the rectangle.
void setSize(double width, double height)
Set the size of the rectangle : performs a homothety relatively to the rectangle center.
vpImagePoint getTopLeft() const
Get the top-left corner.
double getHeight() const
Get the rectangle height.
void setOrientation(double theta)
Set the rectangle orientation (rad).
Defines a rectangle in the plane.
Class that defines a 2D point in an image. This class is useful for image processing and stores only ...
vpImagePoint getCenter() const
Get the rectangle center point.
Defines an oriented rectangle in the plane.