Nächstliegendes Objekt finden?

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

Megamag

Betreff: Nächstliegendes Objekt finden?

BeitragDo, Okt 15, 2009 17:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!
Ich könnte mir jetzt eine sehr lange Abfrage mit einer Menge EntityDistance Befehlen basteln, aber lieber frage ich hier nach einer einfacheren Lösung. Es geht um folgendes:
Es gibt einen Block. Dieser Block ist ein globales Objekt un dreht sich um einen Mittelpunkt. Um diesen Mittelpunkt sind acht Kugeln im Winkel von 45° angeordnet, diese liegen auf der Höhe des Blocks. Gespeihert sind diese in einem Array (spiv[8]). Nun soll rausgefunden werden, an welche dieser Kugeln am nächsten an dem Block, der sich bewegt, liegt. (das ganze soll später eine Snap-Funktion werden, die den Block immer auf die Kuigel setzt, nur damit ihr nicht nach dem Grund für diese Funktion fragt Razz) Achja, bevor ich es vergesse: Es geht hierbei um 3D

Und da ich gerne immer alles nochmals mit Skizzen verdeutliche, habe ich hier eine vorbereitet:
user posted image

Xeres

Moderator

BeitragDo, Okt 15, 2009 17:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Du könntest die lange Abfrage mit einer Schleife Regeln. So in etwa:
Code: [AUSKLAPPEN]
Local i, nahe, nahe_Dis, Dis
For i=0 To 8
   Dis = EntityDistance(Box, spiv[i])
   If Dis < nahe_Dis Then nahe = i : nahe_Dis = Dis
Next
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

Krischan

BeitragDo, Okt 15, 2009 18:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Das gabs doch letztens erst schonmal. Les mal hier weiter:

https://www.blitzforum.de/foru...hp?t=31290

Megamag

BeitragDo, Okt 15, 2009 18:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielen Danke euch!
Besonders an Xeres, dein Code läuft super Very Happy

SpionAtom

BeitragDo, Okt 15, 2009 19:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Hier noch das ganze in 2D. Zwingt mich nicht es zu erklären.
Sollte aber einigermaßen auch funktionieren. Das tolle ist, hier wird tatsächlich nur der Winkel der Box zum "berechnen der nächsten Punkte genommen. Ob und wie sich das ins 3D übertragen lässt, weß ich nicht.

(poly und snaps Im Code nach gutdünken verändern)

Code: [AUSKLAPPEN]
   poly = 3         ;zb 3 für Dreieck, 4 für Viereck
   snaps = 12         ;Anzahl der Randpunkte (muss Vielfaches von poly sein!!!)
                  ;
   ;;;;;;;;;;;;;;;;;;;;;
   
   
   snapw = 360 / snaps
   Dim K(snaps - 1)
   For i = 0 To snaps - 1
      K(i) = snapw * i
   Next

   Graphics  400, 300, 0, 2
   SetBuffer BackBuffer()

   mx = GraphicsWidth() / 2
   my = GraphicsHeight() / 2
   mr = my * 0.8

   Repeat
   
      boxw# = ((Float(MouseX()) / mx) * 360) Mod 360
         
      Cls      
      Text mx - 24, my - 8, "Winkel":   Text mx - 15, my + 8, boxw
      
      ;Box zeichnen
      For i = 0 To poly
         pw = 360 / poly
         px1 = mx - Sin(boxw + pw * i) * (mr - 10)
         py1 = my - Cos(boxw + pw * i) * (mr - 10)
         px2 = mx - Sin(boxw + pw * (i + 1)) * (mr - 10)
         py2 = my - Cos(boxw + pw * (i + 1)) * (mr - 10)
         Line px1, py1, px2, py2
         If i = 0 Then Oval px1 - 5, py1 - 5, 10, 10
      Next      
      
      ;Kugeln zeichnen
      nearestSnap = Floor(boxw / snapw + 0.5) Mod snaps
      Text 0, 0, "nearest Snap: " + nearestSnap
      For i = 0 To snaps - 1
         px = mx - Sin(K(i)) * mr
         py = my - Cos(K(i)) * mr         
         fill = (i - nearestSnap) Mod (snaps / poly) = 0
         Oval px - 3, py - 3, 6, 6, fill
         Text mx - Sin(K(i)) * (mr + 16), my - Cos(K(i)) * (mr + 16), i
      Next      
      
      Flip()   
   Until KeyDown(1)
   End   
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080

SYSThern

BeitragDo, Okt 15, 2009 21:21
Antworten mit Zitat
Benutzer-Profile anzeigen
hi

da wäre auch EntityPick() eine möglichkeit

https://www.blitzforum.de/help/EntityPick

mfgSYSthern
Tools and Programms
--------------------
www.systhern.de

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group