Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Разное

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Перемещение объекта из точки А в точку Б
 
 автор: trivium   (17.06.2012 в 18:17)   письмо автору
 
 

Доброго времени суток.
Есть точка А (x, y) и есть точка Б(x, y).
Как переместить объект из точки А в точку Б?
Для этого вроде как используются формулы с косинусами?

  Ответить  
 
 автор: Киналь   (17.06.2012 в 21:38)   письмо автору
 
   для: trivium   (17.06.2012 в 18:17)
 

Что значит «переместить»?

  Ответить  
 
 автор: Trivium   (17.06.2012 в 23:47)   письмо автору
 
   для: Киналь   (17.06.2012 в 21:38)
 

Ну т.е. двигаться в том направлении в цикле, пока не будет достигнута та точка.
Короче надо реализовать, что-то типа принципа движения шарика в арканоиде.

  Ответить  
 
 автор: Киналь   (18.06.2012 в 00:32)   письмо автору
 
   для: Trivium   (17.06.2012 в 23:47)
 

Точка A(x1, y1). Точка B(x2, y2). Текущие координаты объекта — (x1, y1), т.е. объект в точке A. Присваиваем:

Object.X = x2;
Object.Y = y2;

Условие выполнено, объект в точке B.

Если же вам нужно показать движение, то сначала определитесь с траекторией. По кратчайшей прямой? «Углом»? По лабиринту? По дуге?

  Ответить  
 
 автор: Trivium   (18.06.2012 в 00:47)   письмо автору
 
   для: Киналь   (18.06.2012 в 00:32)
 

Да, но так оно будет работать только если прямые углы и точки лежат на одной вертикальной/горизонтальной/диагональной прямой. А если точки лежат рядом почти но сдвинувшись на пару пикселей? Или наоборот далеко, но так же не на одной прямой.
Находил примеры вроде такого:

Vx = cos(angl*M_PI/180) * speed;
Vy = sin(angl*M_PI/180) * speed;

Но непонятно откуда берётся angl и как его вычислять...

  Ответить  
 
 автор: Sfinks   (18.06.2012 в 10:18)   письмо автору
 
   для: Trivium   (18.06.2012 в 00:47)
 

> Да, но так оно будет работать только если прямые углы и точки лежат на одной
> вертикальной/горизонтальной/диагональной прямой.


А есть еще варианты??? Можно узнать какие?
> Через любые 2 точки в пространстве можно провести одну и только одну прямую! (аксиома, на сколько я помню)
Если сузить пространство до плоскости (экран монитора), то это вообще "Геометрия. 5 класс".

Или у вас не евклидова геометрия и наблюдаются искривления пространства???

  Ответить  
 
 автор: Sfinks   (18.06.2012 в 10:25)   письмо автору
 
   для: 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.

  Ответить  
 
 автор: trivium   (18.06.2012 в 15:40)   письмо автору
 
   для: Sfinks   (18.06.2012 в 10:25)
 

speed это скорость движения

  Ответить  
 
 автор: Киналь   (18.06.2012 в 17:45)   письмо автору
 
   для: trivium   (18.06.2012 в 15:40)
 

Это не главный вопрос, на который от вас ждут ответа)

  Ответить  
 
 автор: Trivium   (18.06.2012 в 18:24)   письмо автору
 
   для: Киналь   (18.06.2012 в 17:45)
 

А какой главный-то?
Не пойму это, что сложно для тех кто шарит в базовой геометрии сделать принцип передвижения шарика как в Арканоиде?
Ну мне не для шарика, а вообще хотелось бы знать принципы эти.
Но самое простое это шарик запускается из одной точки и летит по направлению к другой точке.
Или просто линию нарисовать из одной точки в другую...

  Ответить  
 
 автор: Киналь   (19.06.2012 в 10:32)   письмо автору
 
   для: Trivium   (18.06.2012 в 18:24)
 

>А какой главный-то?
По какой траектории переместить? Просто переместить ли отрисовать процесс движения?

>Не пойму это, что сложно для тех кто шарит в базовой геометрии сделать принцип передвижения шарика как в Арканоиде?
Опишите словами, что это такое. Не могу говорить за всех, но для меня "как в Арканоиде" - пустой звук, я не понимаю, что это значит.

>Но самое простое это шарик запускается из одной точки и летит по направлению к другой точке.
>Или просто линию нарисовать из одной точки в другую...
Так как он всё-таки перемещается? Движется по прямой или летит по параболе?

  Ответить  
 
 автор: Trivium   (19.06.2012 в 17:19)   письмо автору
 
   для: Киналь   (19.06.2012 в 10:32)
 

Ну игра есть такая Арканоид.
Вот как она выглядит: http://www.youtube.com/watch?v=66JPDfM7V7I но только без стреляния огнём)
Шарик летит по разным траекториям, отбивается и от стен и кирпичей.
Как реализовать этот принцип движения?

  Ответить  
 
 автор: Киналь   (19.06.2012 в 20:31)   письмо автору
 
   для: Trivium   (19.06.2012 в 17:19)
 

Теперь понятно.
Изображение движения — это, по сути, набор отдельных кадров, каждый из которых изображает отдельное положение шарика. Задаёмся начальными координатами (x1,y1), а также скоростью шарика v и направлением движения (определяем его как угол Teta между, например, горизонтальной осью и вектором скорости). Кроме того, мы знаем частоту обновления кадра (FPS). Зная FPS и v, находим, на какое расстояние S сместится шарик между двумя кадрами. Зная S и Teta, нетрудно найти приращение прямоугольных координат dX и dY. Тогда в следующем кадре шарик будет в точке (x1+dX, y1+dY). Рисуем его там. После этого проверяем, не попали ли в стенку. Если попали, то меняем угол по закону отражения, иначе оставляем как было. Также рисуем следующий кадр, и так далее.

  Ответить  
 
 автор: Trivium   (20.06.2012 в 13:09)   письмо автору
 
   для: Киналь   (19.06.2012 в 20:31)
 

Так это простой вариант под углом 45 градусов.
Ладно, спасибо, я уже сделал по таким формулам:

x += speed*cos(angle*(3.141592/180));
y += speed*sin(angle*(3.141592/180));

  Ответить  
 
 автор: Киналь   (20.06.2012 в 13:16)   письмо автору
 
   для: Trivium   (20.06.2012 в 13:09)
 

>Так это простой вариант под углом 45 градусов.
С чего вы взяли?

>Ладно, спасибо, я уже сделал по таким формулам:
Чем это отличается от того, что написал я?

  Ответить  
 
 автор: Trivium   (20.06.2012 в 13:25)   письмо автору
 
   для: Киналь   (20.06.2012 в 13:16)
 

С того, что такой x1+dX, y1+dY способ будет работать именно так.
А отличается тем, что там нет формул косинусов, пи и т.д. без которых там не обойтись.

  Ответить  
 
 автор: Киналь   (20.06.2012 в 14:03)   письмо автору
 
   для: Trivium   (20.06.2012 в 13:25)
 

>С того, что такой x1+dX, y1+dY способ будет работать именно так.
dX != dY.

>А отличается тем, что там нет формул косинусов, пи и т.д. без которых там не обойтись.
Есть, только неявно; впрочем, раз вы свою задачу решили, то никаких проблем.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования