Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Berechnung einer linie (https://www.delphipraxis.net/2164-berechnung-einer-linie.html)

braingrenade 9. Jan 2003 20:49


Berechnung einer linie
 
Moin leute ,

da so wies aussieht keiner meinen Beitrag den ich vor einer weile schon mal gepostet habe (Gegnerbewegung) verstanden ha t versuch e ich mich jetzt halt mal verständlich auszudrücken:

Mein problem ist eigentlich ganz einfach , ich brauche nur eine Formel oder so was die mir eine Linie berechnet und falls jemaden weiss wie , auch nen Halbkreis .

Also praktisch wie eine eigene LineTo Prozedure!

nailor 9. Jan 2003 21:11

Die Punkte, die beim Weg von einem Punkt zum anderen betreten werden kannst du dir mit dem Satz des Pythagoras ausrechnen. Im 3D-RAum musst du ihn einmal auf zwei Achsen und dann auf das Ergibnis und die dritte Achse anwenden.
Halbkreis: Entferung der Punkte berechnen, Mittelpunkt bestimmen und dann wieder Phytagoras und ein wenig Trigonometrie. Aber dafür gibts bestimmt irgendwo schon was vorgefertigtes...

braingrenade 10. Jan 2003 14:12

Jo Danke !

Muss ich halt mal ins Mathe-Buch schaun !

thomasdrewermann 10. Jan 2003 14:17

Hallo erstmal,
die LineTo Procedure steckt doch im Canvas schon drin und auch die Cricle Funktion ist im Canvas einer Paintbox oder eines images schon vorhanden.

MFG
Thomas

braingrenade 10. Jan 2003 15:22

Moin Thomas

Die Prozeduren von Canvas kann ich nicht benutzten , denn ich brauche die Koordinaten der Punkte , und soweit ich weiss gibt Canvas nur Grafik aus , oder ich bin falsch informiert !

Aber da muss es sicherlich ne Formel oder sowas geben , das mit Pythagoras hab ich nämlich nich so drauf !

lodda 10. Jan 2003 15:24

Was ist von der Linie bekannt und was suchst du?

nailor 10. Jan 2003 15:28

Er hat den Anfangspunkt und den Endpunkt und sucht alle Punkte dazwischen. (Anfangspunkt = Momentaner Ort des Gegners, Endpunkt = Wo die KI den Gegener hin haben will, Linie = Punkte, auf die der Gegner muss um vom Anfang ans Ende zu kommen).

braingrenade 10. Jan 2003 15:32

Jo , simmt genau , nur das ich die EndPunkte später dann aus einer datei einlese.

braingrenade 10. Jan 2003 15:34

Obwohl ... , so ne KI hätte auch was !

lodda 10. Jan 2003 15:35

Brauchst die Berechnung für 2D oder 3D?

nailor 10. Jan 2003 15:41

Bei Linien ist das doch vom Prinzip her das gleiche.

braingrenade 10. Jan 2003 15:43

Ich bräucht's nur 2D , denn wenn 's fertig ist wirds mal ein Acade-shooter(Die gute alte zeit).

lodda 10. Jan 2003 16:00

Also du hast die Punkte P1 (x1, y1) und P2 (x2, y2) gegeben. Dann kannst du den Abstand zwischen den zwei Punkten berechnen:
Abstand := SQRT(SQR(x2-x1)+SQR(y2-y1)). Disen Abstand kannst du durch die Anzahl der Punkte die du haben willst teilen.
Diese Zahl soll r sein.
Dann kannst du einen Punkt P3( x3, y3) berechnen:
x3 = x1 + r(x2-x1)
y3 = y1 + r(y2-y1)

Für den nächsten Punkt setzt du statt r einfach r+r ein, dann r+r+r...

Wenn ich mich richtig Mathe erinnere müsste es so gehen.

braingrenade 10. Jan 2003 16:08

:hello: genau nach sowas hab ich gesucht !

aber kleine Frag e noch bevor ich's progge :

der Punkt P4 ist dann

x4 = x1 + r(x2-x1) + r(x2-x1)
y4 = y1 + r(y2-y1) + r(y2-y1)

oder ?

lodda 10. Jan 2003 16:12

Eigentlich ja, aber es ist viel einfacher wenn du
x4=x1+2*r*(x2-x1)
y4=y1+2*r*(y2-y1)
schreibst.

braingrenade 10. Jan 2003 18:12

Optimal !

Aber weisst du wie man das ganze mit einem halbkreis statt einer linie mach t?

d3g 10. Jan 2003 18:59

Hi braingrenade,

der Mathematiker Bresenham hat ein paar solcher Algorithmen entwickelt, der hier dürfte interessant für dich sein:
Bresenham-Kreis-Algorithmus

MfG,
d3g

nailor 10. Jan 2003 19:51

x3 = x1 + r(x2-x1)
y3 = y1 + r(y2-y1)

ist falsch.

wenn r die anzahl der punkte ist, dann müsste das da gelten:

x3 = x1 + ((x2-x1)/r * "anzahl, wievielter punkt")

braingrenade 10. Jan 2003 20:14

verdammt kompliziert dieser kreis - Algo !
Muss mich halt mal ein bischen reinhängen !

Wenn das ganze dann 20?? fertig ist stell ich's als erstes ins forum !


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:46 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