some optimizations of Point rotation

This commit is contained in:
bubnikv 2016-09-12 13:52:31 +02:00
parent 9a83d4e8d5
commit 73cbb4b5dc
2 changed files with 9 additions and 5 deletions

View File

@ -94,7 +94,7 @@ inline bool operator!=(const BoundingBoxBase<VT> &bb1, const BoundingBoxBase<VT>
template<typename VT> template<typename VT>
inline bool empty(const BoundingBoxBase<VT> &bb) inline bool empty(const BoundingBoxBase<VT> &bb)
{ {
return bb.min.x > bb.max.y || bb.min.y > bb.max.y; return bb.min.x > bb.max.x || bb.min.y > bb.max.y;
} }
template<typename VT> template<typename VT>

View File

@ -72,8 +72,10 @@ Point::rotate(double angle, const Point &center)
double cur_y = (double)this->y; double cur_y = (double)this->y;
double s = sin(angle); double s = sin(angle);
double c = cos(angle); double c = cos(angle);
this->x = (coord_t)round( (double)center.x + c * (cur_x - (double)center.x) - s * (cur_y - (double)center.y) ); double dx = cur_x - (double)center.x;
this->y = (coord_t)round( (double)center.y + c * (cur_y - (double)center.y) + s * (cur_x - (double)center.x) ); double dy = cur_y - (double)center.y;
this->x = (coord_t)round( (double)center.x + c * dx - s * dy );
this->y = (coord_t)round( (double)center.y + c * dy + s * dx );
} }
bool bool
@ -386,8 +388,10 @@ Pointf::rotate(double angle, const Pointf &center)
double cur_y = this->y; double cur_y = this->y;
double s = sin(angle); double s = sin(angle);
double c = cos(angle); double c = cos(angle);
this->x = center.x + c * (cur_x - center.x) - s * (cur_y - center.y); double dx = cur_x - center.x;
this->y = center.y + c * (cur_y - center.y) + s * (cur_x - center.x); double dy = cur_y - center.y;
this->x = center.x + c * dx - s * dy;
this->y = center.y + c * dy + s * dx;
} }
Pointf Pointf