[c++]dodawanie wektorów

0

witam nie jestem profesjonalnym programista - od razu mowie :P

dzis napisalem sobie taki program for fun( z wieloma błędami ; P), z kolizjami, zderzaja sie ze soba kuleczki, a w zasadzie pilki, lecz borykam sie z problemem, dodawania wektorów, chodzi o to ze
gdy dodam do siebie 2 zmienne typu double wychodza kosmiczne rzeczy
podam na przykladzie

VX1 = VX1 + VX2;

zapodam cały program

#include <allegro.h>
#include <math.h>

using namespace std;
BITMAP * bitBuffer;
BITMAP * path;

const int RX  = 1024 ;
const int RY  = 768;
const int lo =25;

class kula
{
      
       public:
       double X;
       double Y;
       double VX;
       double VY;
       int color;
       double Acc;
       double Angle;
       int crashed;
       double A;
       
       void Create(double _X, double _Y, double _VX, double _VY, int _color)
       {
         X = _X;
         Y = _Y;
         VX = _VX;
         VY = _VY;
         color = _color;
         Acc = 0;
         crashed = 0;
         Angle = rand() % 360;
         A= ((rand() % 720)-360)/100;
       }
       
};




#include <cFps.h>


kula * o = new kula[lo];

void init();
void deinit();

int main() {

	init();
	cFps FPS;
	srand ((int) time(NULL));
    bitBuffer = create_bitmap(RX, RY);
        BITMAP * pil = load_bitmap("pil.bmp",0);
    path = create_bitmap(RX, RY);

    
                          for(int i = 0; i < lo; i++)
                          {
                                  o[i].Create(10+rand() % 1024-50, 10+rand() % 768-50, 
                                 // o[i].Create(cos(3.14 * i/180)*100+320, sin(3.14 * i/180)*100+240,
                                 (double)(rand() % 400-200)/100,(double)(rand() %  400-200)/100,
                                                                  
                                  makecol(rand() % 255, rand() % 255,rand() % 255));
         
                          }
                          
	while (!key[KEY_ESC]) {
          

                          FPS.vCount(true, 999, 10, 10, makecol(255, 255, 255));
                          
                          for(int i = 0; i < lo; i++)
                          {
                          
                                  //circlefill(bitBuffer, o[i].X, o[i].Y, 30, o[i].color);
                                  //circle(bitBuffer, o[i].X, o[i].Y, 30, makecol(255, 255, 255));
                                  rotate_sprite(bitBuffer, pil, o[i].X, o[i].Y, itofix(o[i].Angle));
                                  //putpixel(path, o[i].X,o[i].Y, o[i].color);   
                                  o[i].X += o[i].VX;
                                  o[i].Y += o[i].VY;
                                  o[i].Angle += o[i].A;  
                                  if((o[i].X >= RX-15) || (o[i].X <= 0+15))o[i].VX = -o[i].VX;
                                  if((o[i].Y >= RY-15) || (o[i].Y <= 0+15))o[i].VY = -o[i].VY;                                  
             
                                
                                   if(o[i].Y < RY)o[i].VY+=o[i].Acc;   
                                                                   
                                            
                                  for(int x = 0; i < lo; x++)
                                  {
                                         
                                          if(x == i) break;
                                          double dx = o[i].X -  o[x].X;
                                          double dy = o[i].Y -  o[x].Y;
                                          if (hypotf(dx, dy) < 30)      
                                          {
                                                         double tmpx = o[i].VX;
                                                         double tmpy = o[i].VY;
                                                         double tmpa = o[i].A;
                                                         o[i].VX += o[x].VX;//TU POJAWIA SIE PROBLEM
                                                         o[i].VY += o[x].VY; //ZMIENNE PRZYJMUJA BLYSKAWICZNIE KOSMICZNE WARTOSCI
                                                         o[i].A  = o[x].A;   //    POMOCY :PP
                                                         o[x].VX+ = tmpx;//
                                                         o[x].VY += tmpy;  //
                                                         o[x].A  = tmpa;
                                                          
      
                                          }                            
                                  }     
                                  
                          }
                          
                          blit(bitBuffer, screen, 0, 0, 0, 0, RX, RY);
                          clear_bitmap(bitBuffer);
		
	}

	deinit();
	return 0;
}
END_OF_MAIN()

void init() {
	int depth, res;
	allegro_init();
	depth = desktop_color_depth();
	if (depth == 0) depth = 16;
	set_color_depth(depth);
	res = set_gfx_mode(GFX_DIRECTX_ACCEL, RX, RY, 0, 0);
	if (res != 0) {
		allegro_message(allegro_error);
		exit(-1);
	}

	install_timer();
	install_keyboard();
	install_mouse();
	/* add other initializations here */
}

void deinit() {
	clear_keybuf();
	/* add other deinitializations here */
}
0

for(int x = 0; i < lo; x++)
{
if(x == i) break;
//...
}
Coś tu nie tak jest z indeksami 'x' oraz 'i'. Wartość 'i' się nie zmienia, a w warunku masz 'i < lo' ?

Samo dodawanie jest ok. Odpal program w trybie debugowania i sprawdź cp jest nie tak, gdzie są złe wartości.

Poza tym warto zdefiniować sobie klasę wektor z przeładowanym operatorm sumy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1