orbiting a point February 19, 2010 05:49AM | Registered: 15 years ago Posts: 444 |
class bullet{ public: bullet(float,float,float,float,float,float); float getX() {return X;} void setX(float i) {X=i;} float getY() {return Y;} void setY(float i){Y=i;} float getSpeed(){return speed;} void setSpeed(float i) {speed=i;} float getAngle() {return angle;} void setangle(float i) {angle=i;} float getAccel() {return accel;} void setAccel(float i) {accel=i;} float getAccelAngle() {return accelAng;} void setAccelAngle(float i) {accelAng=i;} void setColor(GXColor i) {bulletQuad.SetFillColor(i);} void addNewSpeedVector(float,float); void addNewAccelVector(float,float); void updatePos(); Quad bulletQuad; //Private private: float X; float Y; float speed; float angle; float accel; float accelAng; }; bullet::bullet(float initX,float initY,float initspeed,float initangle,float initaccel,float initaccelAng){ X=initX; Y=initY; speed=initspeed; angle=initangle; accel=initaccel; accelAng=initaccelAng; bulletQuad.SetWidth(5); bulletQuad.SetHeight(5); bulletQuad.SetBorder(false); bulletQuad.SetFillColor((GXColor){0xff,0,0,0xff}); } void bullet::updatePos(){ float speedX; float speedY; float accelX; float accelY; accelX = accel*cos(accelAng); accelY = accel*sin(accelAng); speedX = speed*cos(angle); speedY = speed*sin(angle); speedX+= accelX; speedY+= accelY; speed = sqrt(speedX*speedX+speedY*speedY); angle = asin(speedY/speed); if(speedX<0) angle=(M_PI/2+(M_PI/2-angle)); X+=speed*(cos(angle)); Y+=speed*(sin(angle+M_PI)); bulletQuad.SetPosition(X,Y); } void bullet::addNewSpeedVector(float mps,float angfrom3){ float X1; float Y1; float X2; float Y2; X1 = speed*cos(angle); Y1 = speed*sin(angle); X2 = mps*cos(angfrom3); Y2 = mps*sin(angfrom3); X1 += X2; Y1 += Y2; speed = sqrt(X1*X1+Y1*Y1); angle = tan(X1/Y1); } void bullet::addNewAccelVector(float aps,float angfrom3){ float X1; float Y1; float X2; float Y2; X1 = accel*cos(accelAng); Y1 = accel*sin(accelAng); X2 = aps*cos(angfrom3); Y2 = aps*sin(angfrom3); X1 += X2; Y1 += Y2; accel = sqrt(X1*X1+Y1*Y1); accelAng = asin(Y1/accel); if(X1<0) accelAng=(M_PI/2+(M_PI/2-accelAng)); }and here is the code for determining the value of the next acceleration vector to add:
temp = M_PI+asin((0-(bullet1.getY()-240))/100); bullet1.addNewAccelVector(.002,temp);right now the new vector I'm adding is going twords the center of the circle(the center of the screen) from the ball.
Re: orbiting a point February 19, 2010 07:12AM | Admin Registered: 15 years ago Posts: 5,132 |
Re: orbiting a point February 20, 2010 12:08AM | Registered: 15 years ago Posts: 444 |
Re: orbiting a point February 20, 2010 08:50PM | Registered: 15 years ago Posts: 444 |
temp = M_PI+asin((0-(bullet1.getY()-240))/100); temp2 = (temp2*temp2)/100; bullet1.addNewAccelVector(temp2,temp);If my understanding of Centripetal Acceleration is corect then I need to add a new vector that is pointing twords the center of the circle with an acceleration of (velocity2)/radius. Thanks
temp = M_PI+asin((0-(bullet1.getY()-240))/100); if(bullet1.getX()<320){ temp = M_PI/2+(M_PI/2-temp); } temp2 = (bullet1.getSpeed()*bullet1.getSpeed())/calcDistance(bullet1.getX(),bullet1.getY(),320,240); bullet1.addNewAccelVector(temp2,temp);And here is my calcDistance function:
float inline calcDistance(int x1,int y1,int x2,int y2){ return (float)sqrt(pow((double)(x2-x1),(double)2)+pow((double)(y2-y1),(double)2)); }The ball also disapears if the ball goes too far down, but according to the formula, the acceleration should be pointed up.