|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
10.03.2018, 08:46 | #1 |
Спокойный псих
Участник клуба
Регистрация: 19.03.2013
Сообщений: 1,538
|
Движение объекта по прямой траектории
Ещё раз здравствуйте.
Сегодня я задался целью, научить картинку перемещаться, и мне нужно перемещение по прямой. У меня есть две координаты - начало и конец движения. Нужно построить траекторию, и двигаться по ней с определённой скоростью (скорость будет постоянной, и регулироваться на глаз). Первое, что мне пришло в голову - построение массива координат с помощью волнового алгоритма, но у меня может быть несколько десятков объектов, и мне кажется, что такое решение будет весьма увесистым, а потому - малоэффективным. Я тут нагуглил, существует некое уравнение прямой, и вспомнил, что где то и когда то я уже решал такую задачу, только вот где и когда - не помню. Вполне возможно, что даже на этом форуме я задавал вопрос по этой теме, но поиск ничего полезного мне не показал. Что можете подсказать по теме ?
Подпись ? Не, не слышал ...
|
10.03.2018, 09:58 | #2 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
10.03.2018, 11:21 | #3 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,342
|
Я вам больше скажу - можно нагуглить само уравнение прямой!
И в чем проблема? Движение по прямой на плоскости можно разложить на движение по оси Х и движении по оси У. Нарисуйте прямоугольный треугольник и представьте себе, что вам надо двигаться по гипотенузе. |
10.03.2018, 11:30 | #4 |
Александр
Администратор
Регистрация: 28.10.2006
Сообщений: 17,597
|
А сделать таймер и перемещать X+1 по таймеру по условию if X<B
Скорость движения устанавливается интервалом таймера. |
10.03.2018, 15:09 | #5 |
Участник клуба
Регистрация: 17.05.2011
Сообщений: 1,660
|
Как частный случай, если движение вдоль системы координат, то можно прибавлять 1.
Но на практике угол движения может быть различным, и поэтому к начальным координатам Х0 и У0 надо прибавлять различные значения, в зависимости от угла движения. Вначале по известной формуле рассчитывается расстояние между координатами, где Xo и Yo начало, а X и Y конец отрезка Dal = Sqr((Xo - X) ^ 2 + (Yo - Y) ^ 2) ; в VB Sqr это квадратный корень! затем рассчитываются приращения к координатам Xd = (X - Xo) / (Dal / Hag) Yd = (Y - Yo) / (Dal / Hag) где Hag это расстояние в пикселях, которое пройдет тело за одно срабатывание таймера. Отвечает за плавность движения. Пока X1 и Y1 не равны X и Y выполнять в таймере: X1 = Xo + Xd: Y1 = Yo + Yd: Print Тело (X1, Y1) ; Рисуем тело с новыми кординатами Xo = X1: Yo = Y1 Вот и всё. |
10.03.2018, 15:32 | #6 |
Старожил
Регистрация: 02.01.2011
Сообщений: 3,327
|
Я правильно понимаю, что можно представить себе клетки (матрица, как тетрадный лист в клетку), где в некоторых клетках находятся объекты - несколько десятков на всём поле. У каждого объекта есть целевая клетка, куда он должен придти. Объекты могут двигаться только по прямой, то есть по диагонали нельзя перебраться из клетки в клетку. Объекты не могут оказаться в одной клетке одновременно.
Последний раз редактировалось 8Observer8; 10.03.2018 в 15:34. |
10.03.2018, 18:59 | #7 | ||
Спокойный псих
Участник клуба
Регистрация: 19.03.2013
Сообщений: 1,538
|
y=kx+b. Вид этого уравнения слишком сырой для применения при решении моей задачи. У меня же две пары чисел (x0;y0, x;y), и что бы в цикле получать dx;dy - что куда пихать по этому уравнению я не обнаружил.
Цитата:
Цитата:
Вообще, это не принципиально, но характер движения различных объектов, да и компоненты интерфейса, подразумевают случайные пересечения объектов; - статичные (вращающиеся) объекты; - объекты двигающиеся по случайной (прямой) траектории; - объекты, которые должны двигаться от статичных к движущимся - опять же, по прямой, по гусям с упреждениями целиться не собираюсь. kvitaliy, весы у вас почему то просят оставить отзыв кому то ещё. Так что от меня простое человеческое словесное спасибо.
Подпись ? Не, не слышал ...
|
||
10.03.2018, 21:57 | #8 | |
Старожил
Регистрация: 20.04.2008
Сообщений: 5,528
|
Цитата:
Код:
Код:
программа — запись алгоритма на языке понятном транслятору
Последний раз редактировалось evg_m; 10.03.2018 в 22:03. |
|
11.03.2018, 02:19 | #9 |
Программист
Участник клуба
Регистрация: 23.06.2009
Сообщений: 1,772
|
На самом деле не всё так радужно. Если шагов много, а линия под нехорошим наклоном, то предварительное вычисление приращений может увести довольно далеко.
Может, имеет смысл посмотреть в сторону алгоритма Брезенхема? |
11.03.2018, 02:45 | #10 | |
Спокойный псих
Участник клуба
Регистрация: 19.03.2013
Сообщений: 1,538
|
Black Fregat, о, новое слово ... =)
Цитата:
Если сейчас сравнивать, что я могу лучше реализовать, новый для меня алгоритм Брезенхема, или знакомый волновой алгоритм - то у меня лучше получится второе; в таком случае у меня сразу же будет готовый массив точек, по которому нужно просто пройтись с определённой скоростью. Но это на крайний случай. Сначала я попробую как написал kvitaliy. Как вариант, нарисовать чёрную линию на каком нибудь Bitmap с белым фоном, и выцепить координаты чёрных точек. Это может даже будет работать быстрее волнового алгоритма, ибо всего один проход по матрице. Хотя опять же, так у меня не будет правильного порядка точек; но и это можно учесть, при помощи выбора порядка прохождения по матрице. P. S. Если сильно по хардкору - можно залезть в исходники дотнета (я на шарпе всё это рисую), и спереть алгоритм функции Graphics.DrawLine().
Подпись ? Не, не слышал ...
Последний раз редактировалось OmegaBerkut; 11.03.2018 в 02:56. |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
JavaScript:движение объекта по траектории | Ayanami | Помощь студентам | 8 | 18.11.2014 21:45 |
Движение объектов по траектории | Vladlena | Общие вопросы C/C++ | 0 | 19.05.2013 18:38 |
Движение объекта по квадратной траектории | oblomok | C# (си шарп) | 5 | 08.07.2012 23:13 |
Движение объекта по искривленной траектории | ZvEr_HaCkEr | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 6 | 25.06.2011 05:36 |