4 replies to this topic

Posted 09 October 2012 - 01:38 PM

So I'm making a game involving electric and magnetic fields and I'm running into an issue. What is the best (and physically accurate) way to calculate and render the magnetic field lines resulting from a dipole? I need to be able to represent these mathematically because I plan on having arrows traveling along the lines so that direction and intensity can be inferred by the user. Something that is parametric would be great but I haven't been able to come across anything up to this point.

Thanks!

Thanks!

Posted 09 October 2012 - 06:05 PM

Is your game 2d or 3d? And are you familiar with vector notation?

For the magnetic field of a dipole in 3d, check out the Wikipedia article here. I've linked to a particular section; see the equation for B(x) there. This gives you your magnetic field.

There are a few ways to draw magnetic fields; we can help you with them. Some options are,

**Draw a vector field (2d/3d)**: For every point in a grid, draw an arrow with the right direction and magnitude)

It will look something like this:

**Draw field lines (2d/3d):**

Method 1 (using the vector field itself): From a collection of starting points (usually also in a grid), walk forwards and backwards along the vector field, drawing a curve.

Method 2 (in 2d, using the vector potential): Use marching squares/triangles to draw level sets of the vector potential.

It will look something like this:

**Plot the magnetic potential (2d):**

In 2d, the magnetic potential is a scalar field. You can either map these values to grayscale, or to a color scale, and then just draw this image.

It will look something like this:

For the magnetic field of a dipole in 3d, check out the Wikipedia article here. I've linked to a particular section; see the equation for B(x) there. This gives you your magnetic field.

There are a few ways to draw magnetic fields; we can help you with them. Some options are,

It will look something like this:

Method 1 (using the vector field itself): From a collection of starting points (usually also in a grid), walk forwards and backwards along the vector field, drawing a curve.

Method 2 (in 2d, using the vector potential): Use marching squares/triangles to draw level sets of the vector potential.

It will look something like this:

In 2d, the magnetic potential is a scalar field. You can either map these values to grayscale, or to a color scale, and then just draw this image.

It will look something like this:

Posted 10 October 2012 - 10:42 AM

I have messed with the problem on how to display the magnetic field in 3D. If you rendered the fields of a dipole it would appear as a shell that would really just hide the object. The best solution I have seen so far uses 2 planes that can be moved around by the user. One field in the XY plane and one in the ZY plane. The 2 planes just display a multi-colored gradient of the field in 2D for each plane.

I have thought about possibly using a fog effect that would scale the color to show the field intensity but I am afraid that would just look like a mess and obscure the object. I would be interested to see what other people have thought of doing to represent a magnetic field in 3D.

I have thought about possibly using a fog effect that would scale the color to show the field intensity but I am afraid that would just look like a mess and obscure the object. I would be interested to see what other people have thought of doing to represent a magnetic field in 3D.

Posted 12 October 2012 - 11:36 AM

@Emergent 3D and yes, I have taken a whole course on it. Thanks for getting back to me on this. I'll look into the algorithms that you posted and come back if I have any more questions.

Edit: OK yea I have more questions. First and foremost I assume x in the B(x) is position of the measurement? Secondly if I go along a grid and use this equation to create a vector field, how exactly do I traverse that? In my experience with vector fields the traversal tends to be somewhat ambiguous as long as the line you draw is tangent to the arrows you're passing by, so how would I decide in a program what path to use? Would it just be the points with the same (or close to the same) potential?

Edit: OK yea I have more questions. First and foremost I assume x in the B(x) is position of the measurement? Secondly if I go along a grid and use this equation to create a vector field, how exactly do I traverse that? In my experience with vector fields the traversal tends to be somewhat ambiguous as long as the line you draw is tangent to the arrows you're passing by, so how would I decide in a program what path to use? Would it just be the points with the same (or close to the same) potential?

**Edited by yanksfan2344, 12 October 2012 - 12:31 PM.**

Posted 12 October 2012 - 11:22 PM

First and foremost I assume x in the B(x) is position of the measurement?

Yep.

Secondly if I go along a grid and use this equation to create a vector field, how exactly do I traverse that? In my experience with vector fields the traversal tends to be somewhat ambiguous as long as the line you draw is tangent to the arrows you're passing by, so how would I decide in a program what path to use?

The idea is that, in the limit that you make your steps very small, you will be following the vector field correctly. The way to look at it is that you are simulating the ordinary differential equation,

dx/dt = B(x)

and you can use whatever method you want to do that. When we talk about "lots of little line segments," the implication (I assume) is that we're talking about Euler integration. There are also a great many other schemes that may be better, but Euler is usually a good starting point.

This works in 2d (since the magnetic potential is a scalar), but not in 3d (where it is a vector).Would it just be the points with the same (or close to the same) potential?