2012-04-10 2 views
1

Я делаю проект по созданию линий магнитного поля с использованием C++. Я работал с вычислительной частью C++ (на самом деле не занимался дизайном или чем-то вроде фантазии), но у меня возникают проблемы с «взлетом» с созданием линий магнитного поля. Я не уверен, как смоделировать что-то с участием векторное произведениеНачало работы по моделированию линий магнитного поля в C++

сила Лоренца уравнение: F = Q (ъх B)

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

Я просто хочу смоделировать простой дипольный магнит. Я бы сгенерировал точки, используя C++, а затем сохранил их как файл txt и нарисую их с использованием графика gnu. Любая помощь будет принята с благодарностью.

ответ

0

Я хотел бы начать так:

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

Повторите, используя разные стартовые точки (около одного полюса).

Исходная система уравнений значения Я говорю о:

Р = д (v х В)

д v/дт = (кв/м) (v х в)

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

0

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

Альтернативный метод заключается в том, чтобы нарисовать прямую линию от источника до потолка и двигаться по его длине, чтобы вектор поля был выровнен с линией поля. Там, где это не так, разделите линию на два сегмента и переместите центральную точку; по сути, вы перемещаете линию вокруг, чтобы найти полевую линию, и добавляете больше сегментов линии, где она еще больше виляет. Идеально идти с сплайнами или какой-либо другой кривой.

Вы упомянули перекрестные продукты. Если вы можете получить значение вектора поля в точке в виде 3d-вектора, то его кросс-произведение с другим вектором является просто стандартным определением поперечного произведения:

// given vectors a and b with properties x, y and z representing the components 
cross.x = a.y * b.z - a.z * b.y; 
cross.y = a.z * b.x - a.x * b.z; 
cross.z = a.x * b.y - a.y * b.z; 
Смежные вопросы