| Autor |
Beitrag |
fritierte
      
Beiträge: 58
|
Verfasst: Do 29.07.04 15:41
ich hab vor einiger zeit versucht, einen punkt von einem anderen punkt anziehen zu lassen. es hat im endeffekt nur 2 tage gedauert, nur sind die kräfte die auf den punkt einwirken nicht korrekt
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72:
| unit Unit1;
interface
uses Windows, math, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls;
type TForm1 = class(TForm) Timer1: TTimer; Button1: TButton; procedure Timer1Timer(Sender: TObject); procedure Button1Click(Sender: TObject); private public end;
var Form1: TForm1; geschw,speed,x,y:array[1..2] of single; alpha,xdelta,ydelta,kraft,s:single; implementation
{$R *.DFM} procedure sammeln; begin xdelta:=x[1]-x[2]; ydelta:=y[1]-y[2]; s:=sqrt(sqr(xdelta)+sqr(ydelta)); if ydelta<>0 then alpha:=arcsin(xdelta/s) else alpha:=arccos(xdelta/s); speed[1]:=speed[1]-sin(alpha); if ydelta>0 then speed[2]:=speed[2]-cos(alpha) else speed[2]:=speed[2]+cos(alpha); kraft:=1/(s*s); geschw[1]:=speed[1]*kraft; geschw[2]:=speed[2]*kraft; x[2]:=x[2]-speed[1]*kraft; y[2]:=y[2]-speed[2]*kraft; end;
procedure zeichnen; var i:byte; begin for i:=1 to 2 do Form1.Canvas.Ellipse(trunc(x[i]*10+100)-5,trunc(y[i]*10+100)-5,trunc(x[i]*10+100)+5,trunc(y[i]*10+100)+5); end;
procedure TForm1.Timer1Timer(Sender: TObject); begin sammeln; zeichnen; end;
procedure TForm1.Button1Click(Sender: TObject); begin speed[1]:=0; speed[2]:=50; x[1]:=17.5; x[2]:=32.3; y[1]:=1.5; y[2]:=15.3; timer1.Enabled:=true; end;
end. |
es soll hier nicht um den code gehen(die art und weise is katastrophal, ich weiß), ich komm nur auf keinen grünen zweig bei der kräfteverteilung für vertikale und horizontale geschwindigkeit, bei 45° ist die summer der kraft zu groß, da cos(45)=0,7 und sin(45)=0,7 und damit insgesamt 1,4 mal soviel kraf herrscht, als wenn der punkt senk- oder wagerecht fliegen würde. selbst wenn die bahnen eigentlich ganz ok aussehen, denke ich nicht, dass die berechnungen korrekt sind. so ich hoffe mal dass ein paar hilfsbereite mathematik-asse im forum sind die mir weiterhelfen können 
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Do 29.07.04 16:30
Hallo!
Ich muss leider sagen, dass ich mit Deinem Code gar nicht klar komme.
Also, ich gehe jetzt mal durch. Zuerst einmal berechnest Du die Distanz in x- und in y-Richtung und dann daraus den Gesamtabstand. Dann den Winkel. Wieso prüfst Du dort, ob ydelta <> 0 ist und rechenst dann mit xdelta? Ob die Winkelbeziehungen so richtig sind, kann ich Dir nicht sagen, weil ich nicht weiß, wie Dein Koordinatensystem und Dein Winkel definiert ist.
Und ab da hakt es dann noch mehr. Was machst Du da mit der Geschwindigkeit? Ich schon richtig, dass die sich ändern muss. Aber die Änderung der Geschwindigkeit ist bei Dir unabhängig von der Entfernung und das kann nicht sein!
Dann kommen wir zur Kraft. Wenn ich alle Konstanten auf 1 setze, ist das schon in Ordnung. Aber wieso ist die Lageänderung Geschwindigkeit mal Kraft?
Ich würde Dir vorschlagen, dass ganze noch einmal zu durchdenken. Und zwar nicht als Quellcode, sondern in Formeln. Ganz wichtig ist eine Skizze.
MfG
Peter
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
fritierte 
      
Beiträge: 58
|
Verfasst: Do 29.07.04 16:44
ich hab elendig viele skizzen gemacht, hab es auf verschiedenen wegen probiert, aber der hier scheint der einfachste und offensichtlichste zu sein.
| Zitat: |
Wieso prüfst Du dort, ob ydelta <> 0 ist und rechenst dann mit xdelta
|
das kann man getrost ignorieren, ich musste etwas rumprobieren bis das ergebnis zumindest ordentlich aussah, es sah vorher so aus, dass wenn ydelta 0 war, eine division durch null entstand, das ist alles
| Zitat: |
Dann kommen wir zur Kraft. Wenn ich alle Konstanten auf 1 setze, ist das schon in Ordnung. Aber wieso ist die Lageänderung Geschwindigkeit mal Kraft?
|
oi das hab ich garnicht mitbekommen, du hast recht, eigentlich müsste das ganze so aussehen:
Delphi-Quelltext 1: 2: 3: 4: 5:
| speed[1]:=speed[1]-sin(alpha)*kraft; if ydelta>0 then speed[2]:=speed[2]-cos(alpha)*kraft else speed[2]:=speed[2]+cos(alpha)*kraft; |
koordinatensystem ist ganz normal xy, ich hab es auch schonmal nur mit winkeln versucht, also den punkt mit geschwindigket und richtung fliegen zu lassen, aber da kann ich auch nicht weit
*edit*
ok mit dieser veränderung, und der verringerung der geschwindigkeit auf 0.1 funktionierts wunderprächtig und augenscheinlich korrekt
auch wenn du mir nur indirekt geholfen hast, VIEEEELEN DANK!
|
|
Johannes Maier
      
Beiträge: 173
Win XP
D7 Prof
|
Verfasst: Do 29.07.04 17:02
Ich glaube Peter meinte hiermit | Zitat: | | Dann kommen wir zur Kraft. Wenn ich alle Konstanten auf 1 setze, ist das schon in Ordnung. Aber wieso ist die Lageänderung Geschwindigkeit mal Kraft? |
diesen Abschnitt am Schluss:
Delphi-Quelltext 1: 2: 3:
| x[2]:=x[2]-speed[1]*kraft; y[2]:=y[2]-speed[2]*kraft; end; |
Denn Weg ungleich Geschwindigkeit * Kraft, bzw. in Einheiten: [v * F] = m/s² * kg*m/s² = kg*m²/s^4 und das ist ungleich m
/e: Solange unten Lageänderung = augenblickliche Lage - aug. Geschw. * Kraft steht kann es noch nicht korrekt sein 
_________________ MfG
Johannes ehem. jbmaier
|
|
fritierte 
      
Beiträge: 58
|
Verfasst: Do 29.07.04 17:41
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Do 29.07.04 21:56
Warum nicht einfach:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27:
| type TMassepunkt = packed record x: Extended; y: Extended; m: Extended; end;
var pts: array [1..2] of TMassepunkt; r: Extended; F: Extended; dx, dy: Extended;
begin dx := pts[2].x - pts[1].x; dy := pts[2].y - pts[1].y;
r := sqrt(dx * dx + dy * dy); F := Grav * pts[1].m * pts[2].m / r; pts[1].x := pts[1].x + F / 2 / pts[1].m * (dx / r); pts[1].y := pts[1].y + F / 2 / pts[1].m * (dy / r); pts[2].x := pts[2].x + F / 2 / pts[2].m * (dx / r); pts[2].y := pts[2].y + F / 2 / pts[2].m * (dy / r); end; |
Frag mich, wozu Ihr da Winkel braucht
P.S.: Wenn mehr als 2 Punkte existieren, dann muss die Alte Lage zwischengespeichert werden und die Gesamtkraft berechnet werden. Hab das ganze mit einem QBasic-Programm mal für beliebige Anzahl von Massepunkten gemacht. Funzt ohne Probleme.
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Do 29.07.04 22:23
Ich bin davon ausgegangen, dass fritierte noch keine Vektorrechnung hatte, dann ist es mit dem Winkel einfacher. Aber Du wirst sehen: Wenn Du die Formeln in firtiertes Quelltext ineinander einsetzt, verschwindet auch der Winkel.
Übrigens fehlt bei Dir die Geschwindigkeit. Oder hast Du die absichtlich weggelassen? 
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Do 29.07.04 23:32
|
|
Johannes Maier
      
Beiträge: 173
Win XP
D7 Prof
|
Verfasst: Fr 30.07.04 07:36
_________________ MfG
Johannes ehem. jbmaier
|
|
Johannes Maier
      
Beiträge: 173
Win XP
D7 Prof
|
Verfasst: Fr 30.07.04 07:46
Btw:
BenBE in deinem Code ist denk ich noch ein Fehler drin, hier:
Delphi-Quelltext 1:
| F := Grav * pts[1].m * pts[2].m / r; |
denn für die Gravitationskraft gilt meines Wissens F := gamma * m * M / r²
Deins wäre wenn ich mich noch richtig erinnere die potentielle Energie in Bezug auf das Unendliche mit falschem Vorzeichen 
_________________ MfG
Johannes ehem. jbmaier
|
|
fritierte 
      
Beiträge: 58
|
Verfasst: Fr 30.07.04 13:48
also:
ich habe 10. klasse realschulmathematik in mir, nix mit vektor- oder matritzenrechnung, von daher sag ich ja dass mein ansatz für mich eigentlich der is, der im bereich des machbaren ist. matürlich geht das eleganter, oder korrekter, aber 2-3 jahre abi-mathe lassen sich nich herbeischnipsen 
|
|
DelphiFreund
      
Beiträge: 120
Win XP
D7 Enterprise
|
Verfasst: Fr 30.07.04 13:52
Man lernt in der 10. Matritzen- und Vektorrechnung.
Gruß DelphiFreund
|
|
newbie44
      
Beiträge: 117
Windows XP, Windows ME
D6 Pers, D7 Enterprise
|
Verfasst: Fr 30.07.04 13:56
Ahhh Vektorrechnung, das ist mein Lieblingsgebiet in Mathe gewesen. Betrag des Vektors, Länge des Vektors Schnittpunktberrechnung, das war alles so simpel, hatte ja auch im Abschlusszeugnis ne 3.
Gruß
Sebby 
_________________ Dumm darf man sein, aber zu helfen muss man sich wissen.
|
|
DelphiFreund
      
Beiträge: 120
Win XP
D7 Enterprise
|
Verfasst: Fr 30.07.04 13:58
Ich hab mein Abschlusszeugnis erst bekommen. Mathe ist wirklich easy. Hatte nur ne 2. Hab die Prüfung leider verhauen.
|
|
newbie44
      
Beiträge: 117
Windows XP, Windows ME
D6 Pers, D7 Enterprise
|
Verfasst: Fr 30.07.04 14:02
Auf welche Schule bist du gegangen, Wirtschaftsschule, Realschule, Hauptschule.
Ich freue mich das ich überhaupt eine 3 geschafft habe, ich hab einfach drauf los gerechnet und es war zufällig richtig. Ja die Wirtschaftsschule fehlt mir, vor allem meine Freunde, die ich damals gefunden hatte.
Muss mal wieder an Sie Mailen
Sebby 
_________________ Dumm darf man sein, aber zu helfen muss man sich wissen.
|
|
DelphiFreund
      
Beiträge: 120
Win XP
D7 Enterprise
|
Verfasst: Fr 30.07.04 14:13
Realschule I-Zweig (Mathematischer)
Gruß DelphiFreund
|
|
fritierte 
      
Beiträge: 58
|
Verfasst: Fr 30.07.04 14:39
| DelphiFreund hat folgendes geschrieben: | Man lernt in der 10. Matritzen- und Vektorrechnung.
Gruß DelphiFreund |
vielleicht in deinem bundesland, aber in sachsen-anhalt wird auf einer normalen realschule keine matritzen- bzw. vektorrechnung behandelt 
|
|
DelphiFreund
      
Beiträge: 120
Win XP
D7 Enterprise
|
Verfasst: Fr 30.07.04 14:40
So gar im 3er-Zweig lernt man Vektorrechnung.
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 30.07.04 19:15
Äh, wollt ihr jetzt streiten, wann wie wo Matritzenrechnung behandelt wird oder geht es euch noch um das Problem? Falls es niemenad bemerkt hat, das Programm, was ich verlinkt habe, ist mit Source. 
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Fr 30.07.04 23:35
| Peter Lustig hat folgendes geschrieben: | Übrigens fehlt bei Dir die Geschwindigkeit. Oder hast Du die absichtlich weggelassen?  |
Wieso Vektor-Rechnung??? Geht doch über einfache Dreiecks-Beziehungen (AKA tan, sin und cos. Hat man IMHO in der 7. oder 8. Kl.)
@Geschwindigkeit: Hat's aus nem anderen Programm übernommen und dort beim übersetzen vergessen. Geht aber relativ einfach zu adeen: Record um zwei felder ergänzen (vx und vy) und die Update-Gleichungen genauso. In meinem Original-Programm hatte ich's mit n Massepunkten programmiert (QBasic ohne OOP) 
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
|