Professional Documents
Culture Documents
Final Comsci Code
Final Comsci Code
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
object O1, O2, O3, O4, O5, O6, O7, O8, O9, O10; //objects 4-10 are not used
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);
void draw()
{
//println(Gravity, Charge, Wall);
noStroke(); //redraws backgrounds
fill(#B4B4B4);
rect(0,0,1000,950);
int downCheck = 0;
stroke(10);
fill(#909090);
fill(255);
text("Mass", 20, 55);
text("* 10^", 155, 55);
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();
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
{
typedNum = gN.getValue();
grvConst = float(split(typedNum, ' '));
gravConstE = grvConst[0];
}
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];
}
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];
typedNum = rNo.getValue();
Radius = float(split(typedNum, ' '));
RadiusE = Radius[0];
typedNum = rEo.getValue();
Radius = float(split(typedNum, ' '));
RadiusN = Radius[0];
typedNum = cNo.getValue();
Charges = float(split(typedNum, ' '));
ChargesE = Charges[0];
typedNum = cEo.getValue();
Charges = float(split(typedNum, ' '));
ChargesN = Charges[0];
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;
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);
}
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()
{
ellipseMode(CENTER);
fill(#ED6262);
ellipse(O1.xCoord, O1.yCoord, O1.Radius, O1.Radius);
moveX = O1.vX;
moveY = O1.vY;
if (objCount >= 2)
{
fill(#2445E0);
ellipse(O2.xCoord, O2.yCoord, O2.Radius, O2.Radius);
moveX = O2.vX;
moveY = O2.vY;
if(Gravity % 2 == 0)
{
if(objCount > 1) //calculates gravitational force for object 1
{
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)
{
if (objCount > 2)
{
if(abs(O2.xCoord) < abs(O3.xCoord)) //calculates force for 2 objects
{
}
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 (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(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 ;
}
}
}