0
1

Здравствуйте! Собственно вопрос, Как узнать координаты через которые проходит вектор. Возникла потребность узнавать эти координаты.
Собственно даже картинку нарисовал что бы Вы поняли, что меня интересует =)

Ссылка на картинку с примерном

Как это правильно сделать?

Для чего мне это нужно: Я сейчас занимаюсь программированием игры, есть поле на котором игрок может передвигать фигуру в любую точку координат, но на передвижение требуется определенное время, Другой игрок должен видеть путь через какие координаты пройдет первый игрок. Для этого мне и нужно узнать координаты, чтобы показать их игроку №2, ну и наоборот, игроку №1 показать путь игрока №2

PS В математике очень слаб =(

задан 3 Июл '14 7:01

изменен 3 Июл '14 21:38

Deleted's gravatar image


126

Хотелось бы уточнить постановку задачи вот в каком смысле. Картинка многое проясняет, но не до конца. Центры красного и синего квадратиков соединены отрезком, который проходит через несколько промежуточных квадратиков. При этом некоторые из них выделяются зелёным цветом, но не все. Из рисунка видно, что если отрезок лишь слегка задевает квадратик, то в этом случае он не отмечается. Поэтому желательно было бы иметь строго формальный критерий, когда квадратик отмечается, а когда не отмечается. Я могу лишь предположительно судить об используемом правиле, поэтому его нужно уточнить.

(3 Июл '14 17:34) falcao

@falcao, думаю, постановка задачи такая: провести "путь из квадратиков" наименьшей возможной "длины". И эта задача принципиально решается неоднозначно.

Тут, может, вообще не имеет смысл говорить о векторах, а сразу решать дискретную задачу.

(3 Июл '14 18:01) cartesius

@cartesius: я думаю, что постановка задачи в любом случае нуждается в уточнении. Судя по всему, переходы от одного квадратика к другому по диагонали разрешены не всегда. Если это ограничение отменить, то путей кратчайшей длины становится много. Здесь же "промежуточный" путь всего один, и он подразумевается в качестве "наилучшего" геометрического приближения к прямолинейному пути. Поэтому какое-то правило всё равно нужно сформулировать. Возможно, что оно вытекает из соображений минимальности, о которых Вы говорите.

(3 Июл '14 18:11) falcao

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

(3 Июл '14 18:20) cartesius

@cartesius: по-моему, такое смещение как раз нежелательно, потому что по тому (второму) зелёному квадратику отрезок проходит "много", а если сместить вниз, то будет проходить "мало". То есть это будет неравноценный обмен. Мне кажется, какая-то формализация здесь всё равно нужна. Если её сделать, то дальше уже останется простая арифметика.

(3 Июл '14 18:27) falcao

@falcao, Конечно, зависит от задачи. И если там реально такие масштабы, то смещение нежелательно. Просто в играх обычно "пляшут" от пикселей, а в этом случае смещение будет практически незаметно.

(3 Июл '14 18:34) cartesius

@cartesius: я не знаю, какая именно "модель" здесь имелась в виду. В игре мог использоваться путь "пиксельного" типа, равно как и путь по клеткам какого-то специального игрового поля. Так или иначе, разумный способ задания клеток после Вашего замечания стал ясен. Вы в своём ответе его фактически и описали.

(3 Июл '14 21:23) falcao

@FreeZa, Если вы получили исчерпывающий ответ, отметьте его как принятый.

(3 Июл '14 21:39) Deleted
показано 5 из 8 показать еще 3
10|600 символов нужно символов осталось
2

Предлагаю такое решение. Пусть $%(x_1,y_1)$% и $%(x_2,y_2)$% - две точки. Во-первых, число зеленых квадратиков равно максимуму из $%|x_2 -x_1|-1$% и $%|y_2-y_1|-1$%. Выберем то направление, где это значение больше. В вашем примере это вдоль $%y$%.

Я буду считать наоборот, что направление вдоль - $%x$%. Пусть $%i$% - целочисленная координата между $%x_1$% и $%x_2$%. Тогда $%y$% будем находить так: $%y=y_1+i\cdot\frac{y_2-y_1}{x_2-x_1}$%. Это число не обязательно целое. За $%j$% обозначим округление $%y$% до ближайшего целого.

Точка $%(i,j)$% - искомая.

И так последовательно проходим от $%x_1$% до $%x_2$%.

В принципе этот алгоритм не гарантирует оптимальность, но более-менее должен решать Вашу задачу.

ссылка

отвечен 3 Июл '14 18:31

изменен 3 Июл '14 19:48

10|600 символов нужно символов осталось
-3

Если вы очень слабы в математике, но хотите быть программистом, и тем более программистом игр, то это очень-очень плохо и у вас скорей всего ничего не получится.

В кратце чтобы узнать через какие координаты проходит вектор, достаточно сделать единичный вектор и умножать на время пути. Т.е. что-то типо $$t \in [0; 1];$$

ссылка

отвечен 3 Июл '14 10:38

10|600 символов нужно символов осталось
Ваш ответ

Если вы не нашли ответ, задайте вопрос.

Здравствуйте

Математика - это совместно редактируемый форум вопросов и ответов для начинающих и опытных математиков, с особенным акцентом на компьютерные науки.

Присоединяйтесь!

отмечен:

×18

задан
3 Июл '14 7:01

показан
512 раз

обновлен
3 Июл '14 21:39

Отслеживать вопрос

по почте:

Зарегистрировавшись, вы сможете подписаться на любые обновления

по RSS:

Ответы

Ответы и Комментарии

Дизайн сайта/логотип © «Сеть Знаний». Контент распространяется под лицензией cc by-sa 3.0 с обязательным указанием авторства.
Рейтинг@Mail.ru