Autor |
Beitrag |
-Nala-
      
Beiträge: 62
|
Verfasst: Mo 29.01.07 17:26
hey leute !
Ich hab (mal wieder) ne frage
also ...
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:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls;
type TForm1 = class(TForm) ImReagenzglas: TImage; ImNa1: TImage; Timer1: TTimer; ImNa2: TImage; procedure FormCreate(Sender: TObject); procedure Timer1Timer(Sender: TObject); private public end;
var Form1: TForm1; vv, vh, n, p:integer;
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject); begin ImNa1.canvas.ellipse(0,0,20,20); ImReagenzglas.canvas.ellipse(400,400,380,380); ImNa2.Canvas.ellipse(0,0,20,20); n:=7; p:=8; vv:=5; vh:=4; end;
procedure TForm1.Timer1Timer(Sender: TObject); begin ImNa1.Top:=ImNa1.top+vv; ImNa1.left:=ImNa1.left+vh; ImNa2.top:=ImNa2.top+n; ImNa2.left:=ImNa2.left+p; if (ImNa1.top>400) then vv:=-vv; if (ImNa1.left>400) then vh:=-vh; if (ImNa1.top<20) then vv:=-vv; if (ImNa1.left<20) then vh:=-vh; if (ImNa2.left>400) then p:=-p; if (ImNa2.top>400) then n:=-n; if (ImNa2.left<20) then p:=-p; if (ImNa2.top<20) then n:=-n; end;
end. |
das hab ich programmiert und jetzt wollte ich fragen ob ihr wisst , wie man
das so programmiert, dass sich die beiden kugeln die ich eingefügt habe wenn sie sich berühren gegenseitig abstoßen .
könnt ihr mia helfen ????
THX
Moderiert von Gausi: Delphi-Tags hinzugefügt
|
|
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Mo 29.01.07 17:31
wäre schön, wenn du den code formatieren und in [delphi][/delphi] tags packen könntest, danke
|
|
-Nala- 
      
Beiträge: 62
|
Verfasst: Mo 29.01.07 17:33
so ?
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:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls;
type TForm1 = class(TForm) ImReagenzglas: TImage; ImNa1: TImage; Timer1: TTimer; ImNa2: TImage; procedure FormCreate(Sender: TObject); procedure Timer1Timer(Sender: TObject); private public end;
var Form1: TForm1; vv, vh, n, p:integer;
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject); begin ImNa1.canvas.ellipse(0,0,20,20); ImReagenzglas.canvas.ellipse(400,400,380,380); ImNa2.Canvas.ellipse(0,0,20,20); n:=7; p:=8; vv:=5; vh:=4; end;
procedure TForm1.Timer1Timer(Sender: TObject); begin ImNa1.Top:=ImNa1.top+vv; ImNa1.left:=ImNa1.left+vh; ImNa2.top:=ImNa2.top+n; ImNa2.left:=ImNa2.left+p; if (ImNa1.top>400) then vv:=-vv; if (ImNa1.left>400) then vh:=-vh; if (ImNa1.top<20) then vv:=-vv; if (ImNa1.left<20) then vh:=-vh; if (ImNa2.left>400) then p:=-p; if (ImNa2.top>400) then n:=-n; if (ImNa2.left<20) then p:=-p; if (ImNa2.top<20) then n:=-n; end;
end. |
|
|
perry5
      
Beiträge: 102
|
Verfasst: Mo 29.01.07 18:29
Das musst du mit Vektoren rechnen.
Du musst irgendwie die Verbindungslinie zwischen den Mittelpunkten berechnen und den jeweiligen Richtungsvekotr in 2 Teile aufteilen. Einmal den entlang dieser Verbindung und einmal den auf der verbindung. Jetzt müssen die beiden Kugeln ihre Komponenten trauschen, also die die nicht auf der Verbindungdslinie liegen.
Jetzt kannste damit die neuen Richtungsvektoren zusammenrechnen.
|
|
-Nala- 
      
Beiträge: 62
|
Verfasst: Mo 29.01.07 18:40
sry aber ich bin anfänger und ha´b delphi grad ne woche und ich ken nmich überhaupt nich aus mit vektoren und so weiter ... kannste mia nich einfach sagen was ich wo hinschreiben oder wo hin machen soll???
|
|
perry5
      
Beiträge: 102
|
Verfasst: Mo 29.01.07 18:45
nein?
sry, aber das was du bis jetzt hast ist totaler schmu.
Vektorrechnung ist nun einmal nicht gerade einfach. Außerdem haste ja z.b. noch nirgendwo irgendwas wie Radius oder mittelpunkt angegeben, sondern bloß n paar Variablen, mit denen du eine Ellipse zeichnest.
Wenn du ernsthaft ein paar rumfliegende Kugel simulieren willst, solltest du eine Kugelklasse machen, mit Mittelpunkt und Radius, die dann die entsprechende Ellipse zeichnet.
Die Kollisionsabfrag kriegt man damit schon sehr einfach hin, einfach die Radien mit den Abstand der Mittelpunkte vergleichen (mal dir ein paar sich schneidende und nciht schneidende Kreise auf, dann merkste ganz schnell, wie du kollision feststellen kannst).
Die Vektorrechnung für das abstoßen ist dann nochmal bissle schwerer, vor allen wenn du vor hast das auch zu verstehen. Und wenn dus nur abschreiben und nicht verstehen willst, ist programmieren nix für dich, weil du dir nicht alles durch zusammenfragen zurechtfuddeln kannst.
Lern erstmal bisschen weiter, mit klassen und so. Wenn du dann ein wenig weiter bist, kann ich dir bei der Physik helfen.
|
|
Bergmann89
      
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: Mo 29.01.07 18:57
@ Nala: Welche Klasse bist du den, Vekorrechnung lernt man in der 11./12.!
|
|
Robinator
      
Beiträge: 275
WinXP
BDS 2006
|
Verfasst: Mo 29.01.07 19:01
de.wikipedia.org/wik...o%C3%9F_%28Physik%29
Da gibts auch noch nen paar informationen zu dem Thema
gruss, rob
_________________ erare humanum est
|
|
perry5
      
Beiträge: 102
|
Verfasst: Mo 29.01.07 19:05
Genau, da siehste auch eine Animation wie das Komponenten tauschen funktioniert.
|
|
-Nala- 
      
Beiträge: 62
|
Verfasst: Di 30.01.07 18:38
ok dankeschön...
ich glaube ich versteh das ganze jeztz ein bisschen
unter was kann ich der kugel einen radius selber bestimmen ???#
EDIT:// ok... ich bin ein idiot den radius kann man an den koordinaten ablesen
sry ... aber wie kann ich den abstand zwischen den beiden kugelmittelpunkten als variabel bezeichnen ????
EDIT2:// und mit welchen vokabeln kann ich das formulieren???
und unter was ?????
|
|
perry5
      
Beiträge: 102
|
Verfasst: Mi 31.01.07 00:09
äh, wat? Du fragst ernsthaft nach wie du deine Varaiblen nennen sollst?
Hm, mal sehen. Die ENTFERNUNG zwischen 2 Mittelpunkten. Ah, ich habs: Entfernung? oder Distance, wenn dir Englisch mehr Spaß bereitet.
|
|
Bergmann89
      
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: Mi 31.01.07 10:07
OK, aber ich glaub eher er will wissen wie er den berechen kann...
Wie wäre es das mit dem Staz des Pytagoras!
Delphi-Quelltext 1: 2:
| Abst := sqrt(delta_x²+delta_y²); |
MfG Bergmann.
€: Abst ist natürlich Real!
|
|
perry5
      
Beiträge: 102
|
Verfasst: Mi 31.01.07 16:16
Jop. Allerdings sei an dieser Stelle gesagt, dass man zum Vergleichen von Abständen auch deren Quadrat benutzen kann, sich also das realtiv langsame Wurzel ziehen sparen kann.
|
|
-Nala- 
      
Beiträge: 62
|
Verfasst: Mi 31.01.07 18:21
hi leute
ich hab heute meinen lehrer gefragt und der meinte man könnte es auch mit einem if ...then satz machen z.B
Delphi-Quelltext 1: 2: 3: 4: 5:
| if (ImNa1=ImNa2) then p:=-p; n:=-n; vv:=-vv; vh:=-vh; |
als ichs versucht habe sind ImNa1 und ImNa2 nur herum geeiert
als ich dann nochma meinen lehrer gefragt hab meinte der das
ich das so schreiben soll das nur wenn die koordinaten von ImNa1 und ImNa2 übereinstimmen das passiert aber ich hab bei hilfe nich die richtige vokabel gefunden
ich habs mit place oder position ausprobiert aber es hat nich funktioniert was muss ich schreiben????
also ich mein dieses wort:
if ( POSITION ImNa1=...... t´hen.....
|
|
Robinator
      
Beiträge: 275
WinXP
BDS 2006
|
Verfasst: Mi 31.01.07 18:43
-Nala- hat folgendes geschrieben: | hi leute
ich hab heute meinen lehrer gefragt und der meinte man könnte es auch mit einem if ...then satz machen z.B
Delphi-Quelltext 1: 2: 3: 4: 5:
| if (ImNa1=ImNa2) then p:=-p; n:=-n; vv:=-vv; vh:=-vh; |
als ichs versucht habe sind ImNa1 und ImNa2 nur herum geeiert
als ich dann nochma meinen lehrer gefragt hab meinte der das
ich das so schreiben soll das nur wenn die koordinaten von ImNa1 und ImNa2 übereinstimmen das passiert aber ich hab bei hilfe nich die richtige vokabel gefunden
ich habs mit place oder position ausprobiert aber es hat nich funktioniert was muss ich schreiben????
also ich mein dieses wort:
if (POSITION ImNa1=...... t´hen..... |
Hi Nala.
Ich möchte dich an erster stelle einmal warnen. So wie ich deinen Kentnissstand einschätze, hast du dich mit der Aufgabe total übernommen. Du weist weder, wie du das physikalisch korrekt berechnest, geschweige denn wie du es programmiertechnisch umsetzen könntest. Wenn du das trotzdem umsetzen möchtest, kann ich dir diesen thread von delphifan nahelegen.
Bitte denk nicht, ich möchte dirch fertigmachen oder ähnliches, es ist nur wenig ratsam sich für den Anfang gleich ein Projekt vorzunehmen, an dem selber erfahrene Programmierer zu knabbern hätten
Grüsse, und (trotz allem) gutes gelingen!
Rob
//EDIT: Der gute Mann heisst natürlich delfiphan, sry 
_________________ erare humanum est
|
|
-Nala- 
      
Beiträge: 62
|
Verfasst: Mi 31.01.07 18:58
is ja nett das du mir sowass
sagst aba
unser lehrer hat mir die aufgabe gestellt und
meinte es geht leichter er hat es selbst schon mal geschafft ich habs
gesehnen
du hast nich auf meine frage geantwortet
kann man das auch mit nem if... then satz machen??
|
|
Robinator
      
Beiträge: 275
WinXP
BDS 2006
|
Verfasst: Mi 31.01.07 19:05
-Nala- hat folgendes geschrieben: | is ja nett das du mir sowass
sagst aba
unser lehrer hat mir die aufgabe gestellt und
meinte es geht leichter er hat es selbst schon mal geschafft ich habs
gesehnen
du hast nich auf meine frage geantwortet
kann man das auch mit nem if... then satz machen?? |
Ich würde ja auf deine Frage antworte, wenn sie denn irgendeinen sinn machen würde
guck dir halt den Thread mal an. An if ... then abfragen kommst du eigentlich in KEINEM programm vorbei.
gruss
_________________ erare humanum est
|
|
JayEff
      
Beiträge: 2971
Windows Vista Ultimate
D7 Enterprise
|
Verfasst: Mi 31.01.07 19:57
<OT> Robinator hat folgendes geschrieben: | An if ... then abfragen kommst du eigentlich in KEINEM programm vorbei.
| showmessage('hello world');?
</OT>
Nun, ich weiß nicht, ob du Robinators Antwort beleidigend aufgefasst hast, aber so wars sicher nicht gemeint
Fakt ist, dir fehlen Kentnisse! Bist du dir ganz sicher, dass dein Lehrer den elastischen Stoß im Zweidimensionalen von dir verlangt? Wenn ich mir die (qualitativ sehr unaussagekräftige) Aussage deines Lehrers so ansehe (Eine If-Abfrage. jaaaah .. Siehe auch den letzten Post von Robinator), dann vermute ich, dass er etwas im stil von rechteckigen Objekten (bzw. Kreisen, die als Quadrate behandelt werden) erwartet, das würde das ganze nämlich einfacher machen und dir einen Großteil von Trigonometrie ersparen. Alle Trigonometrie sogar. Dann kämst du bei der Kollision 2er Objekte wahrscheinlich mit 2 If-Abfragen aus. Ist ziemlich simpel, dann, da musst du nur ein bisschen im Forum suchen um auf die Antwort zu kommen. Wenn dein Lehrer tatsächlich runde Objekte kollidieren lassen will, (kreise, im einfachsten, ovale/unförmige dinger im schlimmsten fall) wirds schwieriger. Dazu solltest du dir dann diverse Wikipedia Artikel zu Trigonometrie, Vektoren und natürlich dem elastischen Stoß anschauen.
Ich hoffe mal, das wird was! 
_________________ >+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
|
|
Jakob_Ullmann
      
Beiträge: 1747
Erhaltene Danke: 15
Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
|
Verfasst: Mi 31.01.07 19:59
Entschuldigung, aber wenn ich über deine "Reform der neuen Rechtschreibung" lache, hast du sicher nichts dagegen, oder?
Und in deiner Rechtschreibung wahrscheinlich:
Tschuldschung, aba wenn ich üba deene refoam da neuen reschtschraibung lache, haste sicha nix dagegn, oda?
==> Nicht persönlich nehmen, dass war ja nicht ernst gemeint (Nur ein kleines bisschen).
|
|
JayEff
      
Beiträge: 2971
Windows Vista Ultimate
D7 Enterprise
|
Verfasst: Mi 31.01.07 20:04
Jakob_Ullmann hat folgendes geschrieben: | Entschuldigung, aber wenn ich über deine "Reform der neuen Rechtschreibung" lache, hast du sicher nichts dagegen, oder?
Und in deiner Rechtschreibung wahrscheinlich:
Tschuldschung, aba wenn ich üba deene refoam da neuen reschtschraibung lache, haste sicha nix dagegn, oda?
==> Nicht persönlich nehmen, dass war ja nicht ernst gemeint (Nur ein kleines bisschen). |
Und es war total Off-Topic. Drum hab ich in meiner Signatur seit einiger Zeit "Wer Rechtschreibfehler findet ..." ihr wisst schon  Des weiteren weis kein Mensch, wen du grade meinst, kann gut sein, dass ich mich irgendwo vertippt habe. Tut mir wirklich seeeehr leid
Um noch was zum Thema beizutragen: Hab den DELPHI CRASHKURS noch nicht erwähnt oder?
_________________ >+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
|
|
|