You are on page 1of 24

import interfascia.

*; //Imports GUI Library

int Wall = 0; //Wall Gravity and Charge are toggles for each property
int Gravity = 0;
int Charge = 0;
int typeNum2;
int objCount = 0; //number of objects
int posX, posY; //position x and y of new object

float[] grvConst; //gravity constant list and variables


float gravConst = 1;
float gravConstE = -11;
float gravConstN = 6.67;
float[] elcConst; //electricity constant list and variables
float elecConst = 1;
float elecConstE = 9;
float elecConstN = 8.99;
float[] Mass, Radius, Charges; //mass radius and hcharge list and variables
float MassN, MassE;
float RadiusN, RadiusE;
float ChargesN, ChargesE;
float[] v1, v2; // x and y velocity
float netEForceX1, netEForceY1, netGForceX1, netGForceY1, netGForceX2, netGForceY2,
moveX, moveY,netEForceX2, netEForceY2; //variables used in attraction and repulsion
calculation

PVector Velocity; // not used

boolean enter = false; //boolean for enter


boolean nPress = false; //boolean for object creation when hit n
boolean definObj = true;
boolean menuHide = false; //boolean for menu hide
boolean typing; //not used
boolean dropDown = false; //drop down toggle

String typedNum; //string of typed numbers in text boxes

object O1, O2, O3, O4, O5, O6, O7, O8, O9, O10; //objects 4-10 are not used

GUIController c; //standard gui constroller

IFTextField gE, gN; //textfields for constants


IFTextField qE, qN;

IFTextField mEo, mNo; //Object Interfaces


IFTextField qEo, qNo; //syntax = 1st letter of var + exp or num + o for object
IFTextField cEo, cNo; //variables for objects
IFTextField rEo, rNo;
IFTextField v1o, v2o;

void setup()
{
background(#B4B4B4); //sets background
size(1000, 950);
c = new GUIController(this);

gE = new IFTextField("Grav Val", 170, 795, 50); //developes and created textfields for
constants
gN = new IFTextField("Grav Exp", 260, 795, 30);

qE = new IFTextField("Electric Exp", 260, 825, 30);


qN = new IFTextField("Electric Val", 170, 825, 50);

mNo = new IFTextField("Mass Val", 100, 40, 50);


mEo = new IFTextField("Mass Exp", 190, 40, 30);

rNo = new IFTextField("Radius Val", 100, 70, 50);


rEo = new IFTextField("Radius Exp", 190, 70, 30);

cNo = new IFTextField("Charge Val", 100, 100, 50);


cEo = new IFTextField("Charge Exp", 190, 100, 30);

v1o = new IFTextField("Velocity One", 100, 130, 50);


v2o = new IFTextField("Velocity Two", 190, 130, 50);

c.add(gE); //adds text fields for constants


c.add(gN);
c.add(qE);
c.add(qN);

gN.addActionListener(this); //adds action listeners for constants


gE.addActionListener(this);
qN.addActionListener(this);
qE.addActionListener(this);
}

void draw()
{
//println(Gravity, Charge, Wall);
noStroke(); //redraws backgrounds
fill(#B4B4B4);
rect(0,0,1000,950);

int downCheck = 0;

stroke(10);
fill(#909090);

if(nPress) //text on object creation box


{
fill(#909090);
rect(10, 10, 250, 160, 5);

fill(255);
text("Mass", 20, 55);
text("* 10^", 155, 55);

text("Radius", 20, 85);


text("* 10^", 155, 85);

text("Repulsion", 20, 115);


text("* 10^", 155, 115);

text("Magnitude", 20, 145);


text("Dir", 155, 145);
}
/***** Drop Down Menu Start *****/
if((mouseX >= 950) && (mouseY <= 20))
{
dropDown = true;
downCheck = downCheck + 1;
}
else if((mouseX <= 900) || (mouseY >= 200))
{
dropDown = false;
noStroke();
fill(#B4B4B4);
rect(900, 0, 100, 201, 0, 0, 0, 5);
}
if(dropDown)
{
rect(900, 0, 100, 200, 0, 0, 0, 5);
fill(255);

textSize(12);
text("Attraction", 930, 20);
//text("Walls", 930, 40);
text("Repulsion", 930, 60);

if(Gravity % 2 == 0)
{
fill(#0AA708);
rect(910, 10, 10, 10, 2);
}
else if(Gravity % 2 == 1)
{
fill(#C92525);
rect(910, 10, 10, 10, 2);
}
//if(Wall % 2 == 0)
//{
// fill(#0AA708);
// rect(910, 30, 10, 10, 2);
//}
//else if(Wall % 2 == 1)
//{
// fill(#C92525);
// rect(910, 30, 10, 10, 2);
//}
if(Charge % 2 == 0)
{
fill(#0AA708);
rect(910, 50, 10, 10, 2);
}
else if(Charge % 2 == 1)
{
fill(#C92525);
rect(910, 50, 10, 10, 2);
}
}
if(dropDown == false)
{

stroke(10);
fill(#909090);
rect(950, 0, 50, 20, 0, 0, 0, 5);
fill(#FFFFFF);
text("Toggle", 955, 15);
}
/***** Drop Down Menu End *****/
if (menuHide == false)
{
fill(#909090); //text for bottom menu
rect(50, 775, 900, 150, 10);
rect(875, 755, 50, 20, 7, 7, 0 ,0);
fill(255);
text("Hide", 887, 770);
text("Attraction Constant :", 56, 810);
text(" * 10^", 220 , 810);
text(" = " + gravConst, 290, 810);
text("Repulsion Constant :", 56, 840);
text(" * 10^", 220 , 840);
text(" = " + elecConst, 290, 840);
}
if(menuHide)
{
stroke(0);
fill(#909090);
rect(950, 930, 50,20, 7, 0, 0, 0);
fill(255);
text("Show", 960, 945);

}
Circle();
}

void mouseClicked()
{
if(dropDown)
{
if((mouseX >= 910) && (mouseX <= 920) && (mouseY >= 10) && (mouseY <= 20))
//increments for toggles
{
Gravity = Gravity + 1;
}
if((mouseX >= 910) && (mouseX <= 920) && (mouseY >= 30) && (mouseY <= 40))
{
Wall = Wall + 1;
}
if((mouseX >= 910) && (mouseX <= 920) && (mouseY >= 50) && (mouseY <= 60))
{
Charge = Charge + 1;
}
}
if (menuHide == false)
{

if ((mouseX >= 875) && (mouseX <= 925) && (mouseY >= 755) && (mouseY <= 775)) //
hides the main menu
{
menuHide = true;
hide();

}
} else {
if ((mouseX >= 950) && (mouseX <= 1000) && (mouseY >= 925) && (mouseY <= 950))
{
menuHide = false;
hide();

}
}
}

void hide()
{
if (menuHide)
{

c.remove(qN); //Note about removing gui items: has to mirror the order they were added in
in order for the text to disappear.
c.remove(qE); //removes textfields
c.remove(gN);
c.remove(gE);

noStroke(); //draws over the menu


fill(#B4B4B4);
rect(50, 750, 950, 200, 10);
}
if (menuHide == false)
{

gE = new IFTextField("Grav Val", 170, 795, 50); //creates textfields


gN = new IFTextField("Grav Exp", 260, 795, 30);
qE = new IFTextField("Electric Exp", 260, 825, 30);
qN = new IFTextField("Electric Val", 170, 825, 50);

c.add(gE); //adds textfields to gui main


c.add(gN);
c.add(qE);
c.add(qN);

gE.addActionListener(this); //adds the action listeners


gN.addActionListener(this);
qE.addActionListener(this);
qN.addActionListener(this);

noStroke();
fill(#B4B4B4); //creates the square for the text boxes
rect(950, 930, 50, 20, 7, 0, 0, 0);
}

void actionPerformed(GUIEvent e)
{
if (e.getMessage().equals("Completed")) //everything in here simply gets the text field's
contents and transposes them into working order
{

if ((e.getSource() == gN) || (e.getSource() == gE))


{
typedNum = gE.getValue();
grvConst = float(split(typedNum, ' '));
gravConstN = grvConst[0];

typedNum = gN.getValue();
grvConst = float(split(typedNum, ' '));
gravConstE = grvConst[0];

gravConst = gravConstN * pow(10, gravConstE);

}
if ((e.getSource() == qN) || (e.getSource() == qE))
{
typedNum = qE.getValue();
elcConst = float(split(typedNum, ' '));
elecConstE = elcConst[0];

typedNum = qN.getValue();
elcConst = float(split(typedNum, ' '));
elecConstN = elcConst[0];

elecConst = elecConstN * pow(10, elecConstE);

}
if ((e.getSource() == mNo) || (e.getSource() == mEo) || (e.getSource() == rNo) ||
(e.getSource() == rEo) || (e.getSource() == cNo) || (e.getSource() == cEo) || (e.getSource() ==
v1o) || (e.getSource() == v2o))
{
typedNum = mNo.getValue();
Mass = float(split(typedNum, ' '));
MassE = Mass[0];

typedNum = mEo.getValue();
Mass = float(split(typedNum, ' '));
MassN = Mass[0];

Mass[0] = MassN * pow(10, MassE);

typedNum = rNo.getValue();
Radius = float(split(typedNum, ' '));
RadiusE = Radius[0];

typedNum = rEo.getValue();
Radius = float(split(typedNum, ' '));
RadiusN = Radius[0];

Radius[0] = RadiusN * pow(10, RadiusE);

typedNum = cNo.getValue();
Charges = float(split(typedNum, ' '));
ChargesE = Charges[0];

typedNum = cEo.getValue();
Charges = float(split(typedNum, ' '));
ChargesN = Charges[0];

Charges[0] = ChargesN * pow(10, ChargesE);

typedNum = v1o.getValue();
v1 = float(split(typedNum, ' '));

typedNum = v2o.getValue();
v2 = float(split(typedNum, ' '));

}
}

void keyTyped()
{
if((key == 'n') || (key == 'N'))
{
if(!(nPress))
{
//creates gui for object creation

nPress = true;

mEo = new IFTextField("Mass Val", 100, 40, 50);


mNo = new IFTextField("Mass Exp", 190, 40, 30);

rEo = new IFTextField("Radius Val", 100, 70, 50);


rNo = new IFTextField("Radius Exp", 190, 70, 30);

cEo = new IFTextField("Charge Val", 100, 100, 50);


cNo = new IFTextField("Charge Exp", 190, 100, 30);

v1o = new IFTextField("Velocity One", 100, 130, 50);


v2o = new IFTextField("Velocity Two", 190, 130, 50);

c.add(mNo);
c.add(mEo);
c.add(rNo);
c.add(rEo);
c.add(cNo);
c.add(cEo);
c.add(v1o);
c.add(v2o);

mNo.addActionListener(this);
mEo.addActionListener(this);
rNo.addActionListener(this);
rEo.addActionListener(this);
cNo.addActionListener(this);
cEo.addActionListener(this);
v1o.addActionListener(this);
v2o.addActionListener(this);

posX = mouseX; //sets starting location to mouse x and y


posY = mouseY;

}
else if(nPress)
{ //sets the variables and also gets rid of gui, creates the objects
enter = true;

nPress = false;

fill(#B4B4B4);
noStroke();
rect(10, 10, 255, 165, 5);

c.remove(v2o);
c.remove(v1o);
c.remove(cEo);
c.remove(cNo);
c.remove(rEo);
c.remove(rNo);
c.remove(mEo);
c.remove(mNo);

if(enter)
{
objCount++;
if(objCount == 1)
{
O1 = new object( Mass[0], Radius[0], Charges[0], v1[0], v2[0], posX, posY);
}
if(objCount == 2)
{
O2 = new object( Mass[0], Radius[0], Charges[0], v1[0], v2[0], posX, posY);
}
if(objCount == 3)
{
O3 = new object( Mass[0], Radius[0], Charges[0], v1[0], v2[0], posX, posY);
}

}
}
}
}

GUIController o;
IFTextField mE, mN;
class object //class to store objects variables
{

float Mass, Radius, Charge, vMag, vDir, xCoord, yCoord, vX, vY;

object(float m, float r, float c, float v1, float v2, float PosXo, float PosYo)
{

Mass = m;
Radius = r;
Charge = c;
vMag = v1;
vDir = v2;
xCoord = PosXo;
yCoord = PosYo;
vX = vMag * cos(radians(vDir));
vY = vMag * -sin(radians(vDir));

void Circle()
{

if(objCount >= 1) //creates objects and moves them


{

ellipseMode(CENTER);

fill(#ED6262);
ellipse(O1.xCoord, O1.yCoord, O1.Radius, O1.Radius);

moveX = O1.vX;
moveY = O1.vY;

O1.xCoord = O1.xCoord + moveX;


O1.yCoord = O1.yCoord + moveY;

if (objCount >= 2)
{
fill(#2445E0);
ellipse(O2.xCoord, O2.yCoord, O2.Radius, O2.Radius);

moveX = O2.vX;
moveY = O2.vY;

O2.xCoord = O2.xCoord + moveX;


O2.yCoord = O2.yCoord + moveY;
if(objCount >= 3)
{
fill(#46CB35);
ellipse(O3.xCoord, O3.yCoord, O3.Radius, O3.Radius);
moveX = O3.vX;
moveY = O3.vY;

O3.xCoord = O3.xCoord + moveX;


O3.yCoord = O3.yCoord + moveY;
}
}
}

if(objCount >= 1) //reflects objects off of walls


{
if(( O1.xCoord + O1.Radius/2 > 1000))
{
O1.vX = -O1.vX;
}
if((O1.xCoord - O1.Radius/2 < 0))
{
O1.vX = -O1.vX; //O1.xCoord = 1000 - O1.Radius/2;
}
if(( O1.yCoord + O1.Radius/2 > 950))
{
O1.vY = -O1.vY;//O1.yCoord = O1.Radius / 2;
}
if((O1.yCoord - O1.Radius/2 < 0))
{
O1.vY = -O1.vY;// O1.yCoord = 950 - O1.Radius / 2;
}
}
if(objCount >= 2)
{
if(( O2.xCoord + O2.Radius/2 > 1000))
{
O2.vX = -O2.vX;
}
if((O2.xCoord - O2.Radius/2 < 0))
{
O2.vX = -O2.vX; //O1.xCoord = 1000 - O1.Radius/2;
}
if(( O2.yCoord + O2.Radius/2 > 950))
{
O2.vY = -O2.vY;//O1.yCoord = O1.Radius / 2;
}
if((O2.yCoord - O2.Radius/2 < 0))
{
O2.vY = -O2.vY;// O1.yCoord = 950 - O1.Radius / 2;
}
}
if(objCount >= 3)
{

if(( O3.xCoord + O3.Radius/2 > 1000))


{
O3.vX = -O3.vX;
}
if((O3.xCoord - O3.Radius/2 < 0))
{
O3.vX = -O3.vX; //O1.xCoord = 1000 - O1.Radius/2;
}
if(( O3.yCoord + O3.Radius/2 > 950))
{
O3.vY = -O3.vY;//O1.yCoord = O1.Radius / 2;
}
if((O3.yCoord - O3.Radius/2 < 0))
{
O3.vY = -O3.vY;// O1.yCoord = 950 - O1.Radius / 2;
}
}

if(Gravity % 2 == 0)
{
if(objCount > 1) //calculates gravitational force for object 1
{

if(abs(O1.xCoord) > abs(O2.xCoord))


{
netGForceX2 = abs((O1.Mass * O2.Mass * gravConst) / (sqrt(sq(O2.xCoord - O1.xCoord) +
sq(O2.yCoord - O1.yCoord))) * cos(atan((O2.yCoord - O1.yCoord)/(O2.xCoord - O1.xCoord))));
}
if(abs(O1.xCoord) < abs(O2.xCoord))
{
netGForceX2= abs((O1.Mass * O2.Mass * gravConst) / (sqrt(sq(O1.xCoord - O2.xCoord) +
sq(O1.yCoord - O2.yCoord))) * cos(atan((O1.yCoord - O2.yCoord)/(O1.xCoord - O2.xCoord))));
}
if(abs(O1.yCoord) > abs(O2.yCoord))
{
netGForceY2 = abs((O1.Mass * O2.Mass * gravConst) / (sqrt(sq(O2.xCoord - O1.xCoord) +
sq(O2.yCoord - O1.yCoord))) * sin(atan((O2.yCoord - O1.yCoord)/(O2.xCoord - O1.xCoord))));
}
if(abs(O1.yCoord) < abs(O2.yCoord))
{
netGForceY2 = abs((O1.Mass * O2.Mass * gravConst) / (sqrt(sq(O1.xCoord - O2.xCoord) +
sq(O1.yCoord - O2.yCoord))) * sin(atan((O1.yCoord - O2.yCoord)/(O1.xCoord - O2.xCoord))));
}

if (objCount > 2)
{
if(abs(O1.xCoord) < abs(O3.xCoord))
{
netGForceX1 = abs(O1.Mass * O3.Mass * gravConst) / (sqrt(sq(O3.xCoord - O1.xCoord) +
sq(O3.yCoord - O1.yCoord))) * cos(atan((O3.yCoord - O1.yCoord)/(O3.xCoord - O1.xCoord)));
}
if(abs(O1.xCoord) > abs(O3.xCoord))
{
netGForceX1 = abs(O1.Mass * O3.Mass * gravConst) / (sqrt(sq(O3.xCoord - O1.xCoord) +
sq(O3.yCoord - O1.yCoord))) * cos(atan((O3.yCoord - O1.yCoord)/(O3.xCoord - O1.xCoord)));
}
if(abs(O1.yCoord) < abs(O3.yCoord))
{
netGForceY1 = abs(O1.Mass * O3.Mass * gravConst) / (sqrt(sq(O3.xCoord - O1.xCoord) +
sq(O3.yCoord - O1.yCoord))) * cos(atan((O3.yCoord - O1.yCoord)/(O3.xCoord - O1.xCoord)));
}
if(abs(O1.yCoord) > abs(O3.yCoord))
{
netGForceY1 = abs(O1.Mass * O3.Mass * gravConst) / (sqrt(sq(O3.xCoord - O1.xCoord) +
sq(O3.yCoord - O1.yCoord))) * cos(atan((O3.yCoord - O1.yCoord)/(O3.xCoord - O1.xCoord)));
}

if(objCount > 1); //moves object 1 with 1 other object


{
if(abs(O1.xCoord) < abs(O2.xCoord))
{
O1.vX = O1.vX + netGForceX2 / O1.Mass ;
}
if(abs(O1.xCoord) > abs(O2.xCoord))
{
O1.vX = O1.vX - netGForceX2 / O1.Mass ;
}
if(abs(O1.yCoord) < abs(O2.yCoord))
{
O1.vY = O1.vY + netGForceY2 / O1.Mass ;
}
if(abs(O1.yCoord) > abs(O2.yCoord))
{
O1.vY = O1.vY - netGForceY2 / O1.Mass ;
}
}
}
if(objCount > 2) //moves object 1 with 2 other objects
{
if(abs(O1.xCoord) < abs(O3.xCoord))
{
O1.vX = O1.vX + netGForceX1 / O1.Mass ;
}
if(abs(O1.xCoord) > abs(O3.xCoord))
{
O1.vX = O1.vX - netGForceX1 / O1.Mass ;
}
if(abs(O1.yCoord) < abs(O3.yCoord))
{
O1.vY = O1.vY + netGForceY1 / O1.Mass ;
}
if(abs(O1.yCoord) > abs(O3.yCoord))
{
O1.vY = O1.vY - netGForceY1 / O1.Mass ;
}
}

if(objCount > 1)
{

if (objCount > 2)
{
if(abs(O2.xCoord) < abs(O3.xCoord)) //calculates force for 2 objects
{

netGForceX1 = abs(O2.Mass * O3.Mass * gravConst) / (sqrt(sq(O3.xCoord - O2.xCoord) +


sq(O3.yCoord - O2.yCoord))) * cos(atan((O3.yCoord - O2.yCoord)/(O3.xCoord - O2.xCoord)));
}
if(abs(O2.xCoord) > abs(O3.xCoord))
{
netGForceX1 = abs(O2.Mass * O3.Mass * gravConst) / (sqrt(sq(O3.xCoord - O2.xCoord) +
sq(O3.yCoord - O2.yCoord))) * cos(atan((O3.yCoord - O2.yCoord)/(O3.xCoord - O2.xCoord)));
}
if(abs(O2.yCoord) < abs(O3.yCoord))
{
netGForceY1 = abs(O2.Mass * O3.Mass * gravConst) / (sqrt(sq(O3.xCoord - O1.xCoord) +
sq(O3.yCoord - O1.yCoord))) * cos(atan((O3.yCoord - O1.yCoord)/(O3.xCoord - O1.xCoord)));
}
if(abs(O2.yCoord) > abs(O3.yCoord))
{
netGForceY1 = abs(O2.Mass * O3.Mass * gravConst) / (sqrt(sq(O3.xCoord - O2.xCoord) +
sq(O3.yCoord - O2.yCoord))) * cos(atan((O3.yCoord - O2.yCoord)/(O3.xCoord - O2.xCoord)));
}

}
if(abs(O1.xCoord) < abs(O2.xCoord)) //moves object 2
{
O2.vX = O2.vX - netGForceX2 / O2.Mass ;
}
if(abs(O1.xCoord) > abs(O2.xCoord))
{
O2.vX = O2.vX + netGForceX2 / O2.Mass ;
}
if(abs(O1.yCoord) < abs(O2.yCoord))
{
O2.vY = O2.vY - netGForceY2 / O2.Mass ;
}
if(abs(O1.yCoord) > abs(O2.yCoord))
{
O2.vY = O2.vY + netGForceY2 / O2.Mass ;
}

if(objCount > 2)
{
if(abs(O2.xCoord) < abs(O3.xCoord))
{
O2.vX = O2.vX + netGForceX1 / O2.Mass ;
}
if(abs(O2.xCoord) > abs(O3.xCoord))
{
O2.vX = O2.vX - netGForceX1 / O2.Mass ;
}
if(abs(O2.yCoord) < abs(O3.yCoord))
{
O2.vY = O2.vY + netGForceY1 / O2.Mass ;
}
if(abs(O2.yCoord) > abs(O3.yCoord))
{
O2.vY = O2.vY - netGForceY1 / O2.Mass ;
}
}

}
if (objCount > 2)//calculates force for 3 objects
{
if(abs(O1.xCoord) < abs(O3.xCoord))
{
O3.vX = O3.vX - netGForceX1 / O3.Mass ;
}
if(abs(O1.xCoord) > abs(O3.xCoord))
{
O3.vX = O3.vX + netGForceX1 / O3.Mass ;
}
if(abs(O1.yCoord) < abs(O3.yCoord))
{
O3.vY = O3.vY - netGForceY1 / O3.Mass ;
}
if(abs(O1.yCoord) > abs(O3.yCoord))
{
O3.vY = O3.vY + netGForceY1 / O3.Mass ;
}
if(objCount > 2) {
if(abs(O2.xCoord) < abs(O3.xCoord))
{
O3.vX = O3.vX - netGForceX2 / O3.Mass ;
}
if(abs(O2.xCoord) > abs(O3.xCoord))
{
O3.vX = O3.vX + netGForceX2 / O3.Mass ;
}
if(abs(O2.yCoord) < abs(O3.yCoord))
{
O3.vY = O3.vY - netGForceY2 / O3.Mass ;
}
if(abs(O2.yCoord) > abs(O3.yCoord))
{
O3.vY = O3.vY + netGForceY2 / O3.Mass ;
}
}
}
}
/****** Electro statics start ******/
if(Charge % 2 == 0)
{
if(objCount > 1) //calculates force for 1 objects
{

if(abs(O1.xCoord) > abs(O2.xCoord))


{
netEForceX2 = abs((O1.Mass * O2.Mass * elecConst) / (sqrt(sq(O2.xCoord - O1.xCoord) +
sq(O2.yCoord - O1.yCoord))) * cos(atan((O2.yCoord - O1.yCoord)/(O2.xCoord - O1.xCoord))));
}
if(abs(O1.xCoord) < abs(O2.xCoord))
{
netEForceX2= abs((O1.Mass * O2.Mass * elecConst) / (sqrt(sq(O1.xCoord - O2.xCoord) +
sq(O1.yCoord - O2.yCoord))) * cos(atan((O1.yCoord - O2.yCoord)/(O1.xCoord - O2.xCoord))));
}
if(abs(O1.yCoord) > abs(O2.yCoord))
{
netEForceY2 = abs((O1.Mass * O2.Mass * elecConst) / (sqrt(sq(O2.xCoord - O1.xCoord) +
sq(O2.yCoord - O1.yCoord))) * sin(atan((O2.yCoord - O1.yCoord)/(O2.xCoord - O1.xCoord))));
}
if(abs(O1.yCoord) < abs(O2.yCoord))
{
netEForceY2 = abs((O1.Mass * O2.Mass * elecConst) / (sqrt(sq(O1.xCoord - O2.xCoord) +
sq(O1.yCoord - O2.yCoord))) * sin(atan((O1.yCoord - O2.yCoord)/(O1.xCoord - O2.xCoord))));
}

if (objCount > 2)
{
if(abs(O1.xCoord) < abs(O3.xCoord))
{
netEForceX1 = abs(O1.Mass * O3.Mass * elecConst) / (sqrt(sq(O3.xCoord - O1.xCoord) +
sq(O3.yCoord - O1.yCoord))) * cos(atan((O3.yCoord - O1.yCoord)/(O3.xCoord - O1.xCoord)));
}
if(abs(O1.xCoord) > abs(O3.xCoord))
{
netEForceX1 = abs(O1.Mass * O3.Mass * elecConst) / (sqrt(sq(O3.xCoord - O1.xCoord) +
sq(O3.yCoord - O1.yCoord))) * cos(atan((O3.yCoord - O1.yCoord)/(O3.xCoord - O1.xCoord)));
}
if(abs(O1.yCoord) < abs(O3.yCoord))
{
netEForceY1 = abs(O1.Mass * O3.Mass * elecConst) / (sqrt(sq(O3.xCoord - O1.xCoord) +
sq(O3.yCoord - O1.yCoord))) * cos(atan((O3.yCoord - O1.yCoord)/(O3.xCoord - O1.xCoord)));
}
if(abs(O1.yCoord) > abs(O3.yCoord))
{
netEForceY1 = abs(O1.Mass * O3.Mass * elecConst) / (sqrt(sq(O3.xCoord - O1.xCoord) +
sq(O3.yCoord - O1.yCoord))) * cos(atan((O3.yCoord - O1.yCoord)/(O3.xCoord - O1.xCoord)));
}

if(objCount > 1);


{
if(abs(O1.xCoord) < abs(O2.xCoord))
{
O1.vX = O1.vX - netEForceX2 / O1.Mass ;
}
if(abs(O1.xCoord) > abs(O2.xCoord))
{
O1.vX = O1.vX + netEForceX2 / O1.Mass ;
}
if(abs(O1.yCoord) < abs(O2.yCoord))
{
O1.vY = O1.vY - netEForceY2 / O1.Mass ;
}
if(abs(O1.yCoord) > abs(O2.yCoord))
{
O1.vY = O1.vY + netEForceY2 / O1.Mass ;
}
}
}
if(objCount > 2)
{
if(abs(O1.xCoord) < abs(O3.xCoord))
{
O1.vX = O1.vX - netEForceX1 / O1.Mass ;
}
if(abs(O1.xCoord) > abs(O3.xCoord))
{
O1.vX = O1.vX + netEForceX1 / O1.Mass ;
}
if(abs(O1.yCoord) < abs(O3.yCoord))
{
O1.vY = O1.vY - netEForceY1 / O1.Mass ;
}
if(abs(O1.yCoord) > abs(O3.yCoord))
{
O1.vY = O1.vY + netEForceY1 / O1.Mass ;
}
}

if(objCount > 1)
{

if (objCount > 2)//calculates force for 2 objects


{
if(abs(O2.xCoord) < abs(O3.xCoord))
{

netEForceX1 = abs(O2.Mass * O3.Mass * elecConst) / (sqrt(sq(O3.xCoord - O2.xCoord) +


sq(O3.yCoord - O2.yCoord))) * cos(atan((O3.yCoord - O2.yCoord)/(O3.xCoord - O2.xCoord)));

}
if(abs(O2.xCoord) > abs(O3.xCoord))
{
netEForceX1 = abs(O2.Mass * O3.Mass * elecConst) / (sqrt(sq(O3.xCoord - O2.xCoord) +
sq(O3.yCoord - O2.yCoord))) * cos(atan((O3.yCoord - O2.yCoord)/(O3.xCoord - O2.xCoord)));
}
if(abs(O2.yCoord) < abs(O3.yCoord))
{
netEForceY1 = abs(O2.Mass * O3.Mass * elecConst) / (sqrt(sq(O3.xCoord - O1.xCoord) +
sq(O3.yCoord - O1.yCoord))) * cos(atan((O3.yCoord - O1.yCoord)/(O3.xCoord - O1.xCoord)));
}
if(abs(O2.yCoord) > abs(O3.yCoord))
{
netEForceY1 = abs(O2.Mass * O3.Mass * elecConst) / (sqrt(sq(O3.xCoord - O2.xCoord) +
sq(O3.yCoord - O2.yCoord))) * cos(atan((O3.yCoord - O2.yCoord)/(O3.xCoord - O2.xCoord)));
}

}
if(abs(O1.xCoord) < abs(O2.xCoord))
{
O2.vX = O2.vX + netEForceX2 / O2.Mass ;
}
if(abs(O1.xCoord) > abs(O2.xCoord))
{
O2.vX = O2.vX - netEForceX2 / O2.Mass ;
}
if(abs(O1.yCoord) < abs(O2.yCoord))
{
O2.vY = O2.vY + netEForceY2 / O2.Mass ;
}
if(abs(O1.yCoord) > abs(O2.yCoord))
{
O2.vY = O2.vY - netEForceY2 / O2.Mass ;
}

if(objCount > 2)
{
if(abs(O2.xCoord) < abs(O3.xCoord))
{
O2.vX = O2.vX - netEForceX1 / O2.Mass ;
}
if(abs(O2.xCoord) > abs(O3.xCoord))
{
O2.vX = O2.vX + netEForceX1 / O2.Mass ;
}
if(abs(O2.yCoord) < abs(O3.yCoord))
{
O2.vY = O2.vY - netEForceY1 / O2.Mass ;
}
if(abs(O2.yCoord) > abs(O3.yCoord))
{
O2.vY = O2.vY + netEForceY1 / O2.Mass ;
}
}
}
if (objCount > 2)//calculates force for 3 objects
{
if(abs(O1.xCoord) < abs(O3.xCoord))
{
O3.vX = O3.vX + netEForceX1 / O3.Mass ;
}
if(abs(O1.xCoord) > abs(O3.xCoord))
{
O3.vX = O3.vX - netEForceX1 / O3.Mass ;
}
if(abs(O1.yCoord) < abs(O3.yCoord))
{
O3.vY = O3.vY + netEForceY1 / O3.Mass ;
}
if(abs(O1.yCoord) > abs(O3.yCoord))
{
O3.vY = O3.vY - netEForceY1 / O3.Mass ;
}
if(objCount > 2) {
if(abs(O2.xCoord) < abs(O3.xCoord))
{
O3.vX = O3.vX + netEForceX2 / O3.Mass ;
}
if(abs(O2.xCoord) > abs(O3.xCoord))
{
O3.vX = O3.vX - netEForceX2 / O3.Mass ;
}
if(abs(O2.yCoord) < abs(O3.yCoord))
{
O3.vY = O3.vY + netEForceY2 / O3.Mass ;
}
if(abs(O2.yCoord) > abs(O3.yCoord))
{
O3.vY = O3.vY - netEForceY2 / O3.Mass ;
}
}
}

You might also like