Что касается этой игры по программированию Я сейчас занимаюсь строительством.
Я использую 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);