Применительно к этой программируемой игре Я сейчас строю.
Я использую WPF для анимации холстов и использую метод BeginAnimation
для перевода (перемещения) холста через другой холст.
В BeginAnimation мне нужно указать координаты From
и 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 (от того, где холст находится в данный момент) и расстояние (в пикселях), как мне это сделать? вычислить до конечных координат? то есть туда, куда холст будет окончательно переведен.
альтернативный текст http://img244.imageshack.us/img244/4794/canvastranspositionmi5.jpg
На изображении выше я нарисовал пример того, чего я хочу достичь.
Предположим, что холст (прямоугольник со сплошной рамкой) имеет текущий курс (угол), равный 130 градусам, и его необходимо перевести (следуя пути вниз по этому углу; т. Е. В зависимости от того, где он в данный момент обращен) на 200 пикселей. ... какие будут новые координаты (где он прекратит анимацию: рамка с пунктирной границей) холста? Как рассчитать эти новые координаты того, где он остановится?
[ОБНОВЛЕНИЕ] Решение:
Благодаря помощи обоих Энди и Камерона , он наконец-то работает как задумано.
А вот и рабочий код:
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);