我有3个粒子,其中一个是中心粒子。我想通过公式q'=Θq+ p旋转其他两个粒子(存储在粒子列表中),其中q'是旋转粒子的新位置,θ是方向角,p是中心粒子。其他两个粒子的初始位置存储在initialParticlePosition列表中。问题是我认为我计算的角度是错误的,因为范围。我应该把范围作为[-pi,pi)或类似的东西。在某些部分它计算正确,但有时它是错误的。有人可以帮助我使用这个代码或给我另一种旋转方法。c#旋转问题
{
angle = Math.Acos(Vector2.Dot(heading,new Vector2(0,-1)));
for (int i = 0; i < 2; i++)
{
tempX = (double)initialParticlePositions[i].X * Math.Cos(angle) - (double)initialParticlePositions[i].Y * Math.Sin(angle) + centerParticle.position.x;
tempY = (double)initialParticlePositions[i].X * Math.Sin(angle) + (double)initialParticlePositions[i].Y * Math.Cos(angle) + centerParticle.position.y;
particles[i].position.x = tempX;
particles[i].position.y = tempY;
}
}
用已知的角度值运行代码并在纸上绘制输出**。手动验证输出。 `cos`和`sin`应该处理[`-pi,pi]`之外的角度(自从我做这种事情已经有一段时间了)。 – ChrisF 2011-01-11 20:06:09