Russian Qt Forum
Ноябрь 23, 2024, 01:05 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2 3 4   Вниз
  Печать  
Автор Тема: Распределенная сила (магнит)  (Прочитано 25493 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« : Апрель 25, 2011, 10:35 »

Добрый день

Не знаю правильно ли я употребляю термин "распределенная", но суть такая: есть 3D полигонный объект "магнит" который притягивает или отталкивает др. 3D объекты. Пользователь задает мощность магнита и ее падение с расстоянием. Нужно рассчитать вектор силы с которой магнит притягивает данный объект.

Помимо забот с полигонами (т.к. точками (вертексами) здесь обойтись не получится), я очень смутно представляю себе "что считать". Ну есть N точек магнита и M точек объекта и что делать? Для каждой найти кратчайшее расстояние между объектами? Их может быть не одно, и такой расчет неустойчив. Да и как собрать выходной вектор? Просто сумма векторов - застряем в нормировке, вектор силы не должен зависеть от числа вертексов. 

Есть соображения?

Спасибо
Записан
Blackwanderer
Гость
« Ответ #1 : Апрель 25, 2011, 11:05 »

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

З.Ы. Если вам шашечки - то задайте силу магнита и считайте вторым законом Ньютона.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #2 : Апрель 25, 2011, 11:18 »

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

З.Ы. Если вам шашечки - то задайте силу магнита и считайте вторым законом Ньютона.
Я не пишу физический движок, а использую готовый open-source  Улыбающийся  В принципе да - нужны шашечки. Не следует понимать "магнит" буквально, расчет (электро)магнетизма не требуется, в 3D этот эффект часто называется attractor/repulsor. Ясно как это будет работать если данные просто точки, вопрос в том как сделать это для 3D объектов.


Записан
Blackwanderer
Гость
« Ответ #3 : Апрель 25, 2011, 11:22 »

Ясно как это будет работать если данные просто точки, вопрос в том как сделать это для 3D объектов.
Работать с центрами масс.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #4 : Апрель 25, 2011, 11:37 »

Работать с центрами масс.
Це нецiкаво
Вот кстати как движок применяет силу
Код
C++ (Qt)
void applyForce(const btVector3& force, const btVector3& rel_pos)
{
applyCentralForce(force);
applyTorque(rel_pos.cross(force*m_linearFactor));
}
 
Есть что задействовать
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #5 : Апрель 25, 2011, 11:45 »

\\ оффтоп
http://www.youtube.com/watch?v=Z4XEQVnIFmQ&NR=1
Пркольное видео про ливитацию магнита над сверхпроводником.))
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #6 : Апрель 25, 2011, 12:10 »

Добрый день

Не знаю правильно ли я употребляю термин "распределенная", но суть такая: есть 3D полигонный объект "магнит" который притягивает или отталкивает др. 3D объекты. Пользователь задает мощность магнита и ее падение с расстоянием. Нужно рассчитать вектор силы с которой магнит притягивает данный объект.

Помимо забот с полигонами (т.к. точками (вертексами) здесь обойтись не получится), я очень смутно представляю себе "что считать". Ну есть N точек магнита и M точек объекта и что делать? Для каждой найти кратчайшее расстояние между объектами? Их может быть не одно, и такой расчет неустойчив. Да и как собрать выходной вектор? Просто сумма векторов - застряем в нормировке, вектор силы не должен зависеть от числа вертексов. 

Есть соображения?

Спасибо
Здесь наверное логичнее вначале рассмотреть более простую задачу, чтоб понять что происходит с более сложными объектами.
Посчитайте вначале силу действующую на один магнитный диполь m1, другим магнитным диполем m2.
Эта сила будет зависеть, в частности от взаимной их ориентации.
Затем представляете магнит, как набор таких диполей и тело тож аналогично. Ну и суммарную силу, думаю не сложно будет посчитать.

\\ Опять оффтоп
Вообще магнетизм - это чисто квантовый эффект. Более того, он исчо и релятивийский) Магнетизм в магнитах обусловлен взаимодействием спинов, которое приводит в случае (магнита) к ферромагнитному порядку: все спины выстраиваются параллельно друг-другу.   
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #7 : Апрель 25, 2011, 12:48 »

Посчитайте вначале силу действующую на один магнитный диполь m1, другим магнитным диполем m2.
Эта сила будет зависеть, в частности от взаимной их ориентации.
С этим проблем нет
Код
C++ (Qt)
float dot = DotProduct(p1.Normal(), p2.Normal()) * -1.0f;
if (dot > 0.0f) {
float dropoff = GetDropoff(p1.Position(), p2.Position());
if (dropoff > 0.0f) {
 Vector3 force = force_max * dropoff * dot;
...
}
 

Затем представляете магнит, как набор таких диполей и тело тож аналогично. Ну и суммарную силу, думаю не сложно будет посчитать.
Ну если несложно.. Как там в старом мультфильме
Цитировать
Это хорошо что Вы такой зеленый и плоский...
Прошу исполнить - ну или хотя бы кинуть пару-тройку идей  Улыбающийся



Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #8 : Апрель 25, 2011, 13:13 »

В чём сложность то?
Представляете магнит, как набор N1 диполей параллельных друг-другу, расставленных в точках в соответствии с геометрией задачи.
Тело, тоже представляете как набор N2 диполей. Считаете суммарную силу, действующую на каждый диполь тела со стороны всех диполей магнита. Получаете N2 векторов сил, приложенных к точкам тела, где нах. диполи.
Решаете уравнение Ньютона со связями (положение всех диполей относительно друг-друга фиксировано в теле).

Можно решать эту задачу вариационным методом.
Построить действие S. И истинная траектория движения должна минимизировать действие системы. Задача сводится к задачие на нахождение минимума.

Но второй вариант, боюсь движок не потянет, хотя он гораздо более гипкий.
Ведь уравнения Ньютона - это частный случай уравнений Лагранжа.
   
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #9 : Апрель 25, 2011, 13:31 »

В чём сложность то?
Представляете магнит, как набор N1 диполей параллельных друг-другу, расставленных в точках в соответствии с геометрией задачи.
Тело, тоже представляете как набор N2 диполей. Считаете суммарную силу, действующую на каждый диполь тела со стороны всех диполей магнита. Получаете N2 векторов сил, приложенных к точкам тела, где нах. диполи.
Решаете уравнение Ньютона со связями (положение всех диполей относительно друг-друга фиксировано в теле).
А давайте более реалистично (как программисты). Вижу такие проблемы

1) N точек на одной стороне, M на другой. С перебором N*M захлебнемся уже на сотнях точек. Нужны структуры для поиска - какие?

2) Как "нормироваться"? Ну допустим один из N (приемник) получил воздействие от 100 M (источник). Так что, там гигантская сила? Вовсе нет, может там просто вертексы источника стоят густо

3) То же что и "2" но с точки зрения посчитанного приемника. Есть, для примера,  300 посчитанных векторов - и что с ними делать? Просто сложить - несерьезно

Спасибо



 
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #10 : Апрель 25, 2011, 14:02 »

В чём сложность то?
Представляете магнит, как набор N1 диполей параллельных друг-другу, расставленных в точках в соответствии с геометрией задачи.
Тело, тоже представляете как набор N2 диполей. Считаете суммарную силу, действующую на каждый диполь тела со стороны всех диполей магнита. Получаете N2 векторов сил, приложенных к точкам тела, где нах. диполи.
Решаете уравнение Ньютона со связями (положение всех диполей относительно друг-друга фиксировано в теле).
А давайте более реалистично (как программисты). Вижу такие проблемы

1) N точек на одной стороне, M на другой. С перебором N*M захлебнемся уже на сотнях точек. Нужны структуры для поиска - какие?

2) Как "нормироваться"? Ну допустим один из N (приемник) получил воздействие от 100 M (источник). Так что, там гигантская сила? Вовсе нет, может там просто вертексы источника стоят густо

3) То же что и "2" но с точки зрения посчитанного приемника. Есть, для примера,  300 посчитанных векторов - и что с ними делать? Просто сложить - несерьезно

Спасибо
1) Зачем так много диполей? На больших расстояниях, тело всё равно будет представлять из себя эффективно один диполь, как впрочем и магнит.
При приближении, достаточно задействовать диполей 10, не более. Вам качественную картину же нужно получить.. Кто там высчитывать всё точно будет?
Поле магнита можно задать изначально. Посчитать его конфигурацию для нескольких геометрий и апроксиммиорвать чем нить простым.

2-3 Лучше вычислять энергию взаимодействия тела с заданным полем магнита. Зная энергию можно найти и моменты и силы. Но это дело вкуса, конечно.   
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #11 : Апрель 25, 2011, 14:32 »

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

2-3 Лучше вычислять энергию взаимодействия тела с заданным полем магнита. Зная энергию можно найти и моменты и силы. Но это дело вкуса, конечно.   
Давайте примерим это для максимально простого случая - напр кубики падают на плоскость. Сила отталкивания плоскости (отрицательный магнит) больше гравитации, так что, во всяком случае, "упасть и успокоиться" кубики не должны. Тогда наивное сведение к случаю "точка-точка" может не пройти даже здесь - плоскость может быть 1000х1000 а кубики 1х1х1. Что сказать пользователю? "Ну ты это.. сделай плоскость как точку - тогда будет работать"  Улыбающийся

Также: предлагается аппроксимировать объекты небольшим количеством единиц (напр 10). Каким образом? Анализировать модель, выделять "кластеры"  и.т.п. - ну может это и возможно, но уж никак недешево и совсем непросто. А для напр стандартной фигуры teapot (чайник) в 10 не уложиться никак.

Так что пока налицо "легкость мысли" - а в нашем деле главное "реализьм"  Улыбающийся
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #12 : Апрель 25, 2011, 14:51 »

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

Если геометрия иная, как в случае с плоскостью, то ясен пень, дипольное приближение не применимо. Задавайте магнитное поле плоскости и считайте силу взаимодействия диполя (вашего кубика) с этим полем.

Используйте принцип суперпозиции полей.
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #13 : Апрель 25, 2011, 15:20 »

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

Если геометрия иная, как в случае с плоскостью, то ясен пень, дипольное приближение не применимо. Задавайте магнитное поле плоскости и считайте силу взаимодействия диполя (вашего кубика) с этим полем.

Используйте принцип суперпозиции полей.
Не хочу "изливать претензии" и все такое. Но Ваш ответ хорошо показывает почему я не люблю "научных работников". Конечно я никогда не буду обладать такими знаниями - другой склад мЫшления. И я уважаю др. подход/стиль. Но елы-палы - по делу ведь ноль. Стандартный набор: мол "постановка хромает", "задача в общем виде неразрешима" и вообще - мы очень умные, а ты Иван-программист, давай-ка разгребай весь кал, ты отвечаешь чтобы работало для пользователя.

Ладно, сделаю, потом мувики выложу. Будьте здоровы.
Записан
Akon
Гость
« Ответ #14 : Апрель 25, 2011, 15:38 »

Случай: шар падает на плоскость (с шаром проще, чем с кубом).

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

Итак, шар падает на плоскость. В каждый момент времени движения шара нужно рассматривать взаимодействие всякого бесконечно малого участка объема шара (дифференциал объема) и всякого бесконечно малого участка плоскости (дифференциал площади). Т.е. рассматривается бесконечное число взаимодействий точка-точка. Чтобы найти полное взаимодействие, нужно интегрировать по объему шара и площади плоскости. В результате вы получите функциональную зависимость силы "магнетизма" от расстояния. Далее в процессе движения сила "магнетизма" изменяется, и придется рассматривать дифференциал времени и относительно него составлять уравнение сил, т.е. уравнение будет дифференциальным. Решаете это дифференциальное уравнение и получаете функциональную зависимость пройденного шаром пути от времени.

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

Если брать куб или другое тело, не обладающее сферической симметрией, то оно в общем случае в процессе движения будет колебаться с затухающей амплитудой вокруг некоторого центра "магнетизма".

Все расчеты делаются на бумаге или в матем. пакете. Получаются необходимые функции (путь от времени, амплитуда колебаний от времени и т.п.). А задача непосредственного программирования тривиальна.
Записан
Страниц: [1] 2 3 4   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.257 секунд. Запросов: 23.