Abstand
Übersicht

mDaveBetreff: Abstand |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Moin Community!
Ich habe einen Type erstellt. Wie kann ich das programmieren, sodass die Types immer den am wenigstens entfernten gleichen Type angucken? Wie könnte man also den Abstand der Types zueinander ausrechnen lassen? Ich hoffe ihr könnnt helfen. |
||
![]() |
Nicdel |
![]() Antworten mit Zitat ![]() |
---|---|---|
2D oder 3D? | ||
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7 |
![]() |
ozzi789 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi MetalDave
Also mit dem Satz des Pythagoras, geht das ganz einfach (ich nehme mal an im 2D Raum) Also wir haben Type1 an der Koordinate 2|5 Type2 an der Koordinate 10|3 Also nehmen wir 2-10 = distanz auf der X achse also 8 (minus beachten wir nicht, absolute entfernung) und nochmal 5-3 = distanz auf der Y achse also 2 nun der Satz des Pythagoras Wurzel(8^2 + 2^2) = Länge zwischen Type 1 und Type2 ![]() Wurzel bekommst du mit Sqr ![]() Fürs in die gleiche richtung schauen brauchst du Sin ![]() ![]() ![]() Mehr will ich dir nicht sagen ![]() Falls du nicht weiter kommst, einfach fragen ![]() mfg |
||
- Zuletzt bearbeitet von ozzi789 am Sa, März 28, 2009 13:15, insgesamt einmal bearbeitet
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zum Vergleichen kann man allerdings auch das rechenintensive Sqr![]() |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
mDave |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Nun ja, da hast du leider was falsch angenommen ;P
Das Programm ist in 3D. Wie würde das den dann in einem 3D-Raum aussehen? Danke für die schnelle Antwort! |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Siehe dazu: EntityDistance![]() |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
![]() |
ozzi789 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Im Grunde das gleiche ![]() Einfach mit einer weitern Achse aber schau dir mal EntityDistance ![]() edit: mist zu langsam |
||
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5 |
mDave |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Entfernung#=ENTITYDISTANCE# (Entity1, Entity2)
Eine Frage hätte ich dazu vorrasusichtlich noch: Wie müssten dann die Entitys heißen? Die sind ja vom selben Type. Und zweimal den gleichen Namen als verschiedene Entitys schreiben klappt ja nicht. Und es sind ja wirklich viele verschiedene Type-Dinger. |
||
![]() |
ozzi789 |
![]() Antworten mit Zitat ![]() |
---|---|---|
So zmb
Code: [AUSKLAPPEN] Type enemy
Field x Field y Field mesh End Type e.enemy = New kugel e\x#=10 e\y#=10 e\mesh=CreateSphere(20) EndIf |
||
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5 |
mDave |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
So sehr ich mich auch anstrenge, ich komme einfach nicht drauf was du mir damit sagen willst. | ||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ersetze seinen Code das mesh durch Entity. Dann sollte es klarer sein, es in Verbindung mit EntityDistance zu nutzen. | ||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
![]() |
The_Nici |
![]() Antworten mit Zitat ![]() |
---|---|---|
Mit For->Each alle Type-Einträge durchgehen, alle längen mit deinem gewünschten Eintrag vergleichen, und die kleinste dann nehmen, Siehe dazu QuickSort.
MfG |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Quicksort ist wohl überflüssig um nur einen kleinsten/größten Wert aus einer Tabelle auszusuchen. Ist zwar möglich, aber ein weitere Schleife zur Überprüfung auszuführen erhöht unnötig die Rechenleistung eines Programmes, ohne weiteren Nutzen daraus ziehen zu können.
Wenn man nur einen Wert benötigt, dann filtert man das ganze mit einer If -Abfrage. reicht absolut. |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
![]() |
coolo |
![]() Antworten mit Zitat ![]() |
---|---|---|
Um den KleinstenGrößten Wert aus einer Type Liste zu bekommen:
Code: [AUSKLAPPEN] local curwert=999989 local curtype.Ttype local type.ttype for type.Ttype=each ttype if type\wert<curwert then curwert=type\wert : curtype=type next print curtype\wert ;Der niedrigste Wert von den ganzen Types! |
||
http://programming-with-design.at/ <-- Der Preis ist heiß!
That's no bug, that's my project! "Eigenzitate sind nur was für Deppen" -Eigenzitat |
mDave |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke euch allen!
coolo, zu deinem Code hätte ich noch zwei Fragen: 1.Was stellt der type\wert dar? 2. Warum hast du als local curwert=999989 gesetzt? EDIT: Oh, entschuldigung für den dreifach Post. Als ich den hier abgesendet habe stand da ein Authentification Error. Schlussendlich habe ich das ganze dreimal durchgemacht. Aber jetzt hat er die Posts ja doch abgesendet?!?! |
||
![]() |
coolo |
![]() Antworten mit Zitat ![]() |
---|---|---|
cur\wert steht für den Abstand, der zwischen dem Punkt A und dem Punkt B steht.
curwert=99999 heißt das nur Werte unter diesen Wert genommen werden, wen dieser Wert 0 wäre, würde keine der Abfragen zustimmen, da ja if type\wert<curwert then überprüft wird. |
||
http://programming-with-design.at/ <-- Der Preis ist heiß!
That's no bug, that's my project! "Eigenzitate sind nur was für Deppen" -Eigenzitat |
mDave |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Und wie sieht das dann in dem entityDistance Satz aus?
cur\wert=Entitydistance(t.Ttype,???) Was müsste dann an die Stelle der Fragezeichen? |
||
![]() |
coolo |
![]() Antworten mit Zitat ![]() |
---|---|---|
cur\wert=entitydistance(Spielermesh,type\mshhndl)
Parameter 1+2 sind die beiden entitys, von denen der Abstand gemessen werden soll. schau: EntityDistance ![]() |
||
http://programming-with-design.at/ <-- Der Preis ist heiß!
That's no bug, that's my project! "Eigenzitate sind nur was für Deppen" -Eigenzitat |
![]() |
NightPhoenix |
![]() Antworten mit Zitat ![]() |
---|---|---|
Geringster Abstand:
Code: [AUSKLAPPEN] Kamera = CreateCamera()
Type Gegner Field obj End Type SeedRnd MilliSecs() For i=1 To 100 ;100 "Gegner" erstellen g.Gegner = New Gegner g\obj = CreateSphere(8) PositionEntity g\obj,Rnd(-100,100),Rnd(-100,100),Rnd(-100,100) Next richtwert#=100000 ;100000 Einheiten Abstand For g.gegner = Each Gegner dist#=EntityDistance(kamera,g\obj) If dist#<richtwert# Then obj_merken=g\obj richtwert#=dist# EndIf Next g.Gegner = First Gegner While obj_merken<>g\obj g = After g Wend Text 0,20,"ID des nächsten Objektes: "+g\obj Text 0,40,"Abstand zum Objekt: "+richtwert# Stop Du kannst auch noch verschiedene "Eigenschaften" (Field ![]() ![]() So siehts im zusammenhängenden Code aus ![]() MfG. |
||
mDave |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke!
Es klappt jetzt.*freu* Danke nochmal. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group