Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > C++ > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 25 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 10.01.2010, 21:57   #1
elka
Пользователь
 
Аватар для elka
 
Регистрация: 05.01.2010
Сообщений: 42
Репутация: 4

icq: 561599989
Лампочка движение графических объектов

Как можно описать движение объекта по по дуге с центром в нижнем левом углу экрана? Какие циклы нужно создать? А то у мне ничего, кроме координат нижнего левого угла не приходит на ум...
elka вне форума   Ответить с цитированием
Старый 10.01.2010, 22:49   #2
zetrix
Delphi/C++/C#
Профессионал
 
Аватар для zetrix
 
Регистрация: 29.10.2006
Сообщений: 1,972
Репутация: 626
По умолчанию

Любая дуга имеет свою математическию формулу. Для начала возьмите параболу, хотите большего - в математику придётся углубиться. По формуле кривой будете вычислять координаты отрисовки объекта.

Нужно из левого нижнего угла? его кооридинаты известны, делаем смещение при отрисовке на эти координаты и всё.

Пример координаты левого нижнего угла dХ, dY.
Координаты отрисовки: (X + dX) и (Y - dY), где
X - вычисляется в зависимости от шага (например изначально = 0 и потом инкрементируется на какой-то коэффициент),
Y = f(X), где f - функция кривой.

Последний раз редактировалось zetrix; 10.01.2010 в 22:55.
zetrix вне форума   Ответить с цитированием
Старый 10.01.2010, 23:10   #3
elka
Пользователь
 
Аватар для elka
 
Регистрация: 05.01.2010
Сообщений: 42
Репутация: 4

icq: 561599989
По умолчанию

А примера программки какого-нить движения есть?
elka вне форума   Ответить с цитированием
Старый 11.01.2010, 11:38   #4
Гром
Профессионал
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
Репутация: 473

icq: 482-373-277
По умолчанию

А если по дуге окружности, то можно сделать равномерное по ней движение:
Код:
for (double phi = 0; phi < 0.5 * Pi; phi += dphi)
 {
 X = R * cos(phi);
 Y = ScreenHeight - R * sin(phi);
 DrawYourFigureHere(X, Y);
 }
__________________
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума   Ответить с цитированием
Старый 16.01.2010, 03:59   #5
elka
Пользователь
 
Аватар для elka
 
Регистрация: 05.01.2010
Сообщений: 42
Репутация: 4

icq: 561599989
По умолчанию

А как тогда сделать движение по окружности туда-сюда?? Чтоб фигурка не начинала свое движение заново, а шла обратно из финиша к старту??
Там наверное какие-то циклы дописываются??
elka вне форума   Ответить с цитированием
Старый 16.01.2010, 11:13   #6
Phantomus
 
Регистрация: 16.01.2010
Адрес: MSU
Сообщений: 5
Репутация: 10
По умолчанию

Цитата:
Сообщение от elka Посмотреть сообщение
А как тогда сделать движение по окружности туда-сюда?? Чтоб фигурка не начинала свое движение заново, а шла обратно из финиша к старту??
Там наверное какие-то циклы дописываются??
Во-первых если движение должно быть не по дуге окружности, а по вытянутой дуге, то окружность можно масштабировать, то есть сделать эллипс, для этого не обязательно использовать уравнение эллипса, просто sin и cos умножаем на разные радиусы (Rx и Ry). Но главные оси такого эллипса все же совпадают с осями X и Y. Если такое не подходит, то нужно либо использовать уравние эллипса в общем виде либо применять матрицу поворота на угол. Вибирайте.
Чтобы движение было не циклическим по окружности, а лишь по четверти цикл делаем с проходом по 2*pi а на сдвиг накладываем модуль. То есть когда объект прошел pi/2 и должен начать движение по второй четверти окружности мы меняем знак смещения и он движется по той же ветке но в сторону убывания.


for (double phi = 0; phi < 2 * Pi; phi += dphi)
{
X = Rx * abs( cos(phi) );
Y = ScreenHeight - abs (Ry * sin(phi) );
DrawYourFigureHere(X, Y);
}

P.S. Если нужно чтобы объект все время перемещался по этой дуге туда-сюда, то цикл, естественно, нужно сделать бесконечным.
Phantomus вне форума   Ответить с цитированием
Старый 25.01.2010, 22:58   #7
elka
Пользователь
 
Аватар для elka
 
Регистрация: 05.01.2010
Сообщений: 42
Репутация: 4

icq: 561599989
По умолчанию

классно)) так хитро и двигается !!
elka вне форума   Ответить с цитированием
Старый 03.04.2012, 01:45   #8
4uTePoK
Новичок
 
Регистрация: 02.04.2012
Сообщений: 2
Репутация: 10
По умолчанию

Доброго времени суток.

Поднимаю данную тему, т.к. у меня проблемка по существу такая же.

Но движение должно осуществляться не по известному заранее уравнению какой-либо геометрической фигуры, а:

Нужно смоделировать траекторию спутника массой m=5000 кг в поле центрального тела M=10^25 при радиусе r0=7000км с начальной скоростью V0.

Написать уравнение эллипса не выход, нужно из каких-либо физических соображений.

Есть идеи?
З.Ы. Могу математические и физические данные связанные с движением тел в поле центральных тел прикрепить
4uTePoK вне форума   Ответить с цитированием
Старый 03.04.2012, 02:16   #9
Гром
Профессионал
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
Репутация: 473

icq: 482-373-277
По умолчанию

В каждый момент находим ускорение тела:
F = G * m * M / r0^2
a = G * M / r0^2
Сила направлена по радиусу, находим из геометрии проекции ax и ay.
Затем в каждый следующий момент
Vx_(i+1) = Vx_i + ax_i;
Vy_(i+1) = Vy_i + ay_i;
X_(i+1) = X_i + Vx_(i+1);
Y_(i+1) = Y_i + Vy_(i+1);
Вот вам положение тела в каждый следующий момент времени. Масса спутника, к слову, тут значения не имеет (предполагая, что центральное тело покоится, т.к. его масса много больше массы спутника и тот его не телепает).
__________________
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума   Ответить с цитированием
Старый 25.04.2012, 17:24   #10
4uTePoK
Новичок
 
Регистрация: 02.04.2012
Сообщений: 2
Репутация: 10
Печаль

Налистал материала, где всё сводится к R, а её в своё время проектируешь на X и Y, но вот не задача Visual с++ отказывается работать с константой 10^25.

Может быть есть библиотека разрешающая проблему с максимально возможным типом данных? =)
Изображения
 

Последний раз редактировалось 4uTePoK; 25.04.2012 в 19:49.
4uTePoK вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
макрос форматирования графических объектов darklumen Microsoft Office Word 2 24.12.2009 06:09
Вывод графических объектов rocky7 Общие вопросы C/C++ 2 20.08.2009 12:27
Перемещение графических объектов на форме bush007 Помощь студентам 3 05.04.2009 17:43
Условное форматирование графических объектов FAKDIM Microsoft Office Excel 1 16.01.2009 07:45
Перемещение графических объектов по форме Klyacksa Общие вопросы Delphi 15 20.06.2008 12:58


16:33.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.