[GELÖST] Bilder im Kreis anordnen?
Übersicht

CO2ehemals "SirMO"Betreff: [GELÖST] Bilder im Kreis anordnen? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo,
Ich habe ein Problem: Für ein Projekt habe ich mir Funktionen erstellt, die mir automatisch aus einem übergebenen Bild (Als Blatt-Modell) einen Baum generieren. Das ganze funktioniert auch schon recht gut - solange der Baum Rechteckig sein soll. Jetzt möchte ich aber auch Bäume erstellen, die rund sind und stehe deshalb gerade etwas auf dem Schlauch. Hier mal der bisher erstellte Code BlitzMax: [AUSKLAPPEN] Rem Wer es mal ausprobieren möchte: Hier ein Beispiel-Blatt-Modell: https://www.blitzforum.de/upload/file.php?id=12579 Hier auch mal einige Resultate: Pot = 0, Disorder = 5 Pot = 1, Disorder = 5 Pot = 2, Disorder = 2 (Blattmodell s.o.) Zur Funktionsweise: 1.) CopyPix:Int(Src:TPixmap, Dest:TPixmap, StartX:Int, StartY:Int, InvisibleARGB:Int = $FF000000) Diese Funktion Kopiert mir die Dest-Pixmap in die Src-Pixmap und zwar an die Stelle (In der Dest-Pixmap) StartX bzw. StartY. 2.) CreateTree2D:TImage(LeafModel:TImage, SizeX:Int, SizeY:Int, Pot:Int = 0, Disorder:Int = 0, Shape:Int = TREESHAPE_RECT) Diese Funktion erstellt ein TImage eines Baumes, welcher aus den übergebenen Parametern generiert wird. Dabei bezwecken die Parameter folgendes: - LeafModel: Das Modell eines Blattes - SizeX u. SizeY: Die Größe des Resultates in Pixeln - Pot: 1 / (2 ^ Pot) = Häufigkeit der Blätter im gesamten (1 erzeugt ein Blatt auf der Fläche eines Blattmodells) - Disorder: Mögliche maximale Versetzung pro Blatt innerhalb des Resultat-Images (0 führt zu "tabellarischer" Anordnung der Blätter) - Shape: Erzeugt entweder einen Runden Baum oder einen Eckigen Das Problem ist folgendes: Ich muss ja in die Berechnung mit einfließen lassen, welche Ausmaße das Resultat haben muss (Also der Algorithmus muss auch in der Lage sein Ovale erzeugen zu können), wie groß die maximale Versetzung ist und ich muss das erzeugte Oval bzw. den erzeugten Kreis mit Blättern füllen. Wie stelle ich das an? |
||
mfG, CO²
Sprachen: BlitzMax, C, C++, C#, Java Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti |
- Zuletzt bearbeitet von CO2 am Mo, Sep 30, 2013 14:50, insgesamt einmal bearbeitet
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
BlitzMax: [AUSKLAPPEN] RandX = Rand(0, Disorder) Klar muss das Rechteckig werden - die Koordinaten werden schließlich aus einem solchen Bereich ausgewählt. Was du für ein Kreis/Oval machen willst, ist einen zufälligen Winkel zu nehmen und die Koordinaten entlang des Bildmittelpunkts zu verschieben: BlitzMax: [AUSKLAPPEN] RandW = Rand(0,359) |
||
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) |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
gleich noch ein Tipp:
1. Arbeite nicht mit einem einzigen Kreis. 2. Legen für Deinen Baum 4 Kreiszentren und Radien fest. 3. Entscheide dann pro Blatt per Zufall für jeweils einen der Kreise und male das Blatt dort wie Xeress vorschlägt. 4. Wenn es möglich ist in deinem System: Beginne bei den ersten Blättern zunächst mit dunklerem Grün und steigere dann die Farben ins Hellere. Das gibt Tiefe! BlitzMax: [AUSKLAPPEN] SuperStrict |
||
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe |
CO2ehemals "SirMO" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich habe mal ein wenig rumprobiert, die Bäume bleiben allerdings Rechteckig... Hier mal mein momentaner Code (Ausschnitt) BlitzMax: [AUSKLAPPEN] If(Shape = TREESHAPE_ROUND) Was mache ich falsch? |
||
mfG, CO²
Sprachen: BlitzMax, C, C++, C#, Java Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das Problem ist, dass du x und y beim kopieren einmultiplizierst, als wolltest du die Blätter auf einem Gitter verteilen, von dessen Punkten du eben nur eine kleine Abweichung berechnen wolltest.
BlitzMax: [AUSKLAPPEN] CopyPix (LeafModelPix, ReturnMePix, .. Stattdessen sollten RandX/RandY schon die endgültigen Koordinaten enthalten. Ich sehe durch deine Pot/Fac Berechnung da nicht durch, aber mit genügend großem Disorder geht das schon: BlitzMax: [AUSKLAPPEN] CopyPix (LeafModelPix, ReturnMePix, .. |
||
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) |
CO2ehemals "SirMO" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Trotz hin und her probieren wollen die Bäume einfach nicht rund werden... Was mache ich den falsch? Gibt es noch andere Methoden Kreise zu erzeugen? Ich brauche ja im Grunde nur einen gefüllten Kreis als Resultat. Hier mal der Code-Ausschnitt, wie er momentan aussieht BlitzMax: [AUSKLAPPEN] '[...] |
||
mfG, CO²
Sprachen: BlitzMax, C, C++, C#, Java Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Der Code erzeugt runde Blätteransammlungen. Nur ist der Parameter Disorder eben kein maß für Unordnung, sondern der maximale Radius eines Kreises. Vielleicht solltest du den anders in die Rechnung einfließen lassen und den Radius auf die Bildbreite/Höhe setzen?
Du müsstest halt definieren, was die Eingabe und die Ausgabe sein soll. |
||
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) |
CO2ehemals "SirMO" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Gut, habe nun wieder ein wenig rumexperimentiert und ein annehmbares Ergebnis erhalten.
@ Midimaster: Zu 1 - 3: Das ist eine gute Idee, werde es auch versuchen umzusetzen, nur in der momentanen Version reicht mir das Ein-Kreis-System ![]() Zu deinem 4. Punkt: Vor allem beim Rechteckigen Baum ist das etwas kompliziert, da ich diesen nicht "von innen nach außen" aufbaue, sondern eher Reihe für Reihe. Wenn ich dann von Hell nach Dunkel gehe sieht das bescheiden aus... Nun, wer es braucht, hier der Code BlitzMax: [AUSKLAPPEN] Rem Und nun ein paar Statistiken: 1.) SizeX: 100; SizeY: 100; Disorder: 0; Pot: 0; Shape: RECT; Zeit in ms: 10 2.) SizeX: 100; SizeY: 100; Disorder: 0; Pot: 0; Shape: ROUND; Zeit in ms: 9 3.) SizeX: 100; SizeY: 100; Disorder: 1; Pot: 1; Shape: RECT; Zeit in ms: 37 4.) SizeX: 100; SizeY: 100; Disorder: 1; Pot: 1; Shape: ROUND; Zeit in ms: 78 5.) SizeX: 100; SizeY: 100; Disorder: 5; Pot: 1; Shape: RECT; Zeit in ms: 233 6.) SizeX: 100; SizeY: 100; Disorder: 1; Pot: 1; Shape: ROUND; Zeit in ms: 89 Ich danke Allen, die halfen und werde das Thema damit als [GELÖST] markieren. |
||
mfG, CO²
Sprachen: BlitzMax, C, C++, C#, Java Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Warum die Funktion Copypix? Ein einfaches Drawimage sollte es doch auch tun (und wesentlich schneller sein)? | ||
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 |
CO2ehemals "SirMO" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich arbeite ja nachdem ich einen Baum generiert habe weiter mit DrawImage(Resultat). Also die Bäume brauchen nur beim initialisieren so "lange", das DrawImage des generierten Baumes ist ja recht schnell... | ||
mfG, CO²
Sprachen: BlitzMax, C, C++, C#, Java Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Schon klar,
dennoch ist es doppelt gemoppelt. Du kannst die Leaves ja per drawimage einzeichnen und dann grabben, das spart dir die langsame fUnktion ein. |
||
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 |
CO2ehemals "SirMO" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ok, dann werd ich mal ein wenig rumexperimentieren ![]() |
||
mfG, CO²
Sprachen: BlitzMax, C, C++, C#, Java Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group