Ziel Schuss
Ziel Schuss
Hi
wie kann ich dafür sorgen, dass ein schuss immer genau auf sein ziel zufliegt?
Ich hab keine Idee, wie ich das umsetzen könnte bitte um Hilfe!
wie kann ich dafür sorgen, dass ein schuss immer genau auf sein ziel zufliegt?
Ich hab keine Idee, wie ich das umsetzen könnte bitte um Hilfe!
zB anhand von Waypoints bewegen. Nimmst zum Beispiel die Entfernung (kommste über den Satz des Pythagoras dran) und teilst diese durch die Schrittweite in Pixel.
Nun teilste die Entfernung auf der X-Achse und ebenso auf der Y-Achse durch die Schrittzahl und hast schon wunderbare Waypoints.
zB:
|.......................______P2 (das ist ne Diagonale, Mensch!)
|.............______|
|...______|
P1----------------------
P1 = (5|5)
P2 = (20|10)
Schrittgeschwindigkeit: 2
sqrt((20-5)² + (10-5)²) / 2 = 7 Schritte
5 + 15 * 1/7 = 7
5 + 15 * 2/7 = 9
...
5 + 15 * 7/7 = 20 <-- X-Achse
5 + 5 * 1/7 = 6
5 + 5 * 2/7 = 6
...
5 + 5 * 7/7 = 10 <-- Y-Achse
Als Liste:
(7|6) ; (9|6) ; ... ; (20|10)
Ist als Procedur sehr leicht umsetzbar
€: Wer suchet, der findet, ich wußte ich hab das selber mal gebastelt ^^
Nun teilste die Entfernung auf der X-Achse und ebenso auf der Y-Achse durch die Schrittzahl und hast schon wunderbare Waypoints.
zB:
|.......................______P2 (das ist ne Diagonale, Mensch!)
|.............______|
|...______|
P1----------------------
P1 = (5|5)
P2 = (20|10)
Schrittgeschwindigkeit: 2
sqrt((20-5)² + (10-5)²) / 2 = 7 Schritte
5 + 15 * 1/7 = 7
5 + 15 * 2/7 = 9
...
5 + 15 * 7/7 = 20 <-- X-Achse
5 + 5 * 1/7 = 6
5 + 5 * 2/7 = 6
...
5 + 5 * 7/7 = 10 <-- Y-Achse
Als Liste:
(7|6) ; (9|6) ; ... ; (20|10)
Ist als Procedur sehr leicht umsetzbar
€: Wer suchet, der findet, ich wußte ich hab das selber mal gebastelt ^^
Code: Alles auswählen
structure waystruc
x.l
y.l
endstructure
Global Newlist Waypoints.waystruc()
Procedure MakeWaypoints(X1.l, Y1.l, X2.l, Y2.l, Abstand.f)
Protected Punktanzahl.l
Protected a.l
Punktanzahl = Round(Sqr( ((X2-X1) * (X2-X1)) + ((Y2-Y1) * (Y2-Y1)) ) / Abstand, 0) + 1
For a = 0 To Punktanzahl
AddElement(Waypoints())
Waypoints()\x = (X2-X1) * a / Punktanzahl + X1
Waypoints()\y = (Y2-Y1) * a / Punktanzahl + Y1
Next
EndProcedure
kannst dir auch mein Code hier angucken:
Mausverfolgender Bot + Anhänger
da läuft der Bot immer zielsicher der Maus hinterher, so kannst du dann auch den Schuss programmieren oder rakete, die dann auch ziellenkung hat
Mausverfolgender Bot + Anhänger
da läuft der Bot immer zielsicher der Maus hinterher, so kannst du dann auch den Schuss programmieren oder rakete, die dann auch ziellenkung hat
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
erstmal danke für den ansatz, aber soleicht ist das nicht, denn wenn man z.b. die punkte: p1(3,1) und p2(1,3), dann wäre nach deiner formel, die verallgemeinert ja
sqrt((x1-x2)² + (y1-y2)²)
lautet das ergebnis 0, da das dreieck allerdings seitenlänegn von jeweils 2 hat müsste was anderes raskommen.
Man könnte natürlich immer vorher prüfen lassen, ob x1 oder x2 größer ist usw., das wäre allerdings dann ziemlich viel, oder? gibt es vielleicht eine einfachere Lösung die Entfernung zwischen 2 Punkten rauszufinden?
€dit: der Edit und der andeer Post kamen als ich bereits am überlegen war^^ werds mir erstmal nagucken
sqrt((x1-x2)² + (y1-y2)²)
lautet das ergebnis 0, da das dreieck allerdings seitenlänegn von jeweils 2 hat müsste was anderes raskommen.
Man könnte natürlich immer vorher prüfen lassen, ob x1 oder x2 größer ist usw., das wäre allerdings dann ziemlich viel, oder? gibt es vielleicht eine einfachere Lösung die Entfernung zwischen 2 Punkten rauszufinden?
€dit: der Edit und der andeer Post kamen als ich bereits am überlegen war^^ werds mir erstmal nagucken
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
benutze floats alle alle verarbeiteten variablen, dann kommts auch nicht zu Nullstellern.
bei integer werden immer die nachkommastellen abgeschnitten.
wenn deine werte also zu klein werden, kommt irgendwann nur noch null raus.
umgekehrt gilt, wenn deine werte bei floats zu groß werden, bekommst du ungenauigkeiten rein.
wenn du mit floats mit krummen werten weit aufwärts zählst, und dann wieder abwärts,
landest du nicht wieder bei Null.
bei integer werden immer die nachkommastellen abgeschnitten.
wenn deine werte also zu klein werden, kommt irgendwann nur noch null raus.
umgekehrt gilt, wenn deine werte bei floats zu groß werden, bekommst du ungenauigkeiten rein.
wenn du mit floats mit krummen werten weit aufwärts zählst, und dann wieder abwärts,
landest du nicht wieder bei Null.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
da ich noch ziemlicher anfänger bin, könnte mir das hier:
mal bitte wer erläutern?
Code: Alles auswählen
structure waystruc
x.l
y.l
endstructure
Global Newlist Waypoints.waystruc()
Procedure MakeWaypoints(X1.l, Y1.l, X2.l, Y2.l, Abstand.f)
Protected Punktanzahl.l
Protected a.l
Punktanzahl = Round(Sqr( ((X2-X1) * (X2-X1)) + ((Y2-Y1) * (Y2-Y1)) ) / Abstand, 0) + 1
For a = 0 To Punktanzahl
AddElement(Waypoints())
Waypoints()\x = (X2-X1) * a / Punktanzahl + X1
Waypoints()\y = (Y2-Y1) * a / Punktanzahl + Y1
Next
EndProcedure