这是公式,但我不知道如何实现它。有人可以帮忙吗
rectangle::rectangle() //rectangle constructor
{
bl.real() = 0; //bottom
bl.imag() = 0; //left
tr.real() = 1; //top
tr.imag() = 1; //right
}
complex<double> rectangle::get_bl() const
{
return bl;
}
complex<double> rectangle::get_tr() const
{
return tr;
}
void rectangle::rotate(double angle)
{
//not sure how to do it tr = tr.real() * cos(angle) + tr.imag() *cos(angle);
}
主
rectangle r;
r.rotate(90);
预期产出(不是100%肯定)
0 0 -1 1
答案 0 :(得分:2)
(0, 0)
(公式假设您正在围绕原点旋转,因此将左下角移动到(0, 0)
)。if (tr.real() < bl.real()) {
float tempX = tr.real() - bl.real();
float tempY = tr.imag() - bl.imag();
} else {
float tempX = bl.real() - tr.real();
float tempY = bl.imag() - tr.imag();
}
tr.real() = tempX * cos(theta) - tempY * sin(theta)
tr.imag() = tempx * sin(theta) + tempY * cos(theta)
答案 1 :(得分:0)
该公式基本上是这样说:
new_x = shape.point[i].x*cos(angle) - shape.point[i].y*sin(angle)
new_y = shape.point[i].x*sin(angle) + shape.point[i].y*cos(angle)
shape.point[i].x = new_x
shape.point[i].y = new_y
角度是弧度,从度数转换为弧度使用
degree*pi/180
其中pi
是常量3.14...
您需要对形状上的每个点执行此操作,以使形状完全旋转所需的度数。
此公式还假设点以(0,0)为中心,即形状的中心为(0,0),所有点都相对于该中心。
如果适用,请尝试将形状存储为点,从0th
点顺时针方向移动。例如,这个矩形将是:
point[0] = {-1, 1}
point[1] = { 1, 1}
point[2] = { 1,-1}
point[3] = {-1,-1}
要从tl, br
转换为points
,您需要执行以下操作:
point[0] = {tl.x, tl.y}
point[1] = {br.x, tl.y}
point[2] = {br.x, br.y}
point[3] = {tl.x, br.y}