Mikseri on musiikkiyhteisö,
jossa voit kuunnella, ladata ja arvostella suomalaista musiikkia,
lisätä rajattomasti biisejä, luoda oman artistisivun, kerätä arvosteluja ja faneja

Ladataan

Vastaa Aloita uusi keskustelu

 
Kirjoittaja koodinpätkä


Twight
5 viestiä

#1 kirjoitettu 25.02.2014 13:23

mymp = massa
ymp1x= ympyrän 1 x-koordinaatti
vymp2y = ympyrän 2 y-suuntainen nopeus



10 loop (
(ympyrät liikkuu -koodi tähän)
JOS (|ymp1x-ymp2x|^2 + |ymp1y-ymp2y|^2)^0,5 = ymp1r+ymp2r NIIN SILLOIN GOTO 20
)

20
a = arctan(|ymp1y-ymp2y| / |ymp1x-ymp2x|)
JOS ymp1x < ymp2x JA ymp1y < ymp2y NIIN SILLOIN dirx = -1 JA diry = -1
JOS ymp1x > ymp2x JA ymp1y < ymp2y NIIN SILLOIN dirx = 1 JA diry = -1
JOS ymp1x < ymp2x JA ymp1y > ymp2y NIIN SILLOIN dirx = -1 JA diry = 1
JOS ymp1x > ymp2x JA ymp1y > ymp2y NIIN SILLOIN dirx = 1 JA diry = 1

vymp1x = vymp1x + dirx*((mymp2*vymp2x-mymp1*vymp1x)*cos(a) / mymp1)
vymp1y = vymp1y + diry*((mymp2*vymp2y-mymp1*vymp1y)*cos(a) / mymp1)

vymp2x = vymp2x - dirx*((mymp1*vymp1x-mymp2*vymp2x)*cos(a) / mymp2)
vymp2y = vymp2y - diry*((mymp1*vymp1y-mymp2*vymp2y)*cos(a) / mymp2)

GOTO 10

^ Vastaa Lainaa


veezay
3 viestiä
Luottokäyttäjä

#2 kirjoitettu 25.02.2014 14:38 Muok:25.02.2014 14:41

if(d <= r1 + r2)
{
double vx1 = c1.getXdir(), vy1 = c1.getYdir();
double vx2 = c2.getXdir(), vy2 = c2.getYdir();
double mass1 = c1.getMass(), mass2 = c2.getMass();

// velocity in the direction of (dx, dy)
double vp1 = (vx1*dx + vy1*dy) / d;
double vp2 = (vx2*dx + vy2*dy) / d;

// collision should have happened dt before
double dt = (r1 + r2 - d) / (vp1 - vp2);

// move the circles backward in time
x1 -= vx1 * dt;
y1 -= vy1 * dt;
x2 -= vx2 * dt;
y2 -= vy2 * dt;

// new collision calculations at impact
dx = x2 - x1;
dy = y2 - y1;
d = Math.sqrt(dx*dx + dy*dy);

// unit vector in the direction of the collision
double ax = dx/d;
double ay = dy/d;

// projection of the velocities in these axes
double va1 = vx1*ax + vy1*ay;
double vb1 = -vx1*ay + vy1*ax;
double va2 = vx2*ax + vy2*ay;
double vb2 = -vx2*ay + vy2*ax;

// calculate new velocity after collision
double ed = 1;
double vaP1 = va1 + (1 + ed) * (va2 - va1) / (1 + mass1/mass2);
double vaP2 = va2 + (1 + ed) * (va1 - va2) / (1 + mass2/mass1);

// undo projections
vx1 = vaP1*ax - vb1*ay;
vy1 = vaP1*ay + vb1*ax;
vx2 = vaP2*ax - vb2*ay;
vy2 = vaP2*ay + vb2*ax;

// move time dt forward
x1 += vx1 * dt;
y1 += vy1 * dt;
x2 += vx2 * dt;
y2 += vy2 * dt;

// update locations and velocities
if (!Double.isNaN(x1)) c1.setX(x1);
if (!Double.isNaN(y1)) c1.setY(y1);
if (!Double.isNaN(x2)) c2.setX(x2);
if (!Double.isNaN(y2)) c2.setY(y2);
if (!Double.isNaN(vx1)) c1.setXdir(vx1);
if (!Double.isNaN(vy1)) c1.setYdir(vy1);
if (!Double.isNaN(vx2)) c2.setXdir(vx2);
if (!Double.isNaN(vy2)) c2.setYdir(vy2);

return true;
}



i'll just leave this here.

^ Vastaa Lainaa


accent

#3 kirjoitettu 25.02.2014 16:01

10 PRINT "menkkä töihi"
20 GOTO 10
RUN

^ Vastaa Lainaa


Twight
5 viestiä

#4 kirjoitettu 25.02.2014 20:24

en, ville, osaa tuota koodia

^ Vastaa Lainaa

Vastaa Aloita uusi keskustelu