我想通过一个角度标准问题来围绕中心点旋转一个点。我见过很多关于这个职位,但我不能让我的执行工作:围绕另一点旋转一个点
void Point::Rotate(const Point Pivot, const float Angle)
{
if (Angle == 0)
return;
float s = sin(Angle);
float c = cos(Angle);
x -= Pivot.x;
y -= Pivot.y;
x = (x * c) - (y * s) + Pivot.x;
y = (x * s) + (y * c) + Pivot.y;
}
这是我的代码,我已经从众多的来源收集的逻辑,例如here和here 。
据我所知,它应该工作。然而,当我将它应用于旋转时,例如,在(0,0)周围将点(0,100)旋转90度(Pi/2被赋予该函数),旋转点显然在(-100,-100 ); 100px以下应该是。
当试图画一个圆(36分) - 它创建了一个模糊的心脏形状。它看起来像我看到的图形,我认为是在极坐标系中 - 我是否需要将我的观点转换为笛卡儿或其他?
任何人都可以找出什么毛病我的代码?
编辑:对不起,这个函数是一个成员函数的Point类 - x
和y
是成员变量:/
什么样的价值'x'在最后一行所使用的? – 2014-10-19 10:46:55
@OliverCharleswoth感谢您指出,编辑 – hnefatl 2014-10-19 10:49:04
我想你已经错过了我的观点!最后一行使用“x”值;该值在哪里计算? – 2014-10-19 10:49:52