AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Ausfallswinkel berechnen und mit Canvas einzeichnen
Thema durchsuchen
Ansicht
Themen-Optionen

Ausfallswinkel berechnen und mit Canvas einzeichnen

Ein Thema von Onkelrossie · begonnen am 15. Okt 2008 · letzter Beitrag vom 15. Okt 2008
Antwort Antwort
Seite 1 von 2  1 2      
Onkelrossie

Registriert seit: 7. Aug 2006
43 Beiträge
 
Delphi 7 Architect
 
#1

Ausfallswinkel berechnen und mit Canvas einzeichnen

  Alt 15. Okt 2008, 01:15
Hallo und guten Abend liebe DP gemeinde,

ich habe mal wieder ein Problem was ich auch durch langes suchen und lesen der Threads hier im Forum nicht meistern konnte.
Ich habe zwar einige Lösungsansätze gefunden, anscheinend bin ich auch nicht der erste mit diesem Problem, aber dennoch komme ich nicht weiter und bin auf ausführlichere Hilfe angewiesen.

Es geht darum den Weg einer Kugel (Shape) vorherzusagen indem man den Ausfallswinkel berechnet wenn sie von der Bande abprallt. Anschließend soll dieser Weg als Linie mit hilfe von TCanvas eingezeichnet werden. Mein Hauptproblem bezieht sich auf die Bande welche auch durch ein Shape realisiert wurde. Ich weiß einfach nicht wie ich den Kolisionspunkt berechnen soll ab wann die Kugel die Bande berühren würde und das ganze dann als Linie einzuzeichnen wohin die Kugel dann abprallt.

Ich habe hier mal ein Bildschirmfoto gemacht und in Paint etwas verdeutlicht was ich genau meine.

http://s2.imgimg.de/uploads/Kugel576dc054PNG.png

Im Anhang habe ich auch noch meinen Source den ich bis jetzt geschrieben habe gepackt.
Geschrieben ist er mit BDS2006.

Ich wäre für eure Hilfe sehr dankbar und bitte euch es mir so einfach wie möglich zu erklären da ich noch neu in auf dem Gebiet bin.


MfG
Onkelrossi
Angehängte Dateien
Dateityp: rar source_881.rar (6,7 KB, 4x aufgerufen)
Dateityp: rar project1_203.rar (166,1 KB, 10x aufgerufen)
  Mit Zitat antworten Zitat
Cyf

Registriert seit: 30. Mai 2008
407 Beiträge
 
Lazarus
 
#2

Re: Ausfallswinkel berechnen und mit Canvas einzeichnen

  Alt 15. Okt 2008, 01:40
Ich hab jetzt grad nicht mehr die Zeit (Bett ruft ) das noch detailiert zu beschreiben, aber ich hab was in der Richtung mal vor einiger Zeit mit OpenGl in 3D gebastelt und das Stichwort, was dir eventuell helfen könnte ist "Plane Intersection".
  Mit Zitat antworten Zitat
Onkelrossie

Registriert seit: 7. Aug 2006
43 Beiträge
 
Delphi 7 Architect
 
#3

Re: Ausfallswinkel berechnen und mit Canvas einzeichnen

  Alt 15. Okt 2008, 02:20
Danke für die schnelle Antwort zu so später Stunde, aber leider bringt mich das in keinster weise weiter. Hab das Stichwort mal in die Suche eingegeben aber ohne Erfolg. Wäre für weitere Ratschläge dankbar.


MfG
Onkelrossi
  Mit Zitat antworten Zitat
ede57

Registriert seit: 5. Apr 2008
Ort: Hamburg
46 Beiträge
 
Delphi XE Professional
 
#4

Re: Ausfallswinkel berechnen und mit Canvas einzeichnen

  Alt 15. Okt 2008, 09:31
Schau mal hier

http://www.delphi-library.de/topic_+...nen_47305.html
  Mit Zitat antworten Zitat
Onkelrossie

Registriert seit: 7. Aug 2006
43 Beiträge
 
Delphi 7 Architect
 
#5

Re: Ausfallswinkel berechnen und mit Canvas einzeichnen

  Alt 15. Okt 2008, 16:09
@ede57, danke für den Link, hab mir das mal angeguckt aber werde daraus nicht schlau. Wenn ich es Compiliere dann sehe ich nur ein paar Kugeln die sich zufällig über die Form bewegen.

Ich möchte kein Billardspiel oder so Programmieren oder irgendwelche beweglichen Kugeln, sondern nur die Bewegung einer Kugel grafisch darstellen (mit einem Strich). Mein Problem ist nun das ich nicht weis wie ich den Strich weiter zeichnen soll wenn er von einer "Bande" abprallt. Zudem soll der Strich auch den Umfang der Kugel berücksichtigen. Wäre super wenn mir einer weiterhelfen könnte (Source ist ja im ersten Post zu finden).


Gruß
Onkelrossi
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.029 Beiträge
 
Delphi 12 Athens
 
#6

Re: Ausfallswinkel berechnen und mit Canvas einzeichnen

  Alt 15. Okt 2008, 17:12
Wie lang soll denn der Strich insgesamt werden? Die Kugel kann ja theoretisch beliebig oft an einer Bande abprallen.
Uwe Raabe
  Mit Zitat antworten Zitat
Onkelrossie

Registriert seit: 7. Aug 2006
43 Beiträge
 
Delphi 7 Architect
 
#7

Re: Ausfallswinkel berechnen und mit Canvas einzeichnen

  Alt 15. Okt 2008, 17:16
@Uwe Raabe, danke für deine Antwort! Wäre nicht schlecht das variabel einstellen zu können aber ich dachte da so an 3-5 "Abpraller".


Gruß
Onkelrossi
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#8

Re: Ausfallswinkel berechnen und mit Canvas einzeichnen

  Alt 15. Okt 2008, 17:27
Okay, ich nehme mal an, du hast folgendes:

Positionsvektor: s0

Geschwindigkeitsvektor: v

Breite und Höhe der Box: b und h

Der Ursprung liegt zweckmäßigerwise in der oberen, linken Ecke der Box.
Postives X nach rechts, positives Y nach unten.

Vektoren werde ich fett formatieren

Dann kannst du jetzt eine Geradengleichung aufstellen:

s(t) = s0 + t * v

mit t als Parameter.

Jetzt kannst du für die folgernden vier Fälle den Parameter t ausrechnen:

X-Komponente von s(t) ist gleich 0 (links)
Y-Komponente von s(t) ist gleich 0 (oben)

X-Komponente von s(t) ist gleich b (rechts)
Y-Komponente von s(t) ist gleich h (unten)

Du hast jetzt vier mögliche Werte für t, und der kleinste positive Wert ist der Fall, der kollidiert - ic nenne ihn jetzt t_k.

Wenn du die Kollision gefunden hast, kannst du folgendermaßen vorgehen:

Kollision rechts oder links: X-Komponente von v invertieren ("Vorzeichen umdrehen" bzw. "mal minus eins nehmen")
Kollision oben oder unten: Y-Komponente von v invertieren

ergibt v_neu

Neuer Ortsvektor ist s(t_k)

[ Mit dem neuen Ortsvektor kannst du auch vom alten zum neuen ne Linie auf dein Canvas zeichnen ]

Damit erhältst du eine neue Bewegungsgleichung:

s2(t2) = s(t_k) + t2 * v_neu

Jetzt kannst du weieder von vorne anfangen.

Beenden, wenn du genügend Schritte hast.

Falls du etwas nicht verstanden hast, frage ruhig nach

MfG,
Julius
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.029 Beiträge
 
Delphi 12 Athens
 
#9

Re: Ausfallswinkel berechnen und mit Canvas einzeichnen

  Alt 15. Okt 2008, 18:00
Delphi-Quellcode:
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
const
  cMax = 5;
var
  X0, X1: Integer;
  Y0, Y1: Integer;
  W, H: Integer;
  R: TRect;
  count: Integer;

  procedure MirrorY(Value: Integer); forward;

  procedure MirrorX(Value: Integer);
  begin
    if Count > cMax then Exit;
    X := Value;
    Y := Round(Y0 + (X - X0)*(Y1 - Y0)/(X1 - X0));
    if Y < R.Top then
      MirrorY(R.Top)
    else if Y > R.Bottom then
      MirrorY(R.Bottom)
    else begin
      Inc(Count);
      X1 := 2*X - X1;
      Canvas.LineTo(X, Y);
      X0 := X;
      Y0 := Y;
    end;
  end;

  procedure MirrorY(Value: Integer);
  begin
    if Count > cMax then Exit;

    Y := Value;
    X := Round(X0 + (Y - Y0)*(X1 - X0)/(Y1 - Y0));
    if X < R.Left then
      MirrorX(R.Left)
    else if X > R.Right then
      MirrorX(R.Right)
    else begin
      Inc(Count);
      Y1 := 2*Y - Y1;
      Canvas.LineTo(X, Y);
      X0 := X;
      Y0 := Y;
    end;
  end;

begin
  Self.Repaint;
  W := Shape1.Width div 2;
  H := Shape1.Height div 2;
  X0 := Shape1.Left + W;
  Y0 := Shape1.Top + H;

  with Shape2 do
    R := Rect(Left + W, Top + H, Left + Width - W, Top + Height - H);

  W := Shape2.Width;
  if shape2.Height > W then
    W := shape2.Height;

  Canvas.MoveTo(X0, Y0);
  X1 := X0 + 5*W*(X - X0);
  Y1 := Y0 + 5*W*(Y - Y0);
  Count := 0;
  while Count < cMax do begin
    if X1 < R.Left then
      MirrorX(R.Left)
    else if X1 > R.Right then
      MirrorX(R.Right)
    else if Y1 < R.Top then
      MirrorY(R.Top)
    else if Y1 > R.Bottom then
      MirrorY(R.Bottom)
    else
      Break;
  end;
  Canvas.LineTo(X1, Y1);
end;

procedure TForm1.Shape2MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  self.Repaint;
  Canvas.MoveTo(shape1.Left + (Shape1.Width div 2), Shape1.Top + (Shape1.Height div 2));
  Canvas.LineTo(shape2.Left + X, shape2.Top + Y);
end;
Uwe Raabe
  Mit Zitat antworten Zitat
Onkelrossie

Registriert seit: 7. Aug 2006
43 Beiträge
 
Delphi 7 Architect
 
#10

Re: Ausfallswinkel berechnen und mit Canvas einzeichnen

  Alt 15. Okt 2008, 18:18
@jfheins, danke für deine Anleitung aber leider habe ich keine Ahnung wie du das mit den Vektoren meinst.

@Uwe Raabe, du hast mir eben den Abend gerettet!
Klappt wunderbar und ist auch einfach nachzuvollziehen. DANKE!


Gruß
Onkelrossi
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 20:11 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