33 #include <visp3/core/vpRectOriented.h>
40 : m_center(), m_width(), m_height(), m_theta(), m_topLeft(), m_topRight(), m_bottomLeft(), m_bottomRight()
55 m_topLeft.
set_i(m_center.
get_i() - ((m_height * cos(m_theta)) / 2.0) - ((m_width * sin(m_theta)) / 2.0));
56 m_topLeft.
set_j((m_center.
get_j() + ((m_height * sin(m_theta)) / 2.0)) - ((m_width * cos(m_theta)) / 2.0));
57 m_bottomLeft.
set_i((m_center.
get_i() + ((m_height * cos(m_theta)) / 2.0)) - ((m_width * sin(m_theta)) / 2.0));
58 m_bottomLeft.
set_j(m_center.
get_j() - ((m_height * sin(m_theta)) / 2.0) - ((m_width * cos(m_theta)) / 2.0));
59 m_bottomRight.
set_i(m_center.
get_i() + ((m_height * cos(m_theta)) / 2.0) + ((m_width * sin(m_theta)) / 2.0));
60 m_bottomRight.
set_j((m_center.
get_j() - ((m_height * sin(m_theta)) / 2.0)) + ((m_width * cos(m_theta)) / 2.0));
61 m_topRight.
set_i((m_center.
get_i() - ((m_height * cos(m_theta)) / 2.0)) + ((m_width * sin(m_theta)) / 2.0));
62 m_topRight.
set_j(m_center.
get_j() + ((m_height * sin(m_theta)) / 2.0) + ((m_width * cos(m_theta)) / 2.0));
74 m_topLeft.
set_i(m_center.
get_i() - (m_height / 2.0));
75 m_topLeft.
set_j(m_center.
get_j() - (m_width / 2.0));
76 m_bottomLeft.
set_i(m_center.
get_i() + (m_height / 2.0));
77 m_bottomLeft.
set_j(m_center.
get_j() - (m_width / 2.0));
78 m_bottomRight.
set_i(m_center.
get_i() + (m_height / 2.0));
79 m_bottomRight.
set_j(m_center.
get_j() + (m_width / 2.0));
80 m_topRight.
set_i(m_center.
get_i() - (m_height / 2.0));
81 m_topRight.
set_j(m_center.
get_j() + (m_width / 2.0));
84 #if (VISP_CXX_STANDARD == VISP_CXX_STANDARD_98)
116 m_topLeft.
set_i(m_center.
get_i() - (m_height / 2.0));
117 m_topLeft.
set_j(m_center.
get_j() - (m_width / 2.0));
118 m_bottomLeft.
set_i(m_center.
get_i() + (m_height / 2.0));
119 m_bottomLeft.
set_j(m_center.
get_j() - (m_width / 2.0));
120 m_bottomRight.
set_i(m_center.
get_i() + (m_height / 2.0));
121 m_bottomRight.
set_j(m_center.
get_j() + (m_width / 2.0));
122 m_topRight.
set_i(m_center.
get_i() - (m_height / 2.0));
123 m_topRight.
set_j(m_center.
get_j() + (m_width / 2.0));
127 #if (VISP_CXX_STANDARD >= VISP_CXX_STANDARD_11)
133 if (std::fabs(m_theta) > std::numeric_limits<double>::epsilon()) {
137 return vpRect(m_topLeft, m_bottomRight);
149 m_bottomLeft = bottomLeft;
150 m_bottomRight = bottomRight;
151 m_topRight = topRight;
154 m_width = sqrt(((m_topRight.
get_i() - m_topLeft.
get_i()) * (m_topRight.
get_i() - m_topLeft.
get_i())) +
156 m_height = sqrt(((m_bottomLeft.
get_i() - m_topLeft.
get_i()) * (m_bottomLeft.
get_i() - m_topLeft.
get_i())) +
158 m_theta = atan2(m_topRight.
get_i() - m_topLeft.
get_i(), m_topRight.
get_j() - m_topLeft.
get_j());
164 m_topLeft += center - m_center;
165 m_bottomLeft += center - m_center;
166 m_bottomRight += center - m_center;
167 m_topRight += center - m_center;
191 m_topLeft.
set_i(m_center.
get_i() - ((m_height * cos(m_theta)) / 2.0) - ((m_width * sin(m_theta)) / 2));
192 m_topLeft.
set_j((m_center.
get_j() + ((m_height * sin(m_theta)) / 2.0)) - ((m_width * cos(m_theta)) / 2));
193 m_bottomLeft.
set_i((m_center.
get_i() + ((m_height * cos(m_theta)) / 2.0)) - ((m_width * sin(m_theta)) / 2));
194 m_bottomLeft.
set_j(m_center.
get_j() - ((m_height * sin(m_theta)) / 2.0) - ((m_width * cos(m_theta)) / 2));
195 m_bottomRight.
set_i(m_center.
get_i() + ((m_height * cos(m_theta)) / 2.0) + ((m_width * sin(m_theta)) / 2));
196 m_bottomRight.
set_j((m_center.
get_j() - ((m_height * sin(m_theta)) / 2.0)) + ((m_width * cos(m_theta)) / 2));
197 m_topRight.
set_i((m_center.
get_i() - ((m_height * cos(m_theta)) / 2.0)) + ((m_width * sin(m_theta)) / 2));
198 m_topRight.
set_j(m_center.
get_j() + ((m_height * sin(m_theta)) / 2.0) + ((m_width * cos(m_theta)) / 2));
211 m_topLeft.
set_i(m_center.
get_i() - ((m_height * cos(m_theta)) / 2.0) - ((m_width * sin(m_theta)) / 2));
212 m_topLeft.
set_j((m_center.
get_j() + ((m_height * sin(m_theta)) / 2.0)) - ((m_width * cos(m_theta)) / 2));
213 m_bottomLeft.
set_i((m_center.
get_i() + ((m_height * cos(m_theta)) / 2.0)) - ((m_width * sin(m_theta)) / 2));
214 m_bottomLeft.
set_j(m_center.
get_j() - ((m_height * sin(m_theta)) / 2.0) - ((m_width * cos(m_theta)) / 2));
215 m_bottomRight.
set_i(m_center.
get_i() + ((m_height * cos(m_theta)) / 2.0) + ((m_width * sin(m_theta)) / 2));
216 m_bottomRight.
set_j((m_center.
get_j() - ((m_height * sin(m_theta)) / 2.0)) + ((m_width * cos(m_theta)) / 2));
217 m_topRight.
set_i((m_center.
get_i() - ((m_height * cos(m_theta)) / 2.0)) + ((m_width * sin(m_theta)) / 2));
218 m_topRight.
set_j(m_center.
get_j() + ((m_height * sin(m_theta)) / 2.0) + ((m_width * cos(m_theta)) / 2));
227 if (!isLeft(point, m_topLeft, m_bottomLeft)) {
230 if (!isLeft(point, m_bottomLeft, m_bottomRight)) {
233 if (!isLeft(point, m_bottomRight, m_topRight)) {
236 if (!isLeft(point, m_topRight, m_topLeft)) {
247 double c = -((a * point1.
get_i()) + (b * point1.
get_j()));
248 double d = (a * pointToTest.
get_i()) + (b * pointToTest.
get_j()) + c;
error that can be emitted 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.
vpRectOriented()
Default constructor.
double getWidth() const
Get the rectangle width.
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 getTopRight() const
Get the top-right corner.
vpRectOriented & operator=(const vpRectOriented &)=default
vpImagePoint getTopLeft() const
Get the top-left corner.
vpImagePoint getCenter() const
Get the rectangle center point.
void setOrientation(double theta)
Set the rectangle orientation (rad).
Defines a rectangle in the plane.
void getCenter(double &x, double &y) const