| |||||||
Du magst keine Werbung? Wir auch nicht!
Einfach registrieren und die Werbung ist weg. Diese Nachricht sehen nur nicht registrierte Nutzer.
![]() |
| | LinkBack | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| Neuer User Registriert seit: Nov 2003
Beiträge: 63
| Physikalisch: Coulombkraft
Hi, im Rahmen einer Facharbeit über das Thema Kernfusion muss ich eine Simulation programmieren. In dieser sollen sich zwei Protonen nähern. Nun versuche ich die Abstoßung zu simulieren. Es trat gleich ein Fehler auf, worauf hin ich eine sehr abgespeckte Version programmiert habe, bei der der Fehler immernoch auftrag: Code: _root.createEmptyMovieClip("geschoss", 1);
_root.createEmptyMovieClip("ziel", 2);
with (_root.geschoss)
{
beginFill(0xFF0000, 100);
lineStyle(0, 0x000000, 100);
moveTo(-5, -5);
lineTo(5, -5);
lineTo(5, 5);
lineTo(-5, 5);
lineTo(-5, -5);
endFill();
_x = 50;
_y = 50;
}
with (_root.ziel)
{
beginFill(0x00FF00, 100);
lineStyle(0, 0x000000, 100);
moveTo(-5, -5);
lineTo(5, -5);
lineTo(5, 5);
lineTo(-5, 5);
lineTo(-5, -5);
endFill();
_x = 550;
_y = 200;
}
offsetX = 50;
offsetY = 50;
vx = 3;
vy = 1;
t = 0;
_root.onEnterFrame = function()
{
dx = ziel._x - geschoss._x;
dy = ziel._y - geschoss._y;
alpha = Math.atan(dy/dx);
r = Math.sqrt(dx*dx + dy*dy);
F = 1/(r*r);
Fx = (Math.cos(alpha)) * F;
Fy = (Math.sin(alpha)) * F;
geschoss._x = offsetX + vx*t - 0.5*Fx/0.001 * t*t;
geschoss._y = offsetY + vy*t - 0.5*Fy/0.001 * t*t;
t++;
} Zuerst wird der horizontale und der vertikale Abstand zwischen den Protonen errechnet (dx und dy). Damit wird der Winkel alpha mittels arcus-tangens und die Hypothenuse r des rechtwinkligen Dreiecks mittels Pythagoras errechnet. Die Kraft F berechnet sich durch Epsilon*Q1*Q2/r², das hab ich nun mal abgespeckt und durch 1/(r*r) ersetzt. Die vertikale und horizontale Komponente der Kraft errechnet sich nun mit sin und cos des Winkels. Also ergibt sich die neue x und y-koordinate des geschosses durch die Ausgangsposition offsetX/Y plus eine gleichförmige Bewegung durch die Anfangsgeschwindigkeit vx/vy minus einer beschleunigten Bewegung, die sich durch 1/2 at² = 1/2 F/m * t² errechnen lässt. Ich hoffe soweit ist alles verständlich und korrekt. Allerdings wird jeder sehen, dass wenn man das ganze testet irgendwas verrückt spielt, sobald das geschoss vollständig abgebremst wurde und umkehren soll. Nun frage ich mich woran das liegt. Irgendwie scheint ein Vorzeichen ständig umgedreht zu werden, nur weiß ich nicht welches. Ich wüsste nicht, wo ich irgend ein Vorzeichen falsch gesetzt haben soll. Liegt es möglicherweise an den Datentypen Flashs, dass es vielleicht irgendwo einen Bufferoverflow gibt o.ä.? Wäre für jede Hilfe dankbar, MfG, Herr-Vorragend |
| | |
| | #4 (permalink) |
| Level up Registriert seit: Jun 2001 Ort: Bocholt
Beiträge: 4.155
| Positionierungen werden gerundet
hmm..., das scheint noch nicht die ganze Lösung des Problems zu sein, aber es geht dann schon mal besser: Man kann einen mc nur auf 0.05 pixel genau positionieren also kann mc._x=0 sein oder mc._x=0.05 aber nix dazwischen, und weil Du mit so kleinen Positionsveränderungen rechnest ergibt sich dadurch natürlich ein recht gravierender Rundungsfehler. So geht schon mal besser: PHP-Code: Gruß Alois
__________________ -Spuckt mir auf den Stuhl, ich will im Grünen sitzen- |
| | |
![]() |
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
| |