kreis->abprallwinkel?



  • also ich hab 2 kreise:
    k1._width = 40;
    k2._width = 30;
    k2 ist fest verankert,
    k1 ist beweglich
    wenn nun k1 auf k2 trifft(z.B. xspeed = 4; yspeed = 2;), wie berechne ich dann die neuen werte für xspeed und yspeed die durch einen zusammenprall entstehen?



  • Dazu musst du den Berührungspunkt berechnen. Wenn du den hast, kannst du die Tangente an diesem Punkt berechnen und dann kannst du einfach Einfallswinkel=Ausfallswinkel ansetzen und du hast deine neuen x und y-Werte.
    Das ganze kann man sicher noch optimieren, aber so gehts jedenfalls.



  • ja, dass hab ich mir auch schon überlegt, ich weiss aber leider nicht wie man das macht...
    hab das ganze mal ohne grossartige formeln gemacht und es klappt auch einigermaßen,ist aber bestimmt sauungenau
    (Flash - actionscript)

    tballx =  ballxs+ball._x;
    	tbally =  ballys+ball._y;
    
    	txdist = tballx-btarget._x;
    	tydist = tbally-btarget._y;
    	tdist = Math.sqrt(txdist*txdist+tydist*tydist);
    	if(tdist<=(ball._width/2+btarget._width/2))
    	{
    		//x----
    		ydval = tydist/(ball._width/2+btarget._width/2);
    		oyval = ydval;
    		ydval = Math.sqrt(ydval*ydval);
    
    		if(ydval < 0.5)
    		{
    			ydval = -1+ydval;
    			ydval = (ydval+0.5)*2
    		}
    		else
    		{
    			ydval = (ydval-0.5)*2
    		}
    
    		if(oyval >0.5)
    		{
    			oyval = 1-oyval;
    		}
    		if(oyval < -0.5)
    		{
    			oyval = -1-oyval;
    		}
    
    		oyval *= 2;
    		tballxs = ydval;
    
    		oys = Math.sqrt(ballxs*ballxs)*oyval;
    
    		//y
    		xdval = txdist/(ball._width/2+btarget._width/2);
    		oxval = xdval;
    		xdval = Math.sqrt(xdval*xdval);
    
    		if(xdval < 0.5)
    		{
    			xdval = -1+xdval;
    			xdval = (xdval+0.5)*2
    		}
    		else
    		{
    			xdval = (xdval-0.5)*2
    		}
    		if(oxval >0.5)
    		{
    			oxval = 1-oxval;
    		}
    		if(oxval < -0.5)
    		{
    			oxval = -1-oxval;
    		}
    		oxval *= 2;
    		tballys = xdval;
    		oxs = Math.sqrt(ballys*ballys)*oxval;
    		allspeed = Math.sqrt(ballxs*ballxs+ballys*ballys);
    		btarget.hp -= allspeed;
    		trace(btarget.hp);
    		ballxs *= tballxs;
    		ballys *= tballys;
    		ballxs += oxs;
    		ballys += oys;
    

Anmelden zum Antworten