NTNUJAVA Virtual Physics LaboratoryEnjoy the fun of physics with simulations! Backup site http://enjoy.phy.ntnu.edu.tw/ntnujava/
December 01, 2020, 04:22:17 pm

To live close to great minds is the best kind of education. ..."John Buchan (1875~1940 Scotticsh historian, Governor General of Canada)"

 Pages: [1]   Go Down
 Author Topic: how to make magnet1 and magnet2 in a single applet with different rotation?  (Read 6076 times) 0 Members and 1 Guest are viewing this topic. Click to toggle author information(expand message area).
lookang
Hero Member

Offline

Posts: 1796

http://weelookang.blogspot.com

 « Embed this message on: April 27, 2010, 03:53:59 pm » posted from:SINGAPORE,SINGAPORE,SINGAPORE

how to make magnet1 and magnet2 in a single applet with different rotation?

Hi everyone,

i have been successful in making magnet1 and magnet2 in a single applet if the have the same orientation.
http://www.phy.ntnu.edu.tw/ntnujava/index.php?topic=1602msg6056;topicseen#msg6056

i even made codes flexible enough to trouble shoot.

Code:
// computes magnetic field components and magnitude from dipoles
// rename this getB to getBcomputeField because need to separate the calculation of Field from Compass
public double[] getBcomputeField(double x, double y) {
double[] b=new double[4];
for(int i=0; i<=nd; i++) { // lookang change i// double dx=x-dipoles[i][0]-xMagnet;
// double dy=y-dipoles[i][1]-yMagnet;
double dx=x-dipoles[i][0]-(xMagnet*cs+yMagnet*sc);//FKH
double dy=y-dipoles[i][1]-(-xMagnet*sc+yMagnet*cs);//FKH
// double dx=x-dipoles[i][0]-dipoles2[i][0]-(xMagnet*cs+yMagnet*sc)-(xMagnet2*cs2+yMagnet2*sc2);//FKH
// double dy=y-dipoles[i][1]-dipoles2[i][1]-(-xMagnet*sc+yMagnet*cs)-(-xMagnet2*sc2+yMagnet2*cs2);//FKH
double dx2=x-dipoles2[i][0]-(xMagnet2*cs2+yMagnet2*sc2);//FKH
double dy2=y-dipoles2[i][1]-(-xMagnet2*sc2+yMagnet2*cs2);//FKH

double r2=dx*dx+dy*dy;
double r=Math.sqrt(r2);
double r3=r2*r;
double cos=dx/r;
double sin=dy/r;

double r4=dx2*dx2+dy2*dy2;
double r22=Math.sqrt(r4);
double r33=r4*r22;
double cos2=dx2/r22;
double sin2=dy2/r22;

// taken from http://en.wikipedia.org/wiki/Magnetic_moment
if (magnet1==true&&magnet2==false)
{
b[0]+=m*(3*cos*cos-1)/r3; //x component
b[1]+=m*3*sin*cos/r3; //y component
}
else if (magnet2==true&&magnet1==false)
{
b[0]+=m*(3*cos2*cos2-1)/r33; //x component
b[1]+=m*3*sin2*cos2/r33; //y component
}

else if (magnet1==true&&magnet2==true)
{
b[0]+=m*(3*cos*cos-1)/r3 +m*(3*cos2*cos2-1)/r33; //x component
b[1]+=m*3*sin*cos/r3 +m*3*sin2*cos2/r33; //y component

}

else {
b[0]=0;
b[1]=0;
}

// b[0]+=m*((3*cos*cos-1)*cs+(3*sin*cos)*sc)/r3; //x component
// b[1]+=m*((3*cos*cos-1)*(-cs)+(3*sin*cos)*sc)/r3; //y component

if(r2==0||r4==0) {
b[0]=b[1]=0;
}
}
b[2] = Math.sqrt(b[0]*b[0]+b[1]*b[1]); // magnitude
b[3] = Math.atan2(b[1],b[0]); // angle
return b;
}

/*
Dipole field:
B=mu/4/pi/r^3[(m*rhat)rhat-m] //vector form
K=mu*M/4/pi
alpha=0
Bx=K*[(3*cos(theta)^2-1)*cos(alpha)+3*sin(theta)cos(theta)*sin(alpha)]/r^3
By=K*[(3*sin(theta)^2-1)*sin(alpha)+3*sin(theta)cos(theta)*cos(alpha)]/r^3
*/

and

Code:
public void computeField () {
for (int i=0; i   double x=_view.vectorField2D.indexToX(i);
for (int j=0; j   double y=_view.vectorField2D.indexToY(j);
//double[] b=getB(x,y);// Gets the components and magnitude

if (magnet1==false&&magnet2==false)
{
double[] b=getBcomputeField(x*cs+y*sc+ x*cs2+y*sc2,-x*sc+y*cs -x*sc2+y*cs2);//
xField[i][j] = 0;
yField[i][j] = 0;
magField[i][j]=b[2];
}
else if (magnet1==true)
{
double[] b=getBcomputeField(x*cs+y*sc,-x*sc+y*cs);//FKH
//xField[i][j] = b[0];
//yField[i][j] = b[1];

// old codes
xField[i][j] = b[0]*cs-b[1]*sc;//FKH
yField[i][j] = b[0]*sc+b[1]*cs;//FKH
magField[i][j]=b[2];
}

else if (magnet2==true)
{
double[] b=getBcomputeField(x*cs2+y*sc2,-x*sc2+y*cs2);//FKH
//xField[i][j] = b[0];
//yField[i][j] = b[1];

// old codes
xField[i][j] = b[0]*cs2-b[1]*sc2;//FKH
yField[i][j] = b[0]*sc2+b[1]*cs2;//FKH
magField[i][j]=b[2];
}

else {
double[] b=getBcomputeField(x*cs+y*sc+ x*cs2+y*sc2,-x*sc+y*cs -x*sc2+y*cs2); // likely the codes here wrong
xField[i][j] = b[0]*cs-b[1]*sc + b[0]*cs2-b[1]*sc2;//FKH
yField[i][j] = b[0]*sc+b[1]*cs + b[0]*sc2+b[1]*cs2;//FKH
magField[i][j]=b[2];
}

}
}
}

where did the codes i did wrong?,
independently, each magnet works on its own, but when both are turn on, the bug appears to be opposite the actual position of the magnet.
 bug2magnet.png (106.05 KB, 1024x738 - viewed 473 times.) « Last Edit: April 27, 2010, 04:00:13 pm by lookang » Logged
lookang
Hero Member

Offline

Posts: 1796

http://weelookang.blogspot.com

 « Embed this message Reply #1 on: May 01, 2010, 01:50:08 pm » posted from:Singapore,,Singapore

hi prof hwang,
i doubt anyone else is going to give any sample codes to refer to on this
chance to help me out here? how to make magnet1 and magnet2 in a single applet with different rotation with vector sum of the magnetic field vectors?

http://www.phy.ntnu.edu.tw/ntnujava/index.php?topic=1602msg6056;topicseen#msg6056

the problem happens when cta =! cta2.

thanks!

 bug2magnet.png (80.47 KB, 792x604 - viewed 465 times.) « Last Edit: May 01, 2010, 01:51:40 pm by lookang » Logged
 Pages: [1]   Go Up
To live close to great minds is the best kind of education. ..."John Buchan (1875~1940 Scotticsh historian, Governor General of Canada)"