|
|
|
| Доброго времени суток.
Есть точка А (x, y) и есть точка Б(x, y).
Как переместить объект из точки А в точку Б?
Для этого вроде как используются формулы с косинусами? | |
|
|
|
|
|
|
|
для: trivium
(17.06.2012 в 18:17)
| | Что значит «переместить»? | |
|
|
|
|
|
|
|
для: Киналь
(17.06.2012 в 21:38)
| | Ну т.е. двигаться в том направлении в цикле, пока не будет достигнута та точка.
Короче надо реализовать, что-то типа принципа движения шарика в арканоиде. | |
|
|
|
|
|
|
|
для: Trivium
(17.06.2012 в 23:47)
| | Точка A(x1, y1). Точка B(x2, y2). Текущие координаты объекта — (x1, y1), т.е. объект в точке A. Присваиваем:
Object.X = x2;
Object.Y = y2;
Условие выполнено, объект в точке B.
Если же вам нужно показать движение, то сначала определитесь с траекторией. По кратчайшей прямой? «Углом»? По лабиринту? По дуге? | |
|
|
|
|
|
|
|
для: Киналь
(18.06.2012 в 00:32)
| | Да, но так оно будет работать только если прямые углы и точки лежат на одной вертикальной/горизонтальной/диагональной прямой. А если точки лежат рядом почти но сдвинувшись на пару пикселей? Или наоборот далеко, но так же не на одной прямой.
Находил примеры вроде такого:
Vx = cos(angl*M_PI/180) * speed;
Vy = sin(angl*M_PI/180) * speed;
|
Но непонятно откуда берётся angl и как его вычислять... | |
|
|
|
|
|
|
|
для: Trivium
(18.06.2012 в 00:47)
| | > Да, но так оно будет работать только если прямые углы и точки лежат на одной
> вертикальной/горизонтальной/диагональной прямой.
А есть еще варианты??? Можно узнать какие?
> Через любые 2 точки в пространстве можно провести одну и только одну прямую! (аксиома, на сколько я помню)
Если сузить пространство до плоскости (экран монитора), то это вообще "Геометрия. 5 класс".
Или у вас не евклидова геометрия и наблюдаются искривления пространства??? | |
|
|
|
|
|
|
|
для: Trivium
(18.06.2012 в 00:47)
| | >Находил примеры вроде такого:
Vx = cos(angl*M_PI/180) * speed;
Vy = sin(angl*M_PI/180) * speed;
| >Но непонятно откуда берётся angl и как его вычислять...
Это скорее похоже на траекторию полета снаряда под действием силы тяжести в проекции на вертикальную плоскость, а не движение из точки А в точку В.
Хотя не уверен.
[UPD] Вспомнил. Это формула круга! angl - это цикл от 0 до 360. speed будет радиусом круга. Тока не понятно почему speed. | |
|
|
|
|
|
|
|
для: Sfinks
(18.06.2012 в 10:25)
| | speed это скорость движения | |
|
|
|
|
|
|
|
для: trivium
(18.06.2012 в 15:40)
| | Это не главный вопрос, на который от вас ждут ответа) | |
|
|
|
|
|
|
|
для: Киналь
(18.06.2012 в 17:45)
| | А какой главный-то?
Не пойму это, что сложно для тех кто шарит в базовой геометрии сделать принцип передвижения шарика как в Арканоиде?
Ну мне не для шарика, а вообще хотелось бы знать принципы эти.
Но самое простое это шарик запускается из одной точки и летит по направлению к другой точке.
Или просто линию нарисовать из одной точки в другую... | |
|
|
|
|
|
|
|
для: Trivium
(18.06.2012 в 18:24)
| | >А какой главный-то?
По какой траектории переместить? Просто переместить ли отрисовать процесс движения?
>Не пойму это, что сложно для тех кто шарит в базовой геометрии сделать принцип передвижения шарика как в Арканоиде?
Опишите словами, что это такое. Не могу говорить за всех, но для меня "как в Арканоиде" - пустой звук, я не понимаю, что это значит.
>Но самое простое это шарик запускается из одной точки и летит по направлению к другой точке.
>Или просто линию нарисовать из одной точки в другую...
Так как он всё-таки перемещается? Движется по прямой или летит по параболе? | |
|
|
|
|
|
|
|
для: Киналь
(19.06.2012 в 10:32)
| | Ну игра есть такая Арканоид.
Вот как она выглядит: http://www.youtube.com/watch?v=66JPDfM7V7I но только без стреляния огнём)
Шарик летит по разным траекториям, отбивается и от стен и кирпичей.
Как реализовать этот принцип движения? | |
|
|
|
|
|
|
|
для: Trivium
(19.06.2012 в 17:19)
| | Теперь понятно.
Изображение движения — это, по сути, набор отдельных кадров, каждый из которых изображает отдельное положение шарика. Задаёмся начальными координатами (x1,y1), а также скоростью шарика v и направлением движения (определяем его как угол Teta между, например, горизонтальной осью и вектором скорости). Кроме того, мы знаем частоту обновления кадра (FPS). Зная FPS и v, находим, на какое расстояние S сместится шарик между двумя кадрами. Зная S и Teta, нетрудно найти приращение прямоугольных координат dX и dY. Тогда в следующем кадре шарик будет в точке (x1+dX, y1+dY). Рисуем его там. После этого проверяем, не попали ли в стенку. Если попали, то меняем угол по закону отражения, иначе оставляем как было. Также рисуем следующий кадр, и так далее. | |
|
|
|
|
|
|
|
для: Киналь
(19.06.2012 в 20:31)
| | Так это простой вариант под углом 45 градусов.
Ладно, спасибо, я уже сделал по таким формулам:
x += speed*cos(angle*(3.141592/180));
y += speed*sin(angle*(3.141592/180));
|
| |
|
|
|
|
|
|
|
для: Trivium
(20.06.2012 в 13:09)
| | >Так это простой вариант под углом 45 градусов.
С чего вы взяли?
>Ладно, спасибо, я уже сделал по таким формулам:
Чем это отличается от того, что написал я? | |
|
|
|
|
|
|
|
для: Киналь
(20.06.2012 в 13:16)
| | С того, что такой x1+dX, y1+dY способ будет работать именно так.
А отличается тем, что там нет формул косинусов, пи и т.д. без которых там не обойтись. | |
|
|
|
|
|
|
|
для: Trivium
(20.06.2012 в 13:25)
| | >С того, что такой x1+dX, y1+dY способ будет работать именно так.
dX != dY.
>А отличается тем, что там нет формул косинусов, пи и т.д. без которых там не обойтись.
Есть, только неявно; впрочем, раз вы свою задачу решили, то никаких проблем. | |
|
|
|