Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2008.08.10;
Скачать: [xml.tar.bz2];

Вниз

сила/ускорение/скорость   Найти похожие ветки 

 
Dmitry S ©   (2008-06-19 17:46) [0]

Чтото я не могу разобраться.
Хочу сделать окно, которое плавно летает за курсором.

К примеру курсор притягивает окно с силой G.
Какие параметры и как расчитывать? (с математикой у меня хорошо, с физикой не очень).
Я так понимаю на окно действует постоянно две силы: G и I (инерция). При этом окно двигается со скоростью v (t).
t - время в секундах.
dt - время между кадрами. Т.е. между расчетами. Расчитать надо подразумевая, что на тело действует сила G все время dt.
Вот и собственно вопрос как расчитать движение?

PS. Прошу опустить комментарии по поводу "зачем все это надо"


 
БарЛог ©   (2008-06-19 17:49) [1]

Сделай еще зависимость от квадрата расстояния


 
McSimm ©   (2008-06-19 17:53) [2]


> БарЛог ©   (19.06.08 17:49) [1]

и от масс курсора и окна :)


 
McSimm ©   (2008-06-19 17:57) [3]

для реалистичности без векторов не обойтись. Если что-то движется со скоростью V0, но не в том направлении, простое добавление V0+dV не поможет поверить, что тут рядом проходили физические процессы


 
Mystic ©   (2008-06-19 18:00) [4]

Проинтегрировать по площади окна. Быть готовым к тому, что дипольный момент будет разворачивать окно.


 
БарЛог ©   (2008-06-19 18:02) [5]

> дипольный момент будет разворачивать окно.
хотел бы я на это посмотреть в реализации :)


 
Dennis I. Komarov ©   (2008-06-19 18:04) [6]

А как же вихривые потоки из пустой корзины? :)


 
McSimm ©   (2008-06-19 18:06) [7]


> Mystic ©   (19.06.08 18:00) [4]

:)
Я когда это читал, представил, что придется мышку удерживать, иначе ее потянет вслед за притянутым курсором :)


 
TUser ©   (2008-06-19 18:21) [8]

В каждый момент окно движется по вертикали со скоростью V и не меняет ее самостоятельно

Курсор тянет вних с силов А, которая есть скорость изменения скорости

По горизонтали - аналогично. Силу можно разложить на составляющие, взяв ее проекции.


 
McSimm ©   (2008-06-19 18:21) [9]


> Dmitry S ©   (19.06.08 17:46)

Поскольку ускорение прямо пропорционально действующей силе, то достаточно реализовать эту прямую пропорциональность, разложив по осям.

Т.е. дельта скорости для каждого дельта времени постоянна и равна kF (некая константа на силу), раскладываем V0 по осям и расчитываем приращение по каждой оси.


 
Mystic ©   (2008-06-19 18:30) [10]

С точке зрения физики в данной задаче явно некорректно рассматривать окно как материальную точку.


 
McSimm ©   (2008-06-19 18:37) [11]

Это если рассматривать окно как массу, что конечно реалистичнее и рассматривать силу взаимодействие в зависимости от квадрата расстояний до каждой его точки.

Но в исходном вопросе есть допущение, что на окно действует заданная сила. Я думаю, что на некоторые упрощения с учетом уровня знаний можно пойти.


 
Mystic ©   (2008-06-19 18:52) [12]

Понятно, что так проще реализовывать---не надо поворачивать окно :)


 
@!!ex ©   (2008-06-19 19:24) [13]

Векторы - рулят...
Смотришь на задачу - ужасно сложная, как решать - непонятно...
Переводишь все значения в вектора... и получаешь элементарную задачу...


 
Псалтырь ©   (2008-06-19 23:48) [14]


> Mystic ©   (19.06.08 18:30) [10]
>
> С точке зрения физики в данной задаче явно некорректно рассматривать
> окно как материальную точку.
>

Да почему же? Пересечение диагоналей будем считать центром масс и вперед


 
Petr V. Abramov ©   (2008-06-20 01:08) [15]


> К примеру курсор притягивает окно с силой G.

сила G к чему приложена? к какой кнопке мышки? За какое место окна притягивает?


 
palva ©   (2008-06-20 01:17) [16]

Интересно будет посмотреть, как окно вращается по эллиптической орбите вокруг курсора. А уравнение Кеплера все равно придется решать. Либо интегрировать численно, что гораздо сложнее.


 
Petr V. Abramov ©   (2008-06-20 01:32) [17]


> palva ©   (20.06.08 01:17) [16]
> Либо интегрировать численно,

"а мне по..., я Е в степени ИКС" :)


 
KSergey ©   (2008-06-20 08:29) [18]

Наверное надо найти школьный учебник физики (за какой вот товлько класс?) и перечитать в нем разделы, касающиеся решения задач о силах, приложенных к кирпичу, который еще и движется.

К стати, сила тяготения к курсору постоянная должна быть или нет? Пожалуй - нет, так реалистичнее будет.

А физику я не знаю, так что как именно считать - я тоже не знаю, а думать - лень. Но написать что-нибудь хотелось.


 
Knight ©   (2008-06-20 08:39) [19]

Прям как моя приколка для мышки... движение курсора по законам упругости пружинки... с настройкой жёскости пружины и массы курсора :))))))


 
Дуб ©   (2008-06-20 08:49) [20]


> Я так понимаю на окно действует постоянно две силы: G и
> I (инерция).

Не, учебник физики тут уже не поможет.


 
Simpson ©   (2008-06-20 10:58) [21]

KSergey ©   (20.06.08 08:29) [18]
IMHO Ржет над тобой народ.

У тебя откуда там сила? Ну где ты на мониторе силу нашел?
Вычесляй вектор движения и с каким то ускорением двигай картинку к окну, если
тебе инерция нужна просто вычесляй вектор чуть позже чем окно  сдвинулось/
было достигнуто. Можно расчитывать насколько далеко обьект за которым следиш
и в зависимости от этого менять скорость.


 
Mystic ©   (2008-06-20 13:10) [22]

> Да почему же? Пересечение диагоналей будем считать центром
> масс и вперед


А потом проведи эксперимент и получишь несоответствие. Как, например, объяснить тот факт, что ускорение свободного падения уменьшается при движении к центру земли? По твой формуле, если считать Землю материальной точкой, то расстояние до нее уменьшается, значит ускорение свободного падения должно увеличиваться? Но оно уменьшается :)

Тут же ускорение окна меняется в пределах окна. Значит точки окна, которые ближе к курсору, будут притягиваться сильнее. Окно будет разворачиваться... А реши через центр тяжести, потом проинтегрируй по площади окна и сравни результаты :)


 
Дуб ©   (2008-06-20 13:27) [23]

> Mystic ©   (20.06.08 13:10) [22]

В условии сказано, что притягивает курсор. О функции притяжения ничего не сказано. Откуда известно, что сила будет зависеть от растояния?


 
McSimm ©   (2008-06-20 13:58) [24]


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

смешно


 
McSimm ©   (2008-06-20 14:01) [25]

На самом деле такой эффект действительно есть, из-за него, например, происходит прецессия орбит планет. Но это не инерция, это релятивистская механика и в рамках окна монитора за пределами вычислительной точности :)


 
Simpson ©   (2008-06-20 14:02) [26]

McSimm ©   (20.06.08 13:58) [24]
В чем прикол то?
Или для программки в которой одна картинка за второй бегает надо обязательно моделировать поведение вселенной? Визуально какая то инерция будет насколько она реальна другой вопрос. Ну так это не моделирование соударения машин марки Форд, а просто прикол на экране.


 
McSimm ©   (2008-06-20 14:03) [27]


> Визуально какая то инерция будет

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


 
Simpson ©   (2008-06-20 14:07) [28]

McSimm ©   (20.06.08 14:03) [27]
Не совем понял, поясни пожалуйста.


 
McSimm ©   (2008-06-20 14:13) [29]

Как смоделировать поведение окна для такой задачи уже написано выше. Эта модель полностью включает инерционное поведение. Упрощение в одном - сила притяжения считается постоянной и не зависит от формы и взаиморасположения предметов.
Достаточно правдоподобно для такого рода задачи. В каждый момент времени дельты скорости по x и по y расчитываются по простейшей формуле.

Зачем при этом нужно расчитывать вектор "позже" - мне не понятно.

Почему это приведет к явлению, не похожему на инерцию:
Представьте окно ускоренно движущееся к курсору. Перемещаем курсор на другую сторону экрана. По простому пути приращения скорости меняются на отрицательные (сразу). По вашему - еще какое-то время окно продолжает ускоряться в сторону, противоположную вектору силы. Это и есть некоторый эффект релятивистской механики, но ничего общего с инерцией.


 
euru ©   (2008-06-20 14:22) [30]

Нужно ещё учесть, что окно неоднородно. В нём имеются различные элементы управления, влияющие на распределение его масс.
Более того, нужно учитывать также, что поля ввода могут заполняться символами, обладающими собственной массой.


 
Игорь Шевченко ©   (2008-06-20 14:28) [31]


> обладающими собственной массой.


буквы ю и w весят больше других


 
Dmitry S ©   (2008-06-20 14:28) [32]

Вобщем как сделал я.
Первое что я осознал, это то, что инерция - это не сила. У тела в данный момент есть только координата и скорость. (Для каждой оси свои)

Один раз в промежуток времени dt я вычисляю новую скорость и новую координату по формуле:

ax := Fx / m;
X := X + dt * Vx + dt * dt * ax / 2;
Vx := Vx + dt * ax;

Для Y аналогично.

Fx находится как F1 * Cos(Ang1) + F2 * Cos(Ang2) + ... (для всех сил, которые действуют на тело).

Осталось только расчитать упругие столкновения с границами экрана и все:)
Ведь если ввести силу притяжения, которая, как я понимаю должна быть примерно равна 9.8*m, то за время dt тело может удариться о нижний край экрана, и получается, что сила притяжения сперва ускоряет объект, а потом тормозит. Вот думаю:)

PS.
Точка на которую указывает курсор - всего лишь направление одной из сил. Сама сила зависит от расстояния (обратнопропорциональна).


 
Dmitry S ©   (2008-06-20 14:29) [33]


> euru ©

"Не все то окно, что с контролами"... Почти © :)


 
McSimm ©   (2008-06-20 14:41) [34]


> Сама сила зависит от расстояния (обратнопропорциональна).


Правильнее квадрату расстояния. Не намного сложнее и реалистичнее.


 
Anatoly Podgoretsky ©   (2008-06-20 14:42) [35]

> Игорь Шевченко  (20.06.2008 14:28:31)  [31]

Ш и Ж еще тяжелее, легкая i а самое легкое пробел, вообще нифига не весит, одна видимость (дыра).


 
Dmitry S ©   (2008-06-20 14:44) [36]

т.е. по сути

F = k / (D*D).

где k - это коэффициент ??


 
DesWind   (2008-06-20 15:02) [37]

Угу, инерция это свойство вещества которое измеряется инерциальной массой.


 
Mystic ©   (2008-06-20 15:03) [38]

> В условии сказано, что притягивает курсор. О функции притяжения
> ничего не сказано. Откуда известно, что сила будет зависеть
> от растояния?


В условии задачи просилось решение с точки зрения физики :) Движение окна в сторону курсора можно реализовать и без всякой физики.


> Нужно ещё учесть, что окно неоднородно. В нём имеются различные
> элементы управления, влияющие на распределение его масс.
>
> Более того, нужно учитывать также, что поля ввода могут
> заполняться символами, обладающими собственной массой.


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


 
palva ©   (2008-06-20 15:20) [39]

Приливные силы учесть будет прикольно. Типа буквочки сбегаются в сторону курсора. А если учесть, что буквочки друг о друга трутся и выделяется тепло, - вот вам и диссипация.


 
McSimm ©   (2008-06-20 15:29) [40]


> Dmitry S ©   (20.06.08 14:44) [36]
> т.е. по сути
> F = k / (D*D).
> где k - это коэффициент ??

Да, при условии игнорирования формы тел и постоянной массы.

Если все правильно реализовать, можно будет двигая курсором мыши попытаться поймать окно на орбиту :)


 
Dmitry S ©   (2008-06-20 15:43) [41]

Вот опять вопрос возник по ходу:

К примеру на тело действует сила только притяжения (по оси Y). Тело двигается и в какойто момент ударяется о край. При этом происходит упругий удар (т.е. тело отскакивает мгновенно) и тело теряет половину скорости: Vy := - Vy * 0.5;
Т.к. тело сила притяжения продолжает действовать на тело, то через некоторое время произойдет второй удар и так далее. Причем частота ударов будет увеличиваться.
Если делать расчет один раз в t секунд, то может получится так, что тело ударится о край несколько раз.
Как в этом случае оптимально построить решение задачи, чтобы учитывать любое количество ударений?


 
McSimm ©   (2008-06-20 15:56) [42]

Каждый дельта времени вы расчитываете новый вектор для тела и тут же желательно проверить произойдет ли столкновение до наступления следующего момента времени (вариант - просчитывать столкновения, прошедшие за предыдущий момент). Чтобы выяснить где же в данный момент времени находится тело, придется просчитывать все произошедшие столкновения между двумя моментами.

Для упрощения можно (и нужно) ограничить скорость минимально возможным значением, вы же не планируете просчитывать бесконечные процессы, т.е. при каком-то значении V < Vmin тело не отскакивает.

--
один раз в t секунд - не редко ли ?


 
Dmitry S ©   (2008-06-20 16:09) [43]


> Для упрощения можно (и нужно) ограничить скорость минимально
> возможным значением, вы же не планируете просчитывать бесконечные
> процессы, т.е. при каком-то значении V < Vmin тело не отскакивает.

Я тоже об этом подумал.


> один раз в t секунд - не редко ли ?

Это образно выражаясь. t примерно равно 0.05 :)


 
Dmitry S ©   (2008-06-20 16:10) [44]

Хочу еще попробовать как Knight ©   (20.06.08 08:39) [19]


 
Dmitry S ©   (2008-06-20 17:53) [45]

Блин, а что можно изменить, чтобы система (ну у меня это одно тело) стремилось к покою, а не разгонялось постоянно?


 
McSimm ©   (2008-06-20 17:56) [46]

Привести в соответствие с моделируемым процессом.
Почему разгоняется?


 
Dmitry S ©   (2008-06-20 17:59) [47]

Я для тестов "убрал стенки".
на тело всегда действует только сила направленная на курсор. причем постоянная...
тело начинает двигаться по эллипсу и размер его постоянно увеличивается... и скорость растет


 
McSimm ©   (2008-06-20 18:05) [48]

Можно поиграться с коэффициентом F = k / (D*D)


 
McSimm ©   (2008-06-20 18:12) [49]


> размер его постоянно увеличивается... и скорость растет

вообще-то странно, коэффициент не причем, надо искать ошибку в расчетах


 
McSimm ©   (2008-06-20 18:13) [50]


> причем постоянная...

А, тогда не странно. Тело под воздействием постоянной силы будет ускоряться.

Надо вести зависимость от расстояния.


 
Knight ©   (2008-06-20 23:25) [51]

> Осталось только расчитать упругие столкновения с границами
> экрана и все:)


лучше не упругое.. а с деформацией окна :)


 
Knight ©   (2008-06-20 23:26) [52]

Восстановление формы окна только после перезагрузки приложения к которому оно относится... стукнул Ворд пару десятков раз о бортик и в корзину :)


 
AndreyV ©   (2008-06-23 13:24) [53]

> [34] McSimm ©   (20.06.08 14:41)
> > Сама сила зависит от расстояния (обратнопропорциональна)
> Правильнее квадрату расстояния. Не намного сложнее и реалистичнее.

Если пространство двумерное, то пропорционально 1/r.


 
McSimm ©   (2008-06-23 13:29) [54]


> Если пространство двумерное, то пропорционально 1/r.

а в одномерном ?


 
KilkennyCat ©   (2008-06-23 14:45) [55]

Вы не забыли, что мониторы от разных производителей могут быть,  и значит, надо учитывать коэффициент трения окна о поверхность монитора, а также с разным углом наклона (особенно ноуты), который может меняться в любую сторону (планшетники)?


 
AndreyV ©   (2008-06-23 15:00) [56]

> [54] McSimm ©   (23.06.08 13:29)
> > Если пространство двумерное, то пропорционально 1/r.
> а в одномерном ?

Не завмсит от расстояния.


 
McSimm ©   (2008-06-23 15:12) [57]

Это философское рассуждение?
Проверить-то все равно невозможно...

Не могу согласиться с таким утверждением. Квадрат (как и произведение масс) расстояния возникает в формуле безотносительно к мерности пространства, а по причине участия во взаимодействии двух тел.


 
AndreyV ©   (2008-06-23 16:15) [58]

> [57] McSimm ©   (23.06.08 15:12)
> Это философское рассуждение?
> Проверить-то все равно невозможно...

Математическое.
Проверить экспериментально, конечно, не получится.

> [57] McSimm ©   (23.06.08 15:12)
> Не могу согласиться с таким утверждением. Квадрат (как и
> произведение масс) расстояния возникает в формуле безотносительно
> к мерности пространства, а по причине участия во взаимодействии
> двух тел.

Напряжённость поля на расстоянии r обратно пропорциональна площади n-мерной сферы радиуса r.
Можно представить так: при большем числе измерений для частиц переносчиков взаимодействия есть больше возможностей для распространения, или силовые линии быстрее "редеют".


 
McSimm ©   (2008-06-23 16:25) [59]

Действительно, похоже я не прав.


 
McSimm ©   (2008-06-23 16:32) [60]

Только не думаю, что при подобном моделировании стоит применять такую мат. модель. Правдоподобность базируется на опыте, который обречен на трех-мерный мир и от тел, даже если они двигаются в плоскости, ожидается поведение как трехмерных тел.


 
AndreyV ©   (2008-06-23 17:04) [61]

> [60] McSimm ©   (23.06.08 16:32)

Наверно так. Тогда это будет 2Д проекция.
Впрочем, на пробелы в модели автора уже указывали.


 
Дуб ©   (2008-06-24 05:41) [62]

> тело начинает двигаться по эллипсу и размер его постоянно
> увеличивается... и скорость растет

Если сила обатно пропорциональна квадрату расстояния или прямо пропорциональна расстоянию, то орбиты получаются замкнутые, при покоящемся центре(исключаем выходы на бесконечные ветки). При других формах закона - незамкнутые (именно так можно смоделировать поведение при ОТО - введением доп.члена по обратному кубу).

Ежели у вас при указанных не получается замкнутыхх и тем паче идет удаление, то нет работы банальных законов сохранения. Корректируйте на каждом шаге.


 
Slym ©   (2008-06-24 07:12) [63]

McSimm ©   (20.06.08 15:29) [40]
попытаться поймать окно на орбиту

или разогнав до 2 космической выкинуть с экрана, а "поднажав" и за пределы комнаты


 
Simpson ©   (2008-06-24 11:04) [64]

Вы сейчас пошлете пару окон в соседнюю галактику, вот операторы где нибудь на Альфа - Центавре удивятся))



Страницы: 1 2 вся ветка

Форум: "Прочее";
Текущий архив: 2008.08.10;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.62 MB
Время: 0.008 c
2-1215411081
iSODEv
2008-07-07 10:11
2008.08.10
мерцает PaintBox


15-1213990535
wl
2008-06-20 23:35
2008.08.10
Аниме?


2-1215590222
kyn66
2008-07-09 11:57
2008.08.10
Скриншот окна броузера


9-1173103249
Чайник
2007-03-05 17:00
2008.08.10
OpenGL: вопрос по glReadPixels


2-1215418081
IGray
2008-07-07 12:08
2008.08.10
Экспорт ветки реестра в REG-файл без Regedit-a.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский