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;
Used to indicate that a value is not in the allowed range.
void getCenter(double &x, double &y) const
void setPoints(const vpImagePoint &topLeft, const vpImagePoint &topRight, const vpImagePoint &bottomLeft, const vpImagePoint &bottomRight)
vpRectOriented()
Default constructor.
vpImagePoint getBottomLeft() const
Get the bottom-left corner.
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 getHeight() const
Get the rectangle height.
double getWidth() const
Get the rectangle width.
double getOrientation() const
Get the rectangle orientation (rad).
vpImagePoint getTopRight() const
Get the top-right 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.
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 ...
Defines an oriented rectangle in the plane.
vpImagePoint getBottomRight() const
Get the bottom-right corner.
vpImagePoint getCenter() const
Get the rectangle center point.