Nächstliegendes Objekt finden?
Übersicht

![]() |
MegamagBetreff: Nächstliegendes Objekt finden? |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() Und da ich gerne immer alles nochmals mit Skizzen verdeutliche, habe ich hier eine vorbereitet: |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
Krischan |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Das gabs doch letztens erst schonmal. Les mal hier weiter:
https://www.blitzforum.de/foru...hp?t=31290 |
||
![]() |
Megamag |
![]() Antworten mit Zitat ![]() |
---|---|---|
Vielen Danke euch!
Besonders an Xeres, dein Code läuft super ![]() |
||
![]() |
SpionAtom |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
hi
da wäre auch EntityPick() eine möglichkeit https://www.blitzforum.de/help/EntityPick mfgSYSthern |
||
Tools and Programms
-------------------- www.systhern.de |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group