AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Gasteilchen-Simulation

Ein Thema von Pungex · begonnen am 27. Jan 2008 · letzter Beitrag vom 25. Mär 2008
Antwort Antwort
Seite 2 von 4     12 34      
xy124

Registriert seit: 3. Dez 2007
146 Beiträge
 
Delphi 7 Personal
 
#11

Re: Gasteilchen-Simulation

  Alt 11. Feb 2008, 17:47
ich habs geschrieben!

erstell nen Timer nen shape und nen button!

dan so:
(musst auch noch timer und button doppelklicken, evtl timerintervall verringern dann alles reinkopieren!...)
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, math;

type
  TForm1 = class(TForm)
    Shape1: TShape;
    Button1: TButton;
    Timer1: TTimer;
    Edit1: TEdit;
    Edit2: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  x, y: Integer;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  timer1.enabled := true;
  x := 5; //Startwerte für X&Y-Speed
  y := 3;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  //Kollissionstests
  if (shape1.Top < 0) or (shape1.Top > clientheight - shape1.Height) then
    y := -y;
  if (shape1.Left < 0) or (shape1.Left > clientwidth - shape1.width) then
    x := -x;
  
  //eigentliche bewegung
  shape1.Top := shape1.Top + y;
  shape1.Left := shape1.Left + x;

  form1.caption := floattostr(sqrt(x*x+y*Y)) //pythagoras(schreibt man den so?) hilft weiter
end;
end.
was war jetzt so schwer daran?
  Mit Zitat antworten Zitat
Pungex

Registriert seit: 27. Jan 2008
15 Beiträge
 
#12

Re: Gasteilchen-Simulation

  Alt 11. Feb 2008, 22:31
extremst großes dankeschön dafür... das hat mir enorm viel weitergeholfen....


1000-facher dank



hab nur ne frage: Was genau beschreibt das Clientheight/-width? Ist das das gesamte Formular?
  Mit Zitat antworten Zitat
xy124

Registriert seit: 3. Dez 2007
146 Beiträge
 
Delphi 7 Personal
 
#13

Re: Gasteilchen-Simulation

  Alt 12. Feb 2008, 09:47
ja aber ohne titelleiste und den bei xp blauen rand
  Mit Zitat antworten Zitat
Pungex

Registriert seit: 27. Jan 2008
15 Beiträge
 
#14

Re: Gasteilchen-Simulation

  Alt 13. Feb 2008, 17:01
jetzt wirds erst richtig kompliziert.... die einzelnen shapes müssten bei berührung aufeinander reagieren....

mein plan sieht soweit erstmal so aus:
Ich ermittle in jedem Zeitschritt die Abstände der einzelnen Shapes zueinander (Abstand der Mittelpunkte mitm Pythagoras, also r=Wurzel(delta_x²+delta_y²))... und wenn der Abstand dann ´klein genug is (nen paar wenige pixel), dann sollen die sich abstoßen (wenn der abstand in diesem Zeitschritt zu klein is, sollen sie halt durchfliegen, sonst stürzt mir sicherlich das programm ab).... mit den genauen stoßvorgängen muss ich mir jez nochn kopf machen...

was haltet ihr erstma von dieser grundidee? oder sollte man das vllt anders machen?



mfg pungex
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#15

Re: Gasteilchen-Simulation

  Alt 13. Feb 2008, 17:14
Folgende Funktion ermittelt, ob 2 Punkte näher als ein bestimmter Abstand sind.
Der Abstand (Squaredist) muss in quadrierter Form übergeben werden.
(3 Pixel Abstand => Squaredist = 9)
Delphi-Quellcode:
function Kollision(A, B : TPoint; Squaredist:integer):boolean;
var
   x,y : integer;
begin
  x := A.x-B.x;
  y := A.x-B.x;
  result := ((x*x)+(y*y) <= Squaredist);
end;
Nachtrag: komplett auf Integerarithmetik umgestellt
Andreas
  Mit Zitat antworten Zitat
mr.winkle

Registriert seit: 25. Mai 2006
98 Beiträge
 
Delphi 7 Personal
 
#16

Re: Gasteilchen-Simulation

  Alt 16. Feb 2008, 16:27
Hi Pungex,
ich bin der Typ mit Gasteilchen3D

Zitat von shmia:
Delphi-Quellcode:
function Kollision(A, B : TPoint; Squaredist:integer):boolean;
var
   x,y : integer;
begin
  x := A.x-B.x;
  y := A.x-B.x;
  result := ((x*x)+(y*y) <= Squaredist);
end;
Naja, bei y sollte man schon die Y-Koordinaten der Punkte voneinander subtrahieren, sonst wird das nichts
y:= A.Y-B.Y; Ich mach das immer mit folgender Funktion:
Delphi-Quellcode:
function abstand(a,b:tpoint):real;
begin
  result:=sqrt(sqr(a.x-b.x)+sqr(a.y-b.y));
end;

//Abfrage
if abstand(punkta,punktb)<=radiusa+radiusb then kollision;
Allerdings reicht das alleine für die Abprallberechnungen von Teilchen nicht aus. Deshalb hab ich mal meine absoluten Anfänge angehängt. Ich bin mir ziemlich sicher das du das gebrauchen kannst

Meine Stossprozedur sieht so aus:
Delphi-Quellcode:
procedure tForm1.stoss(var b1,b2:tBall);
var M1,M2,delvx,delvy,dmx,dmy,dvx,dvy:single;
begin
  M1:=b1.masse;
  M2:=b2.masse;
  dmx:=b2.x-b1.x;
  dmy:=b2.y-b1.y;
  delvx:=b2.vx-b1.vx;
  delvy:=b2.vy-b1.vy;
  dvx:=2*M2*dmx*(dmx*delvx+dmy*delvy)/((SQR(dmx)+SQR(dmy))*(M1+M2));
  dvy:=2*M2*dmy*(dmx*delvx+dmy*delvy)/((SQR(dmx)+SQR(dmy))*(M1+M2));
  b1.vx:=b1.vx+dvx;
  b1.vy:=b1.vy+dvy;
  b2.vx:=b2.vx-(M1/M2)*dvx;
  b2.vy:=b2.vy-(M1/M2)*dvy;
  bewegeball(b1);
  bewegeball(b2);
end;
Damit werden auch sofort je nach Masse, Winkel und Radius die neuen Geschwindigkeiten und Richtungen angegeben. Allerdings treten noch ein paar Schönheitsfehler auf, die sich aber leicht beheben lassen. Im Anhang findest du eine laufende Simulation und bei Fragen kannst du diese gern an mich stellen.

mfg, mr.winkle
Angehängte Dateien
Dateityp: zip modellgas_355.zip (12,0 KB, 16x aufgerufen)
Dateityp: exe modellgas1_745.exe (402,0 KB, 39x aufgerufen)
  Mit Zitat antworten Zitat
Pungex

Registriert seit: 27. Jan 2008
15 Beiträge
 
#17

Re: Gasteilchen-Simulation

  Alt 17. Feb 2008, 14:46
großes dankeschön... des is echt sehr nett ... hab im moment leider grad keine zeit und möglichkeit das auszuprobieren, aber ich werd mich da nächste woche mal ransetzen....


MfG
Pungex
  Mit Zitat antworten Zitat
mjvdlek

Registriert seit: 7. Mär 2008
1 Beiträge
 
#18

Re: Gasteilchen-Simulation

  Alt 11. Mär 2008, 23:04
Diese Simulation finde ich super! Auch die Idee, die Gasteilchen eine Randomfarbe zu geben.
Ich arbeite auf Delphi an einem Gesamtphysikprogramm. Meine Frage ist: darf ich den Codetext in
mein Programm einbauen?

MJVDLEK
  Mit Zitat antworten Zitat
mr.winkle

Registriert seit: 25. Mai 2006
98 Beiträge
 
Delphi 7 Personal
 
#19

Re: Gasteilchen-Simulation

  Alt 14. Mär 2008, 02:29
Ja, ist okay. Wenn du den Sourcecode nutzt bitte aber auch eine PN an mich schicken, ich würde das Resultat gerne mal sehen.
Ansonsten kannst du auch einmal nach "Gasteilchen 3D" suchen - dann findest du das Programm das aus diesem Code entstanden ist. Wird dir sicherlich gefallen!

mfg, mr.winkle
  Mit Zitat antworten Zitat
Pungex

Registriert seit: 27. Jan 2008
15 Beiträge
 
#20

Re: Gasteilchen-Simulation

  Alt 22. Mär 2008, 15:25
ich habe das jetzt mal für mich umgeschrieben, aber irgendwie läuft das nich... kann mir da vllt einer helfen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 4     12 34      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz