Kollisionsfrage
Übersicht

![]() |
PebenderBetreff: Kollisionsfrage |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi,
wenn ich mehrere (eventuell hunderte) Bilder auf kollision prüfen möchte, muß ich jedes mit jedem vergleichen, bzw wie stelle ich das an ?? Angenommen ich lese 100 Bilder in einer For Schleife ein und will diese in einem Canvas darstellen lassen, was bis hier noch kein Problem sein sollte. Nun sollen sich diese Bilder sich aber nicht übereinander legen( soll per Zufallsgenerator geschehen), wie kann ich denn einen Vergleich zur kollisionsabfrage machen?? Jedes Bild mit jedem, wäre ja fast unmöglich. Kann ich so eine Abfrage auch in einer Schleife machen, oder wie regelt man so etwas ?? ich will keinen Code, nur so zum Verständnis einen Anhaltspunkt, falls jemand einen hat. mfg |
||
BMax & MaxGUI |
![]() |
DaysShadow |
![]() Antworten mit Zitat ![]() |
---|---|---|
Gib jedem Bild eine größere Fläche zum Einzeichnen und lass darin die Zufälligkeit einspielen.
Beispielsweise hast du 32x32 Pixel große Bilder, erstellst dir zum Handhaben aber ein Raster, z.B. 10x10 für dein Beispiel mit 100 Bildern, mit 48x48 Pixel großen Einheiten. Die Fläche die für jedes Bild zur Verfügung steht ist also mehr als es braucht. Jetzt kannst du immer beim Platzieren des Bildes auf die Anfangsposition des Feldes im Raster rechnen und darauf zusätzlich per Zufall noch jeweils ein Offset für x und y. Beim Beispiel wären das also zufällige Zahlen von 0 bis 16, wobei 0 der linke und obere Rand wäre und +16 am rechten bzw. unteren Rand kratzt. Damit könntest du entsprechend der verschiedenen Größen noch herumspielen, brauchst keine Kollisionserkennung oder irgendwas nocheinmal danach laufen lassen und keines der Bilder würde sich überlappen. Edit: Ist natürlich so nur für statische Dinge interessant. Wenn da Bewegung ins Spiel kommt brauchst du etwas anderes ![]() |
||
Blessed is the mind too small for doubt |
![]() |
Pebender |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo,
danke für deine Antwort, aber so wird das nicht funktionieren. Es soll eine Anwendung werden, die ich schon vor langem angefangen habe zu schreiben, aber leider nie so richtig dran bleiben kann wegen meiner Selbstständigkeit.Habe das Grundgerüst jetzt komplett neu gemacht und nu geht es ins eingemachte.ich hänge nachher mal ein Bild zur veranschaulichung dran. Es handelt sich hier um meinen Terrazzosimulator. Grob gesagt habe ich 8 Auswahlboxen mit verschieden großen Steinen, jede Auswahlbox eine andere Größe. wenn ich jetzt eine Auswahl treffe, kann ich noch bestimmen wieviel Prozent,d.h. Box1: Steine1 = 20% box2 Steine2 =15% usw. wenn diese Steine prozentual geladen sind, sollen sie wie beschrieben in ein Canvas gezeichnet werden, ohne das sie sich überlappen. wie auf dem Bild zu sehen ist rechts ein Musterbild geladen, und anhand des Programmes, soll man dieses ähnlich in dem anderen Canvas zusammen würfeln können. ![]() Durch das es verschieden große Steine sind, ist die Anzahl der Steine umso größer, je kleiner die Steine sind, daher auch die Frage der Kollision am Anfang. |
||
BMax & MaxGUI |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Müssen es dafür unbedingt Einzelbilder von Steinen sein? Ich würde es mit einem Noise Generator versuchen, der eben zufällige Bereiche in mehreren Farben erzeugt. Dann kann man die Farben mit unterschiedlichen Steintexturen ersetzen. | ||
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) |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn es sich um strikt rechteckige / quadratische Bilder handelte - was in deinem Fall ja nicht gegeben ist, wäre es sehr simpel: Jedes Bild mit den bereits vorhandenen anhand einer simplen Boxen-Prüfung abchecken.
Beispiel: Bild 1: x:50 y:50 b:30 h:40 Bild2: x:30,y:30 b:25, h:20 Da x+b und y+h bei Bild zwei größer als x und y bei Bild 1 sind liegt eine Kollision vor. das ist, grade wenn es um einen Generator geht selbst für hunderte Bilder völlig unkritisch, von diesen Operationen jagt Blitz Millionen pro Sekunde durch. Bei dir liegt der Fall aber komplizierter, da die Steine ja unregelmäßige Formen haben. Hier würde zB eine Maske helfen. Ich nehme mal an die Bilder liegen als PNG mit Alpha vor. Wenn der Zufallsgenerator nun eine Bildposition ermittelt hat lässt Du alle Pixel die nicht mit alpha 0 vorhanden sind (siehe dazu die pixmap befehle) in die Maske einzeichnen, falls dort noch die Gewählte Startfarbe vorliegt. Wenn auch nur einer der Pixel kollidiert werden alle eingezeichneten Pixel dieses Steines entfernt und eine neue Position gesucht. (alternativ: erst alle Pixelpositionen prüfen und nur wenn es keine Kollision gab einzeichnen in die Maske). Das ist aber in der Tat deutlich zeitaufwändiger, da hier Pixmaps generiert und manipuliert werden müssen. aber auch da sehe ich keine Probleme - ein Generator darf ja mal etwas Zeit benötigen und muss nicht echtzeittauglich sein. Mehr als ein oder zwei Sekunden sollte der spass nicht dauern. Ach ja: ich würde Dir empfehlen abhängig von Bildgröße und Fortschritt eine Abbruchbedingung einzubauen, so dass ein Stein nach einer gewissen Zahl erfolgloser Positionierungsversuche gecancelt wird. Denn sonst kann es passieren dass sich das Procedere totläuft, wenn ein Stein eingezeichnet werden soll für den nirgends mehr genug Platz vorhanden ist. |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
Pebender |
![]() Antworten mit Zitat ![]() |
---|---|---|
@Xeres
ich wollte es mit einzelnen Bildern machen, da die Steine eine bestimmte Größe haben z.B. gibtes welche in derAbmessung 8-16mm, welche von 3-5mm usw. Der Gedanke war das ich die Steine z.B in photoshop Maßstabs getreu skaliere, so das auch der reelle Unterschied zwischen 5 und 16 mm gegeben ist. @Bladerunner auf Zeit kommt es nicht wirklich an, ob das Programm 1 Sekunde oder 5 Sekunden braucht, ist zweitrangig. Die Steine müssen sich auch nicht nahtlos aneinanderreihen, wie auf dem Musterbild zusehen ist, sind da auch größere Stellen, an denen keine Steine liegen, und dieses Muster ist eine handwerklich hergestellte Platte und kein Computerprodukt. mfg |
||
BMax & MaxGUI |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group