Tutorial falsch?!

Status
Nicht offen für weitere Antworten.

Reality

Top Contributor
Hi,
ich habe mit Hilfe eines Tut ein Ping Pong Game programmiert. Bzw. Ich habe mit nur das erst Kapitel angeschaut wie man ein Ball bewegt, den Rest überflogen und alles alleine gemacht.
Ein Fehler ist mir jedoch aufgefallen:

...
Vielleicht fragt ihr euch nun, warum ich den Radius mit einbeziehe. Die x - Koordinate des Balles ist seine Mitte, also ist die rechte bzw. linke Koordinate um den Radius des Balles größer bzw. kleiner.
...

Als ich das dann bei mir übernahm, sackte mein Ball immer zur Hälfte ein.

Ich zeichnete also eine Linie, um mir die wahre x-Koordinate auszugeben und das Ergebnis war folgeder:

x.JPG


Der Ball wurde als als Quadrat angesehen und links oben begann die x-Koordinate. Nach dieser Kenntniss konnte ich dann den Ball richtig abprallen lassen.

Nun, bin ich bei einem anderen Tutorial, aber von derselben Seite und da schreibt der Autor folgendes zu einem Problem, wo es darum geht, wie ein Ball bemerkt, dass er von einem Mauszeiger abgeschossen wurde:


Nun denn, die dritte Idee: Aus der Schule dürfte den meisten noch der Begriff eines Vektors geläufig sein. Wir haben es hier nun zwei Vektoren zu tun, die bei einem Schuss entstehen: Einem Schussvektor (x_maus, y_maus) des Mausklicks und einem Positionsvektor des Balles (x_ball, y_ball). Wenn wir nun die Länge des Verbindungsvektors dieser beiden Vektoren bestimmen und dieser kleiner als der Radius des Balles ist, so haben wir den Ball getroffen.
Zunächst berechnen wir also den Verbindungsvektor indem wir die Koordinaten des einen Vektors von denen des Anderen abziehen:

// Bestimmen des Verbindungsvektors
double x = maus_x - pos_x;
double y = maus_y - pos_y;

Nun können wir mit Hilfe des Skalarproduktes bzw. Pythagoras (c = Wurzel aus a² + b²) die Länge dieses Verbindungsvektors bestimmen:

// Berechnen der Distanz
double distance = Math.sqrt ((x*x) + (y*y));

Als letzten Schritt testen wir, ob die Länge dieses Vektors kleiner ist als ein gewisser Betrag, bis zu dem wir den Ball noch als getroffen ansehen. Ich habe für diese Zahl 15 gewählt obwohl der Ball nur einen Radius von 10 hat. Aber nachdem ich einige Werte getestet habe, erschien mir dieser Wert als der am besten taugliche.

// Wenn Distanz kleiner als 15 gilt Ball als getroffen
if (distance < 15)
{
player.addScore (20);
return true;

}
else return false;

Ein Vektor hat 2 Punkte und ein Punkt hat eine x-Koordinate und eine y-Koordinate. Also ist der angebliche Schussvektor nur ein Punkt, genauso wie der Positionsvektor des Balles.

Die beiden Punkte können nun einen Vektor ergeben. Aber mit einem Vektor kann man nicht den Satz des Pythagoras anwenden. Sein Erfolg ist also nur ein Zufallsprodukt mit Ungenauigkeiten, was auch das beweisst, dass er als Differenz 15 und nicht 10 nahm. Ausserdem spricht er wieder von Radius, aber wie oben schon bewiesen (siehe Screenshot) ist der x-Wert nicht der radius, sondern der Durchmesser.

Habe ich nun Recht oder irre ich mich fatal?!

Quelle

Liebe Grüße
Reality
 
B

bygones

Gast
Habe dem Autor Bescheid gegeben - vielleicht antwortet er :D
 
B

Beni

Gast
...
Vielleicht fragt ihr euch nun, warum ich den Radius mit einbeziehe. Die x - Koordinate des Balles ist seine Mitte, also ist die rechte bzw. linke Koordinate um den Radius des Balles größer bzw. kleiner.
...

Das ist schon eine gute Idee, wenn man mit der Mitte des Balles arbeitet (es erleichtert spätere Berechnungen wie die Abstandsberechnung), aber man muss halt daran denken, dass Java anderst zeichnet.
-> Ich würde da einfach die Zeichung (g.drawOwal...) so abändern, dass die Koordinaten tatsächlich in der Mitte sind.

Ein Vektor hat 2 Punkte und ein Punkt hat eine x-Koordinate und eine y-Koordinate. Also ist der angebliche Schussvektor nur ein Punkt, genauso wie der Positionsvektor des Balles.

Die beiden Punkte können nun einen Vektor ergeben.

Die Unterscheidung Punkt-Vektor wird zwar oft verwendet (weil man sich mehr darunter vorstellen kann), aber eigentlich sind Punkt und Vektor dasselbe: eine geordnete Menge von Zahlen. Man kann ein Punkt als Vektor und umgekehrt betrachten, ohne irgendwas zu verlieren.

Aber mit einem Vektor kann man nicht den Satz des Pythagoras anwenden.
In einem orthogonalen Koordinatensystem :)bae:) ist die Länge eines Vektors durch den Satz des Pythagoras definiert :wink:

Sein Erfolg ist also nur ein Zufallsprodukt mit Ungenauigkeiten, was auch das beweisst, dass er als Differenz 15 und nicht 10 nahm.
Wie er auf 15 kam, kann ich mir auch nicht erklären... das einzige, was mir sinnvoll erscheint ist immer noch 10 (vielleicht 9, falls der Ball "eingedrückt" werden soll)

Ausserdem spricht er wieder von Radius, aber wie oben schon bewiesen (siehe Screenshot) ist der x-Wert nicht der radius, sondern der Durchmesser.
Kommt immer draufan, wie man das zeichnet. :wink:
Das wäre wohl am besten:
Code:
g.fillOval( x - radius, y - radius, radius*2, radius*2);
 

Reality

Top Contributor
Beni hat gesagt.:
Die Unterscheidung Punkt-Vektor wird zwar oft verwendet (weil man sich mehr darunter vorstellen kann), aber eigentlich sind Punkt und Vektor dasselbe: eine geordnete Menge von Zahlen. Man kann ein Punkt als Vektor und umgekehrt betrachten, ohne irgendwas zu verlieren.
Soweit ich weiss geht das höchstens, wenn man den Usprung auch als Punkt ansieht.
Ein Vektor ist ja nichts anderes als eine Gerade mit Intervallen.

Aber mit einem Vektor kann man nicht den Satz des Pythagoras anwenden.
In einem orthogonalen Koordinatensystem :)bae:) ist die Länge eines Vektors durch den Satz des Pythagoras definiert :wink:
Wie soll denn das gehen, wenn der Vektor z.B. die Mitter eines orthogonalen Koordinatensystems teilt? Der Satz des Pythagoras erforder doch einen Dreieck.

Ausserdem spricht er wieder von Radius, aber wie oben schon bewiesen (siehe Screenshot) ist der x-Wert nicht der radius, sondern der Durchmesser.
Kommt immer draufan, wie man das zeichnet. :wink:
Das wäre wohl am besten:
Code:
g.fillOval( x - radius, y - radius, radius*2, radius*2);

Ach mist, hatte vergessen, dass ich einen anderen Code hatte. Er hat sein PingPong Ball nämlich genauso definiert. Ich erkannte den Sinn darin nicht und habe das "-radius" weggelassen, so dass der x-Wert zum Durchmesser wurde.

Also zur Berechnung. Stimmt sie nun? Falls ja, kann sie mir jemand erklären? Noch besser aufzeichnen?

@deathbyaclown:
Dein Ernst?!

Liebe Grüße
Reality
 
B

Beni

Gast
Reality hat gesagt.:
Beni hat gesagt.:
Die Unterscheidung Punkt-Vektor wird zwar oft verwendet (weil man sich mehr darunter vorstellen kann), aber eigentlich sind Punkt und Vektor dasselbe: eine geordnete Menge von Zahlen. Man kann ein Punkt als Vektor und umgekehrt betrachten, ohne irgendwas zu verlieren.
Soweit ich weiss geht das höchstens, wenn man den Usprung auch als Punkt ansieht.
Ein Vektor ist ja nichts anderes als eine Gerade mit Intervallen.
Gerade mit Intervallen? Ich verstehe nicht, was du damit meinst.

Reality hat gesagt.:
Aber mit einem Vektor kann man nicht den Satz des Pythagoras anwenden.
In einem orthogonalen Koordinatensystem :)bae:) ist die Länge eines Vektors durch den Satz des Pythagoras definiert :wink:
Wie soll denn das gehen, wenn der Vektor z.B. die Mitter eines orthogonalen Koordinatensystems teilt? Der Satz des Pythagoras erforder doch einen Dreieck.

forum_021.png
 

Reality

Top Contributor
Beni hat gesagt.:
Gerade mit Intervallen? Ich verstehe nicht, was du damit meinst.

Eine Gerade ist nichts anderes als ein Vektor. Eine Gerade jedoch hat kein Anfang und kein Ende. Es geht von minus unedlich bis plus unendlich. Daher ist ein Vektor eine Gerade mit Intervallen (Eingrezungen. Also der Vector geht von Punkt1 bis Punkt2 und nicht weiter).

Zu deiner Zeichnung:

Wie ist es hiermit?!

vector.GIF


Liebe Grüße
Reality
 
Hi!

Den von Reality gezeichneten Vector kann man in den Ursprung verschieben und dann wie von Illuvatar beschrieben seine Länge berechnen. Da es ja hier um mein Tutorial geht: Bei Fragen kann man mir gerne auch direkt schreiben, in der Regel antworte ich sogar, gell Reality :wink:
 

Reality

Top Contributor
Hi,
ist mir beim Autogenen Training auch aufgefallen, dass er sich zum Ursprung verschieben lässt.
Ich werd mir jedenfalls das mit den Koordinaten durch den Kopf gehen lassen.
Mal sehen ob ich morgen dazu komme.

Liebe Grüße
Reality
 

Reality

Top Contributor
Ok, jetzt weiss ich wieder was mein Problem war:

pythagoras.GIF


c ist weder der Radius noch der Durchmesser, da c nicht durch den Ursprung geht und darum ist die Rechnung meiner Auffassung nach falsch. :noe:

Liebe Grüße
Reality
 
B

Beni

Gast
Reality hat gesagt.:
Eine Gerade ist nichts anderes als ein Vektor. Eine Gerade jedoch hat kein Anfang und kein Ende. Es geht von minus unedlich bis plus unendlich. Daher ist ein Vektor eine Gerade mit Intervallen (Eingrezungen. Also der Vector geht von Punkt1 bis Punkt2 und nicht weiter).

Gegenbeweis:
Im 3-dimensionalen Raum: hat ein Vektor 3 Variablen (x, y, z).
Aber eine Gerade lässt sich nur mit 6 Variablen, einem Fixpunkt und einer Richtung, darstellen (allenfalls könnte man 2 spezielle Ebenen schneiden, dann kommt man auf 4 Variablen), deshalb kann eine Gerade kein Vektor sein. :D

Spass beiseite, ich glaub ich weiss, was Du sagen willst. Aber ich glaube, die Gerade macht die Sache eher komplizierter als einfacher... (Vielleicht hast Du auch gerade eine neue Mathematik erfunden, die Mathematik ist da unberechenbar und die tollsten Durchbrüche geschehen manchmal einfach so).

Es ging mit aber oben vorallem um die netten Förmelchen, die immer funktionieren, egal ob man an Vektoren oder Punkte denkt.

Ein Beispiel:
Code:
a = (ax, ay), b = ( ... ), c = (...)
a - b = c

Egal ob a und/oder b ein Vektor/Punkt ist, die Gleichung sieht immer gleich aus (auch wenn man sie ausschreibt). Und man kann munter Vektoren und Punkte tauschen, ohne dass was Schlimmes passiert.
 

Reality

Top Contributor
Hi,
kannst du mir mal eine Rechnung als Beispiel geben?
Kann mir das nicht so richtig vorstellen, denn Vektoren bestehen für mich immernoch aus 2 Punkten.
Ich würde deine Aussage verstehen, wenn der Ursprung (0/0) ebenfalls als Punkt hinzugezählt wird.

Liebe Grüße
Reality
 
B

Beni

Gast
Mal hoffen, wir sprechen jetzt vom gleichen.

Diese Formel...
Code:
ax - bx = cx
ay - by = cy
... beschreibt, wie man aus zwei Punkten (a, b) einen Vektor (c) berechnen kann.
Code:
Punkt - Punkt = Vektor

Aber diese Gleichung beschreibt noch mehr, nämlich das Verschieben von Punkten.
Code:
Punkt - Vektor = Punkt

Du siehst: c war jetzt einmal ein Vektor, und einmal ein Punkt.
Und so kann man beliebig weitertauschen. Das Ergebnis macht vielleicht geometrisch gesehen keinen Sinn mehr
Code:
Punkt - Punkt = Punkt ??
aber die Gleichung ergibt nicht plötzlich ein Widerspruch (1 = 2 oder sowas), also ist auch diese Kombination legal.
 

Reality

Top Contributor
Achso, meinst du das. :)
Ja, soweit habe ich auch mal gedacht, bis ich wie oben bereits das Problem schilderte, dass meiner Auffassung nach c weder Radius noch Durchmesser ist, da es nicht durch den Ursprung geht.

Meiner Auffasung nach, ist das der Durchmesser, wenn folgendes zutrifft.

Code:
Math.abs(mousex - xBall) = 0
oder
Math.abs(mousey - yBall) = 0

Wenn einer der beiden Ergebnisse 10 oder kleiner ist, dann wurde getroffen.

Liebe Grüße
Reality
 

Reality

Top Contributor
Also bei mir geht folgender Code mit dem Radius 10 wunderbar!

Code:
	public boolean userHit (int maus_x, int maus_y)
	{
		// Bestimmen der Verbindungsvektoren
		double x = Math.abs(maus_x - pos_x);
		double y = Math.abs(maus_y - pos_y);

		// Wenn Distanz kleiner als 10 gilt Ball als getroffen
		if (x < 10 && y <10)
		{
			player.addScore (10*Math.abs(x_speed) + 10);
			return true;
		}
		else return false;
	}

Ich glaube nicht, dass der Code vom Tutorial stimmt.

Liebe Grüße
Reality
 
B

Beni

Gast
Auf diese Art betrachtest du den Ball einfach als Rechteck. Das Rechteck kommt halt nahe an einen Kreis ran, deshalb funktioniert es.
Aber es wird auch Punkte geben, wenn du in z.B. ein bisschen oben-links vom Ball deine Maus hast, was es bei der anderen Variante nicht geben wird.
 

Reality

Top Contributor
Wenn die andere Lösung präziser sein soll, dann möchte ich gerne wissen warum.
Auf Seite1 habe ich schon erklärt, warum c weder Radius noch Durchmesser sein kann.

Liebe Grüße
Reality
 
B

bygones

Gast
ich finde es sehr interessant wie eisern du deine Meinung hier vertritts obwohl schon zig gegenbeispiele / -erklärungen gegeben wurden.... wenn du so davon überzeugt bist mach es doch so
 
B

Beni

Gast
Weil es die Definition eines Kreises ist (Abstand zum Mittelpunkt <= der Radius, und der Abstand kann man über die Länge des Vektors berechnen. Und die Länge kann man in diesem Fall über den Phytagoras berechnen. Sorry, mehr als das kann ich dir auch nicht mehr sagen, glaub es einfach - es stimmt)

Ich hab mal ein maus_x = maus_y = 3 angenommen, und die beiden Formeln zeichnen lassen:

forum_022.png


Du siehst: die beiden Figuren sehen fast gleich aus, aber die linke ist ein Rechteck, und die rechte ein Kreis.

Naja, bei einem Durchmesser von 20 Pixel würde man davon halt nicht mehr soviel sehen.
 

Reality

Top Contributor
Hi,
diese Beispiele besagten, dass Punkt und Vektor dasselbe ist und man in eine orthogonalen Koordinatensystem mindestens 2 Vectoren hat.
Da stimme ich auch zu!
Nur hat das ganze nichts mehr mit dem Post zu tun, wo ich meine letzte Zeichnung gepostet habe.

Liebe Grüße
Reality

EDIT: War an deathbyaclown gerichtet. Sehe erst jetzt Benis Post und lese es mir durch.
 

Reality

Top Contributor
Mensch! Ich hatte das aus total falscher Sicht gesehen, warum sagt mir das keiner! :D

So habe ich es immer betrachtet und hielt es deswegen für falsch:

falsch.PNG


Das Rote sind die x und y Koordinaten der Maus.

So die richtige Betrachtung:

richtig.PNG


Danke jedenfalls für eure Geduld! :)

Liebe Grüße
Reality
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Finalspace Entwicklung eines Jump & Run Spiels Video-Tutorial Spiele- und Multimedia-Programmierung 12
Ruvok Java3D Tutorial gesucht Spiele- und Multimedia-Programmierung 5
K FBO Framebuffer object [LWJGL] 2D tutorial gesucht Spiele- und Multimedia-Programmierung 2
M Spiele Tutorial.. Findet Bilddateien nicht Spiele- und Multimedia-Programmierung 6
F quaxlis tile map programming tutorial prob Spiele- und Multimedia-Programmierung 4
codestück shader tutorial Spiele- und Multimedia-Programmierung 4
A Drawable und Moveable in Quaxli 2D Spiele Tutorial Spiele- und Multimedia-Programmierung 7
Helgon OpenGL vernünftige Tutorial? Spiele- und Multimedia-Programmierung 22
H Jump&Run Tutorial Spiele- und Multimedia-Programmierung 3
Gossi Quaxlis 2D Tutorial....Probleme nach hinzufügen der Kollisionsabfrage Spiele- und Multimedia-Programmierung 16
Gossi Probleme beim Laden der Images aus dem "Tutorial für Java-Spiele" Spiele- und Multimedia-Programmierung 4
E Quaxli Tutorial Problemchen Spiele- und Multimedia-Programmierung 3
X Gutes 2D Spiele Tutorial? Spiele- und Multimedia-Programmierung 9
F Suche Tutorial zu "purem" OpenGL mit Java Spiele- und Multimedia-Programmierung 10
S Probleme mit Tutorial Spiele- und Multimedia-Programmierung 3
H Repaint-Problem mit Quaxlis Tutorial Spiele- und Multimedia-Programmierung 2
O Suche Tutorial zum Aufbau von großen Spielen(mit Multiplayer über Netzwerk...) Spiele- und Multimedia-Programmierung 3
M Problem mit 2D-Spieleprogrammierung Tutorial von Quaxli Spiele- und Multimedia-Programmierung 7
A Java3D tutorial? Spiele- und Multimedia-Programmierung 3
prakdi Probleme mit Quaxlis tutorial Spiele- und Multimedia-Programmierung 5
I Bilder aus Quaxli's Tutorial Spiele- und Multimedia-Programmierung 3
radiac Sprit ist leer bei Quaxli´s Heli Tutorial Spiele- und Multimedia-Programmierung 28
H Tutorial von Quaxli (Problem) Spiele- und Multimedia-Programmierung 16
hdi gutes Tutorial zu 3d->2d Projektion? Spiele- und Multimedia-Programmierung 13
hdi Das java-forum.org 2D-Game Projekt/Tutorial Spiele- und Multimedia-Programmierung 6
A Tutorial für die Entwicklung einer Fussball-KI gesucht Spiele- und Multimedia-Programmierung 7
K Game-Tutorial von Quaxli Fragen Spiele- und Multimedia-Programmierung 18
M Flugbahnberechnung (Quaxlis Tutorial) Spiele- und Multimedia-Programmierung 5
G frage zu tutorial Spiele- und Multimedia-Programmierung 3
S Problem mit Physik-Tutorial Spiele- und Multimedia-Programmierung 5
G suche das tutorial für den space invaders Spiele- und Multimedia-Programmierung 2
Z Suche Tutorial zum Einstieg in OpenGl mit Java (JOGL) Spiele- und Multimedia-Programmierung 2
X JPCT 3d-Spiele Programmierung Tutorial Spiele- und Multimedia-Programmierung 40
X 3D Spiele Tutorial gewünscht? Spiele- und Multimedia-Programmierung 14
M Suche Games tutorial mit JOGL Spiele- und Multimedia-Programmierung 8
conan2 Partikelsystem(-tutorial)? Spiele- und Multimedia-Programmierung 3
P Suche Tutorial für Multiplayer Spiele- und Multimedia-Programmierung 2
H Bemerkungen zu 2. Tutorial Spiele- und Multimedia-Programmierung 3
I Java 3d tutorial Spiele- und Multimedia-Programmierung 2
I Java3D-Tutorial, die zweite. Spiele- und Multimedia-Programmierung 9
N gutes Tutorial Spiele- und Multimedia-Programmierung 6
O Libgdx - Wiedergabe von Bildschirmgröße ist falsch Spiele- und Multimedia-Programmierung 0
A Spielball bewegt sich nicht richtig, prallt falsch ab Spiele- und Multimedia-Programmierung 7
B Game of Life: Was mache ich falsch? Spiele- und Multimedia-Programmierung 3
O OpenGL - Texture falsch herum Spiele- und Multimedia-Programmierung 3
Creylon [LWJGL] Textur wird falsch angezeigt Spiele- und Multimedia-Programmierung 12
K Bewegung falsch Spiele- und Multimedia-Programmierung 6
M Karte wird falsch gezeichnet Spiele- und Multimedia-Programmierung 9
H image.setRGB() zeichnet falsch Spiele- und Multimedia-Programmierung 3

Ähnliche Java Themen

Neue Themen


Oben