参考这个编程游戏 https://stackoverflow.com/questions/505040/developing-a-robocode-type-game-with-net-for-a-school-assignment我目前正在建设。
我正在使用 WPF 为画布制作动画,并且我正在使用BeginAnimation
方法将一个画布平移(移动)到另一个画布上。
对于 BeginAnimation,我需要指定From
and To
x 和 y 的坐标,这是我使用的方法,如下所示:
//X
Animator_Body_X.From = Translate_Body.X; //Current x-coordinate
Animator_Body_X.To = //The end X-coordinate
Translate_Body.BeginAnimation(TranslateTransform.XProperty, Animator_Body_X);
//Y
Animator_Body_Y.From = Translate_Body.Y; //Current y-coordinate
Animator_Body_Y.To = //The end Y-coordinate
Translate_Body.BeginAnimation(TranslateTransform.YProperty, Animator_Body_Y);
现在画布需要使用给定的角度进行平移,我可以从方法中获得该角度。
所以我的问题是,给定画布当前旋转的角度 (0-359)、起始 x 和 y 坐标(画布当前所在的位置)和距离(以 px 为单位),如何计算结束坐标?即画布最终将被翻译到的位置。
替代文本http://img244.imageshack.us/img244/4794/canvastranspositionmi5.jpg http://img244.imageshack.us/img244/4794/canvastranspositionmi5.jpg
在上图中,我画了一个我想要实现的目标的例子。
假设画布(实心边框框)的当前方向(角度)为 130 度,并且需要将其平移(沿着该角度的路径;即取决于它当前面向的位置)200 像素...什么将是画布的新坐标(它将停止动画:虚线边框框)?我如何计算它将停止的新坐标?
[更新]解决方案:
感谢双方的帮助Andy https://stackoverflow.com/questions/534424/math-in-wpf-getting-new-x-y-coordinates-after-a-translation/534475#534475 and Cameron https://stackoverflow.com/questions/534424/math-in-wpf-getting-new-x-y-coordinates-after-a-translation/534628#534628,它终于按预期工作了。
这是工作代码:
double headingRadians = Heading * (Math.PI / 180);
Animator_Body_X.From = Translate_Body.X;
Animator_Body_X.To = Math.Sin(headingRadians) * pix + Translate_Body.X;
Translate_Body.BeginAnimation(TranslateTransform.XProperty, Animator_Body_X);
Animator_Body_Y.From = Translate_Body.Y;
Animator_Body_Y.To = ((Math.Cos(headingRadians) * pix) * -1) + Translate_Body.Y;
Translate_Body.BeginAnimation(TranslateTransform.YProperty, Animator_Body_Y);