warum kein gitter?



  • hi!
    ich hab mir ein kleine partikelsystem gebastelt und hab folgende frage:

    for(int l = 0; l < particleGrid[tmp.gridPos.x + i][tmp.gridPos.y + j].size(); l++)
    							{
    								particle target = particles.at(particleGrid[tmp.gridPos.x + i][tmp.gridPos.y + j].at(l));
    								double d = pDist(tmp, target);
    								if(d > 0 && d < 40)
    								{
    									DblPoint tv = pNVektor(tmp, target);
    									if(d > 20)
    									{
    										tmp.xVel += tv.x*d/300;
    										tmp.yVel += tv.y*d/300;
    									}
    									else
    									{
    										tmp.xVel += tv.x*(20-d)/-300;
    										tmp.yVel += tv.y*(20-d)/-300;
    									}
    									//target.xVel -= tv.x*d/100;
    									//target.yVel -= tv.y*d/100;
    								}
    							}
    

    warum ordnen sich die partikel hier in quadraten an und nicht in einem gitter, welches aus dreiecken besteht?

    ich guck mir die entfernung an

    double pDist(particle p1, particle p2)
    {
    	POINT dist;
    	dist.x = p1.x - p2.x;
    	dist.y = p1.y - p2.y;
    	return sqrt(dist.x*dist.x + dist.y*dist.y);
    }
    

    und schau ob sie zwischen 20 und 40 liegt.
    wenn ja, dann ziehen sich die partikel an

    DblPoint pNVektor(particle from, particle to)
    {
    	POINT dist;
    	DblPoint v;
    	dist.x = to.x - from.x;
    	dist.y = to.y - from.y;
    	if(pos(dist.x) > pos(dist.y))
    	{
    		v.y = dist.y / dist.x;
    		v.x = dist.x/pos(dist.x);
    	}
    	else
    	{
    		v.x = dist.x / dist.y;
    		v.y = dist.y/pos(dist.y);
    	}
    	return v;
    }
    

    wenn die entfernung kleiner als 20 ist, dann stossen sie sich ab(kraft linear zu 20-distanz)

    jetzt müssten die partikel doch eigentlich versuchen zu allen umliegenden partikeln eine distanz von 20 zu haben oder? sie ordnen sich aber perfekt in kleinen quadraten an 😞

    woran liegt das?
    wenn ihr mehr code sehen wollt, sagt bescheid. danke


Anmelden zum Antworten