some optimizations of Point rotation
This commit is contained in:
parent
9a83d4e8d5
commit
73cbb4b5dc
@ -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>
|
||||||
|
@ -72,8 +72,10 @@ Point::rotate(double angle, const Point ¢er)
|
|||||||
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 ¢er)
|
|||||||
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
|
||||||
|
Loading…
Reference in New Issue
Block a user