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)
122 m_topLeft.
set_i(m_center.
get_i() - m_height / 2.0);
123 m_topLeft.
set_j(m_center.
get_j() - m_width / 2.0);
124 m_bottomLeft.
set_i(m_center.
get_i() + m_height / 2.0);
125 m_bottomLeft.
set_j(m_center.
get_j() - m_width / 2.0);
126 m_bottomRight.
set_i(m_center.
get_i() + m_height / 2.0);
127 m_bottomRight.
set_j(m_center.
get_j() + m_width / 2.0);
128 m_topRight.
set_i(m_center.
get_i() - m_height / 2.0);
129 m_topRight.
set_j(m_center.
get_j() + m_width / 2.0);
137 if (std::fabs(m_theta) > std::numeric_limits<double>::epsilon())
140 return vpRect(m_topLeft, m_bottomRight);
151 m_bottomLeft = bottomLeft;
152 m_bottomRight = bottomRight;
153 m_topRight = topRight;
156 m_width = sqrt((m_topRight.
get_i() - m_topLeft.
get_i()) * (m_topRight.
get_i() - m_topLeft.
get_i()) +
158 m_height = sqrt((m_bottomLeft.
get_i() - m_topLeft.
get_i()) * (m_bottomLeft.
get_i() - m_topLeft.
get_i()) +
160 m_theta = atan2(m_topRight.
get_i() - m_topLeft.
get_i(), m_topRight.
get_j() - m_topLeft.
get_j());
166 m_topLeft += center - m_center;
167 m_bottomLeft += center - m_center;
168 m_bottomRight += center - m_center;
169 m_topRight += center - m_center;
193 m_topLeft.
set_i(m_center.
get_i() - m_height * cos(m_theta) / 2.0 - m_width * sin(m_theta) / 2);
194 m_topLeft.
set_j(m_center.
get_j() + m_height * sin(m_theta) / 2.0 - m_width * cos(m_theta) / 2);
195 m_bottomLeft.
set_i(m_center.
get_i() + m_height * cos(m_theta) / 2.0 - m_width * sin(m_theta) / 2);
196 m_bottomLeft.
set_j(m_center.
get_j() - m_height * sin(m_theta) / 2.0 - m_width * cos(m_theta) / 2);
197 m_bottomRight.
set_i(m_center.
get_i() + m_height * cos(m_theta) / 2.0 + m_width * sin(m_theta) / 2);
198 m_bottomRight.
set_j(m_center.
get_j() - m_height * sin(m_theta) / 2.0 + m_width * cos(m_theta) / 2);
199 m_topRight.
set_i(m_center.
get_i() - m_height * cos(m_theta) / 2.0 + m_width * sin(m_theta) / 2);
200 m_topRight.
set_j(m_center.
get_j() + m_height * sin(m_theta) / 2.0 + m_width * cos(m_theta) / 2);
213 m_topLeft.
set_i(m_center.
get_i() - m_height * cos(m_theta) / 2.0 - m_width * sin(m_theta) / 2);
214 m_topLeft.
set_j(m_center.
get_j() + m_height * sin(m_theta) / 2.0 - m_width * cos(m_theta) / 2);
215 m_bottomLeft.
set_i(m_center.
get_i() + m_height * cos(m_theta) / 2.0 - m_width * sin(m_theta) / 2);
216 m_bottomLeft.
set_j(m_center.
get_j() - m_height * sin(m_theta) / 2.0 - m_width * cos(m_theta) / 2);
217 m_bottomRight.
set_i(m_center.
get_i() + m_height * cos(m_theta) / 2.0 + m_width * sin(m_theta) / 2);
218 m_bottomRight.
set_j(m_center.
get_j() - m_height * sin(m_theta) / 2.0 + m_width * cos(m_theta) / 2);
219 m_topRight.
set_i(m_center.
get_i() - m_height * cos(m_theta) / 2.0 + m_width * sin(m_theta) / 2);
220 m_topRight.
set_j(m_center.
get_j() + m_height * sin(m_theta) / 2.0 + m_width * cos(m_theta) / 2);
229 if (!isLeft(point, m_topLeft, m_bottomLeft))
231 if (!isLeft(point, m_bottomLeft, m_bottomRight))
233 if (!isLeft(point, m_bottomRight, m_topRight))
235 if (!isLeft(point, m_topRight, m_topLeft))
245 double c = -(a * point1.
get_i() + b * point1.
get_j());
246 double d = a * pointToTest.
get_i() + b * pointToTest.
get_j() + c;
error that can be emited by ViSP classes.
@ badValue
Used to indicate that a value is not in the allowed range.
Class that defines a 2D point in an image. This class is useful for image processing and stores only ...
Defines an oriented rectangle in the plane.
double getHeight() const
Get the rectangle height.
vpImagePoint getBottomLeft() const
Get the bottom-left corner.
double getOrientation() const
Get the rectangle orientation (rad).
vpImagePoint getBottomRight() const
Get the bottom-right corner.
void setPoints(const vpImagePoint &topLeft, const vpImagePoint &topRight, const vpImagePoint &bottomLeft, const vpImagePoint &bottomRight)
void setCenter(const vpImagePoint ¢er)
Set the center of the rectangle.
double getWidth() const
Get the rectangle width.
bool isInside(const vpImagePoint &point) const
Check whether the point is inside the rectangle.
vpRectOriented()
Default constructor.
void setSize(double width, double height)
Set the size of the rectangle : performs a homothety relatively to the rectangle center.
vpImagePoint getTopRight() const
Get the top-right corner.
vpImagePoint getTopLeft() const
Get the top-left corner.
vpImagePoint getCenter() const
Get the rectangle center point.
vpRectOriented & operator=(const vpRectOriented &rect)=default
void setOrientation(double theta)
Set the rectangle orientation (rad).
Defines a rectangle in the plane.
void getCenter(double &x, double &y) const