Autor Beitrag
-Nala-
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 62



BeitragVerfasst: Mo 29.01.07 17:26 
hey leute !
Ich hab (mal wieder) ne frage :D
also ...

ausblenden volle Höhe 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:
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
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  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>400then
vv:=-vv;
if (ImNa1.left>400then
vh:=-vh;
if (ImNa1.top<20)  then
vv:=-vv;
if (ImNa1.left<20then
vh:=-vh;
if (ImNa2.left>400then
p:=-p;
if (ImNa2.top>400then
n:=-n;
if (ImNa2.left<20then
p:=-p;
if (ImNa2.top<20then
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 user profile iconGausi: Delphi-Tags hinzugefügt
F34r0fTh3D4rk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: 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- Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 62



BeitragVerfasst: Mo 29.01.07 17:33 
so ?

ausblenden volle Höhe 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:
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
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  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>400then
vv:=-vv;
if (ImNa1.left>400then
vh:=-vh;
if (ImNa1.top<20)  then
vv:=-vv;
if (ImNa1.left<20then
vh:=-vh;
if (ImNa2.left>400then
p:=-p;
if (ImNa2.top>400then
n:=-n;
if (ImNa2.left<20then
p:=-p;
if (ImNa2.top<20then
n:=-n;
end;

end.
perry5
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 102



BeitragVerfasst: 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- Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 62



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 102



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
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)
BeitragVerfasst: Mo 29.01.07 18:57 
@ Nala: Welche Klasse bist du den, Vekorrechnung lernt man in der 11./12.!
Robinator
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 275

WinXP
BDS 2006
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 102



BeitragVerfasst: Mo 29.01.07 19:05 
Genau, da siehste auch eine Animation wie das Komponenten tauschen funktioniert.
-Nala- Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 62



BeitragVerfasst: 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 :D
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 102



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
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)
BeitragVerfasst: 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!

ausblenden Delphi-Quelltext
1:
2:
Abst := sqrt(delta_x²+delta_y²);
// sqrt --> Wurzelfkt.



MfG Bergmann.

€: Abst ist natürlich Real!
perry5
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 102



BeitragVerfasst: 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- Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 62



BeitragVerfasst: 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

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 275

WinXP
BDS 2006
BeitragVerfasst: Mi 31.01.07 18:43 
user profile icon-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

ausblenden 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 :D

_________________
erare humanum est
-Nala- Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 62



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 275

WinXP
BDS 2006
BeitragVerfasst: Mi 31.01.07 19:05 
user profile icon-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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Mi 31.01.07 19:57 
<OT>
user profile iconRobinator 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1747
Erhaltene Danke: 15

Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Mi 31.01.07 20:04 
user profile iconJakob_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 :roll:

Um noch was zum Thema beizutragen: Hab den Suche in: Delphi-Forum, Delphi-Library DELPHI CRASHKURS noch nicht erwähnt oder?

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.