AGB  ·  Datenschutz  ·  Impressum  







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

Wie bringe ich den Ball ins Rollen?

Ein Thema von Fussel9 · begonnen am 16. Nov 2009 · letzter Beitrag vom 16. Nov 2009
Antwort Antwort
Seite 3 von 4     123 4      
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.798 Beiträge
 
Delphi 12 Athens
 
#21

Re: Wie bringe ich den Ball ins Rollen?

  Alt 16. Nov 2009, 17:21
Fussel, ich nehme an Deine Kugel ist in der abgebildeten Situation gerade vom rechten Paddel losgeflogen... sonst passt das Dreieck nicht.

Den Winkel kennst Du schon, hatte ich zumindest aus Deinem Anfangspost gelesen. Was Du jetzt brauchst ist eine Veränderung der Position der Kugel auf der Hypotenuse. Dazu musst Du dir verinnerlichen, daß die Bewegung der Kugel eben zwei Bestandteile hat: Einen waagrechten und einen senkrechten Teil. Das ganze in ein Koordinatensystem gemalt macht es Dir deutlicher. WEnn Du gleich noch berücksichtigst, daß in Delphi das Koordinatensystem oben links seinen Ursprung (x=0 und y=0) hat, und x bei Delphi mit Left und y eben mit Top bezeichnet werden kann, dann bist Du ein ganzes Stück weiter.

Um die Kugel zu bewegen musst Du sie also um ein paar Pixel in X-Richtung und ein paar Pixel in Y-Richtung bewegen. Such Dir eines davon aus, das andere kannst Du dann berechnen. Nehmen wir mal an, Du willst die Y-Richtung vorgeben, dann mal in Dein Bild einfach von Deiner Kugel ausgehend einen Strich von Oben nach Unten. Dieser Strich ist parallel zur Ankathete. Die Länge des Strichs kennst Du ja, hast Du selber vorgegeben. Um Dein Dreieck vollzukriegen musst Du einfach einen weiteren Strich vom Ende Deines ersten Strichs malen, bis er wieder durch die Hypothenuse geht. Die länge dieses Strichs kannst Du ausrechnen, denn Dir ist bekannt: Länge der neuen Ankathete und der Winkel ist gleich geblieben(!!!!)

Aus der Formel: tan(a) = Gegenkathete/Ankathete müsstest Du jetzt was machen können

Sherlock
Oliver
  Mit Zitat antworten Zitat
Benutzerbild von Wolfgang Mix
Wolfgang Mix

Registriert seit: 13. Mai 2009
Ort: Lübeck
1.222 Beiträge
 
Delphi 2005 Personal
 
#22

Re: Wie bringe ich den Ball ins Rollen?

  Alt 16. Nov 2009, 17:25
Sorry, die Antwort war an jfheins gerichtet, nicht an Dich.
Inzwischen glaube ich aber, daß Du ohne Mathe-Kenntnisse nicht weiterkommst.
Auch wenn wir hier Codeschippsel liefern würden, glaube ich, Du wirst sie
nicht verstehen. Deswegen bleibe ich erstmal im Hintergrund.

Gruß

Wolfgang
Wolfgang Mix
if you can't explain it simply you don't understand it well enough - A. Einstein
Mein Baby:http://www.epubli.de/shop/buch/Grund...41818516/52824
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.685 Beiträge
 
Delphi 2007 Enterprise
 
#23

Re: Wie bringe ich den Ball ins Rollen?

  Alt 16. Nov 2009, 17:30
Ich bin mittlerweile schwer davon überzeugt, dass der TE es einfach nicht verstehen will, und dies uns noch so oft in suizid-naher Weise vorlamentieren wird bis wieder irgend ein Schnösel ein weichers Herz kriegt, ihm fertigen (und vermutlich noch grottig formatierten) Quellcode vor die Füße wirft, mit dem er dann in 4 Tagen wieder hier auf der Matte stehen wird, weil es ohne das Verständnis irgendwie nicht möglich war das zweite Paddel einzubauen


Edit: @fussel: Wenn du mit "einfacheren" trigonometrischen Funktionen auskommen willst, mach's vektoriell! Da brauchts nur an einer Stelle einen Sinus und einen Cosinus.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von Wolfgang Mix
Wolfgang Mix

Registriert seit: 13. Mai 2009
Ort: Lübeck
1.222 Beiträge
 
Delphi 2005 Personal
 
#24

Re: Wie bringe ich den Ball ins Rollen?

  Alt 16. Nov 2009, 17:34
Wolfgang Mix
if you can't explain it simply you don't understand it well enough - A. Einstein
Mein Baby:http://www.epubli.de/shop/buch/Grund...41818516/52824
  Mit Zitat antworten Zitat
shmia

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

Re: Wie bringe ich den Ball ins Rollen?

  Alt 16. Nov 2009, 18:06
Eine Reflektion an waagerechten oder senkrechten Linien ist eigentlich ganz einfach.
Ein Ball hat in x- und y-Richtung eine bestimmte Geschwindigkeit.
Diese kann positiv oder negativ sein und sollte eine Flieskommazahl (oder Festkommazahl) sein.
Trifft der Ball auf eine senkrechte Wand ändert sich nur die Geschwindigkeit in x-Richtung:
speed_x := speed_x * (-1.0); // bzw. speed_x := -speed_x Bei einer waagerechten Wand gilt das analog für die Y-Geschwindigkeit.
Nur wenn die Reflektionsebene schräg zum Koordinatensystem stehen braucht man die trig. Funktionen.

Hier ungetestet eine Reflektion an einer senkrechten Wand:
Delphi-Quellcode:
// neue Position berechnen
ball_x := Round(ball_x+speed_x);
ball_y := Round(ball_y+speed_y);

// 500 ist der X-Wert der senkrechten Wand
if ball_x > 500 then
begin
  // ball ist quasi nach rechts durch die Wand geschlagen
  // also muss er genau um dieses Stückchen zu viel zurückgespiegelt werden

  ball_x := ball_x - 2 *(ball_x-500); // spiegeln
  
  speed_x := -speed_x; // die neue Geschwindigkeit
end;
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von Fussel9
Fussel9

Registriert seit: 25. Mai 2009
322 Beiträge
 
Turbo Delphi für Win32
 
#26

Re: Wie bringe ich den Ball ins Rollen?

  Alt 16. Nov 2009, 20:17
@ Sherolck

DANKE
das war eine hilfreiche Antwort, hab da noch mal eine Skizze gemacht kannst du mir da vielleicht noch mal drüberschaun?

@ Medium

Was bis du denn für einer?
Hast in dem ganzen Thread noch nix geschrieben und kommst dann an und laberst was von suizidal und nicht verstehen wollen ....
Machst du das immer so???

Mit verweis zum Mod--> was haben solche Leute hier zu suchen?
Miniaturansicht angehängter Grafiken
pong_719.jpg  
  Mit Zitat antworten Zitat
Benutzerbild von Lumpiluk
Lumpiluk

Registriert seit: 25. Dez 2008
110 Beiträge
 
#27

Re: Wie bringe ich den Ball ins Rollen?

  Alt 16. Nov 2009, 20:37
Wo wir gerade dabei sind:
Wann lernt man in der Schule sowas mit Tangens, Sinus, Cosinus, Kreisberechnung, Vektorenberechnung etc.?! Ich bin jetzt in der 10. Klasse und bis jetzt hatten wir nur Kreisberechnung einmal kurz in Physik beim elektrischen Widerstand angesprochen
Das würde mich im Moment eher interessieren.


Ein Pong-Spiel habe ich auch irgendwann mal geschrieben. Das mit der Reflektion habe ich genauso gemacht, wie shmia das schon beschrieben hat. Man kann zum Beispiel zwei Real-Variablen nehmen, die am Anfang mit einem Beliebigen Wert füllen (1,1 würde mit Canvas dann bedeuten, dass der Ball nach unten rechts 'rollt') und den Ball nach einem bestimmten Zeitintervall um diese Werte verschieben. Bei einem Aufprall werden die dann entsprechend mit -1 multipliziert...
Wenn du willst, kannst du nach einem Aufprall am Paddel je nach Entfernung zu dessen Mittelpunkt die Richtung ändern!

Ist vielleicht nicht die beste Lösung, aber so konnte ich mich vor Winkelberechnungen drücken
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.685 Beiträge
 
Delphi 2007 Enterprise
 
#28

Re: Wie bringe ich den Ball ins Rollen?

  Alt 16. Nov 2009, 20:42
Lies dir deine Beiträge einfach nochmal nacheinander durch, und sag mir wie ich mir dabei nicht vorstellen soll wie du schon mit Schlinge um den Hals vorm PC sitzt und deine Neuronen in Richtung "was neues lernen" abgedichtet hast? Und DANN in Beitrag 20 auch noch patzig werden, pfft.
(Man kann nämlich sogar hervorragend Hilfe bekommen, ohne sich auf Staubkörnchengröße klein zu machen und verbal wie unwürdiger Bauer vorm Kaiser rumzurutschen. Die Art kann ich ja so GARnicht. Und ich bin mir auch nicht zu schade das direkt und ohne rosa Tufftuff zu sagen.)

Ich wüsste jetzt auch nicht, warum es nötig gewesen wäre vorher was hier zu schreiben (da als ich den Thread gelesen hab eh schon alles da stand). Zudem hab ich sogar einen Tipp gegeben, sogar einen garnicht mal so schlechten auf lange Sicht gesehen. War wohl ein Fehler
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von Fussel9
Fussel9

Registriert seit: 25. Mai 2009
322 Beiträge
 
Turbo Delphi für Win32
 
#29

Re: Wie bringe ich den Ball ins Rollen?

  Alt 16. Nov 2009, 20:50
Kann mal jemand diesen Typen abstellen?
der nervt und trägt absolut nix bei ...?!
Deine Beiträge sind einzig und allein wertend und falls du glaubst du kannst uns mit deinem Psycho geblubber einlullen dann hast du dich geschnitten, oh entschuldige das war nur Bildlich gemeint!
Versuchs doch einfach mal mit GRILLED CHEESE

@ Lumpiluk
macht man in der 11 ten bzw am ende der 10 viel spaß dabei^^
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#30

Re: Wie bringe ich den Ball ins Rollen?

  Alt 16. Nov 2009, 21:17
Zitat von Lumpiluk:
Wo wir gerade dabei sind:
Wann lernt man in der Schule sowas mit Tangens, Sinus, Cosinus, Kreisberechnung, Vektorenberechnung etc.?! Ich bin jetzt in der 10. Klasse und bis jetzt hatten wir nur Kreisberechnung einmal kurz in Physik beim elektrischen Widerstand angesprochen
Das würde mich im Moment eher interessieren.
Hängt wohl vom Bundesland ab, bei mir (Hessen) kam es in der 9. Klasse dran, was regulär der 10. Klasse entspricht (war in einer G8-Klasse, die von unserer Schule freiwillig angeboten wurde). Allerdings ist die Trigonometrie, die man für Pong braucht, so billig, dass ich sie schon Jahre vorher angewendet habe, ohne zu wissen, dass man das "Trigonometrie" nennt.

Alles was man wissen muss ist folgendes:

cos(Alpha) gibt den Wert zurück, den man zur X-Koordinate hinzuaddieren muss, um sich in die entsprechende Richtung zu bewegen.
sin(Alpha) tut das gleiche für die Y-Koordinate.

sin() und cos() geben jeweils Gleitkommawerte im Bereich von -1 bis +1 zurück, das heißt, wenn man sich mit einer anderen Geschwindigkeit als 1 Pixel pro Zeiteinheit bewegen will, muss man die Werte mit einem Faktor - quasi der Geschwindigkeit - multiplizieren.

Dann gilt es noch zu beachten, dass Alpha im Bogenmaß statt im Gradmaß angegeben werden muss, was sich aber komplizierter anhört als es ist. Letztendlich bedeutet es bloß, dass Alpha im Bereich von 0 bis 2*Pi liegt, statt wie im Gradmaß von 0 bis 360. Umrechnen kann man die Einheiten ganz einfach per Dreisatz, oder man bedient sich der Funktionen aus der Unit math.

Wenn man statt eines Winkels die Geschwindigkeiten in der X- und Y-Richtung gegeben hat, bekommt man den Winkel über den Arcustangens heraus:
Alpha = arctan(Y/X);
Das Verhältnis von Y zu X bezeichnet man als Tangens, daher heißt die Funktion auch Arcustangens. Die Umrechnung ist möglich, weil der Tangens im Grunde auch nur eine andere Darstellungsform für den Winkel ist, was einem auch klar wird, wenn man mal etwas darüber nachdenkt. Ausnahme: Man kann die beiden Winkel 0° und 180° nicht voneinander unterscheiden, außerdem gibt es bei 90° und 270° eine Division durch 0. Daher sind hier im Vorfeld zusätzliche abfragen nötig, die man sich aber sparen kann, wenn man einfach gleich die Funktion arctan2() aus der Unit math benutzt.
Alpha = arctan2(Y, X);

Der Vollständigkeit halber noch wie man die Geschwindigkeit ausrechnet: Wie bereits erwähnt hast du durch die X- und Y-Geschwindigkeit die beiden Katheten (="kurze Seiten") eines rechtwinkligen Dreiecks gegeben. Die Geschwindigkeit entspricht also der Hypothenuse, die sich mit dem Satz des Pythagoras ausrechnen lässt:
C = sqrt(sqr(A) + sqr(B));

Ein Vektor ist übrigens eigentlich nichts anderes als das, was du unter Delphi als (eindimensionales) Array kennst, also eine Variable, die sich aus mehr als einem Wert zusammensetzt. Die Kombination von X- und Y-Koordinate ist also ein Vektor. Ebenso wäre die Kombination von Geschwindigkeit und Winkel ein Vektor.
Mit Vektoren kannst du ähnlich rechnen wie mit skalaren Werten (= normaler, eindimensionaler Wert), z.B. kannst du sie addieren und subtrahieren, indem du jeweils die X- und Y-Werte von zwei Vektoren zusammenaddierst. Es gibt auch kompliziertere Operationen, die bei mir aber leider auch noch nicht im Unterricht behandelt wurden, und aus Wikipedia bin ich zugegebenermaßen auch nicht wirklich schlau geworden.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 4     123 4      


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 12:27 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