Abstand

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

mDave

Betreff: Abstand

BeitragSa, März 28, 2009 13:04
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, März 28, 2009 13:07
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, März 28, 2009 13:13
Antworten mit Zitat
Benutzer-Profile anzeigen
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
user posted image
Wurzel bekommst du mit Sqr

Fürs in die gleiche richtung schauen brauchst du SinCosTan

Mehr will ich dir nicht sagen Wink
Falls du nicht weiter kommst, einfach fragen Smile

mfg
  • Zuletzt bearbeitet von ozzi789 am Sa, März 28, 2009 13:15, insgesamt einmal bearbeitet

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSa, März 28, 2009 13:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Zum Vergleichen kann man allerdings auch das rechenintensive Sqr weg lassen. Also einfach nur (XPos*XPos+YPos+YPos) machen.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D
 

mDave

BeitragSa, März 28, 2009 13:17
Antworten mit Zitat
Benutzer-Profile anzeigen
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!

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSa, März 28, 2009 13:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Siehe dazu: EntityDistance
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

ozzi789

BeitragSa, März 28, 2009 13:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Im Grunde das gleiche Very Happy
Einfach mit einer weitern Achse

aber schau dir mal EntityDistance an

edit: mist zu langsam
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5
 

mDave

BeitragSa, März 28, 2009 13:25
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, März 28, 2009 13:31
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, März 28, 2009 13:32
Antworten mit Zitat
Benutzer-Profile anzeigen
So sehr ich mich auch anstrenge, ich komme einfach nicht drauf was du mir damit sagen willst.

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSa, März 28, 2009 13:56
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, März 28, 2009 15:07
Antworten mit Zitat
Benutzer-Profile anzeigen
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

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSa, März 28, 2009 15:25
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, März 28, 2009 20:36
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, März 29, 2009 6:51
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, März 29, 2009 9:04
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, März 29, 2009 9:55
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, März 29, 2009 11:02
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, März 29, 2009 12:06
Antworten mit Zitat
Benutzer-Profile anzeigen
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) dem Type hinzufügen um beispielsweise koordinaten, Abstände, u.v.m. abzuspeichern.

So siehts im zusammenhängenden Code aus Wink
MfG.
 

mDave

BeitragSo, März 29, 2009 12:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke!
Es klappt jetzt.*freu*

Danke nochmal.

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group