Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi "weiche übergänge" in arrays (https://www.delphipraxis.net/22192-weiche-uebergaenge-arrays.html)

glkgereon 13. Mai 2004 21:30


"weiche übergänge" in arrays
 
hi
ich hab ein 2d-array aus bytes
da sollen zunächst mal zufällige werte rein
nun soll aber eine 0 nicht neben einer 200 liegen, es soll sozusagen "weiche übergänge" geben
wie kann ich das realisieren?

PS:
einige werden schon verstanden haben: Ja, es geht um heightmaps :-D

tommie-lie 13. Mai 2004 22:02

Re: "weiche übergänge" in arrays
 
Du gehst jetzt vermutlich mit 'ner Schleife jedes Element durch und weist ihm den Random-Wert zu.
Jetzt merkst du dir den Wert aus dem letzten Element und sorgst dafür, daß die Differenz nicht größer als 5 ist. Ist z.B. der vorherige Wert 200 erzeugst du einen Random-Wert zwischen 0 und 10 und addierst anschließend 195 drauf, schon hast du einen Wert der maximal um 5 vom benachbarten abweicht.
Um alle 8 Nachbarn eines Elementes zu berücksichtigen würde ich zunächst alle Elemente auf -1 initialisieren *) und anschließend den Mittelwert aus allen Nachbarn nehmen, den ich dann als Basis für den aktuellen nehme.
Pseudocode:
Code:
const
  Differenz = 5;

for i := 0 to Length(arr) do
  for j := 0 to Length(arr[i]) do
  begin
    arr[i,j] := Random(2*Differenz + 1) + (GetAverageFromNeighbours(i,j) - Differenz);
  end;

*) Edit: Auf -1 initialisieren, damit GerAverageFromNeighbours weiß, welche Nachbarn es berücksichtigen soll, sonst ziehen die ganzen Nullen aus den noch nicht bearbeiteten Werte den ganzen Durchschnitt runter.

glkgereon 14. Mai 2004 19:26

Re: "weiche übergänge" in arrays
 
jaja, das problem ist dieses, es soll ja nicht so aussehen:

1 5 10 15 20 25
30 32 40 45 50 55
60 65 70 75 80 85

es geht mir jetzt nicht ums ansteigen, sondern darum, das der array in beiden "richtungen" "weich" ist....

GuenterS 14. Mai 2004 19:32

Re: "weiche übergänge" in arrays
 
naja dann nimmst Du einen doppelt so großen Bereich und ziehst vom ergebnis die hälfte ab...

glkgereon 14. Mai 2004 19:35

Re: "weiche übergänge" in arrays
 
nein, ich will das der array sowohl in der wagerechten als auch in der senkrechten weiche übergänge hat

stellt es euch mal als bild vor :wink:

denn das will ich ja letztendlich damit machen ... :-D

supermuckl 14. Mai 2004 19:48

Re: "weiche übergänge" in arrays
 
machs doch so..

generier dir erstmal ein grobes array das dir die berge und täler definiert

dann machst du daraus ein hochauflösenderes array wo die zwischenwerte berechnet...

das könntest du wiederum auch mit mehreren immer höher auflösenden arrays immer feiner machen und bei jeder stufe *vielleicht*
nochmal bisschen random werte generierst ( zur "berechneten zwischenhöhe" zwischen den grobauflösenden array punkten )

also immer weiter aufdröseln.. so müsste das dann denk ich mal in X und Y Richtung weich erscheinen
( vielleicht müsste man sich da einen Algorithmus ausdenken der in der Mitte von 4 Punkten(sozusagen die Pfeiler) den Mittelwert berechnet ( Höhe zwischen den "Pfeilern" ) ) also das das dann wie ein spinnennetz aussieht das runterhängt wo keine "Pfeiler" (grobe array Punkte) sind

.. ich weis ich hab das jetzt voll beschissen erklärt *g* falls du das nich gepeilt hast mach ich ne zeichnung

glkgereon 14. Mai 2004 19:51

Re: "weiche übergänge" in arrays
 
ohh, schwierig

ich weiss nit

mal gucken..

kannste dir event mal ein kelines beispeil-code ausdenken?

weiss nämlich nicht 100 pro ob ichs verstanden hab :-D

supermuckl 14. Mai 2004 20:02

Re: "weiche übergänge" in arrays
 
Liste der Anhänge anzeigen (Anzahl: 1)
hab mal drüber nachgedacht nochmal..
hab Skizze angehängt ( PNG := Internetexplorer )

glkgereon 14. Mai 2004 20:05

Re: "weiche übergänge" in arrays
 
ok, hier das prinzip beschrieben:

groben array machen

in grösseren array übertragen
dabei so strecken, das zwischen allen punkten je 1 punkt absttand ist

den zwischenpunkt zum glätten nutzen

das ganze paar mal wirderholen

dizzy 14. Mai 2004 20:12

Re: "weiche übergänge" in arrays
 
Das Verfahren nennt sich "lieneare Interpolation". Selbiges wird zum "schönen" Vergrößern von Bitmaps verwendet. Du wirst, wenn du mit einem z.B. 8x8-Array beginnst, und es so auf 256x256 hoch-interpolierst etwas unschöne Effekte haben. Das ganze wird relativ "blockig". Du könntest mal im Netz nach anderen Interpolationsmethoden suchen, etwa bi-/trilinear, quadratisch usw.

Auch eine Möglichkeit wäre es, einfach "wirkich" mit einem kleinen Bitmap anzufangen, und dieses mittels der Graphics32-Lib ( www.g32.org ) hochzurechnen. Die Lib hat nämlich schon 5 (oder 6) verschiedene Interpolationsverfahen drin. Lässt sich somit sehr einfach nutzen!

Und das ganze soll ja scheinbar eine Höhen-Map werden, gell!? Wenn du naturnahe Landschaften erzeugen willst, dann wäre ein anderer Ansatz geeigneter. Dafür verwendet man meist "Perlin-Noise". Auch hierzu wid man im Netz ordentlich fündig ;)
Ist aber mit deutlich mehr Aufwand verbunden. Hab ich mich auch noch nicht dran getraut, werd's aber in absehbarer Zeit tun :)


gruss,
dizzy

supermuckl 14. Mai 2004 20:14

Re: "weiche übergänge" in arrays
 
Liste der Anhänge anzeigen (Anzahl: 1)
jo *denke* mal so in der art könnte man das machen.. und wie gesagt bei den mittelwert berechnungen könnte man ja wieder +- *random* addieren :)

achja hab noch was zusätzlich gemalt
wie man immer die mitte zwischen 4 punkten berechnet ( das müsste dann echt weich werden ?! )

also immer feiner und immer den mittelpunkt berechnen (zwischen 4 punkten) ( keine seiten-mittelpunkte (zwischen 2 punkten))
und dann halt jedes mal 45° verdrehen das viereck wovon man die mitte berechnet ( siehe zeichnung ) so müsste man immer den mittelpunkt bekommen und benachbarte punkte mit beachten ( das es keine scharfen kanten gibt )

supermuckl 14. Mai 2004 20:16

Re: "weiche übergänge" in arrays
 
also im prinzip ne funktion der du 4 höhen übergibst ( die 4 eckpunkte ) und der dir dann den mittelwert berechnet +- random

und dann halt irgendwie festhalten ob man grad 45° verdreht ausliest oder nicht.. an den rändern wo es dann keine mittelpunkte zwischen 4 ecken sondern nur noch zwischen 2 ecken gibt da muss man sich halt eine 3 punkt funktion machen ( kanten der highmap ) oder halt verzweifeln *grübel* harte sache.. wenn das funzt will ich den source sehen :D

glkgereon 14. Mai 2004 20:19

Re: "weiche übergänge" in arrays
 
thx, aber da es tatsächlich maps fürn egoshpotter werden sollen :-)
werd ich dizzys trip mal nachgehen...

dizzy, brauchst du noch einen, der dir helfen, und nacheher alles abschreiben kann? *lol*

supermuckl 14. Mai 2004 20:22

Re: "weiche übergänge" in arrays
 
es gibt auch n proggi wo dir highmaps machen kann ( sogar gleich die gerenderte textur dazu )
http://www.planetside.co.uk/

damit mach ich schon paar jahre echt super aussehende fotorealistische landschaftsbilder.. da gibts auch das besagte "perlin-noise" und so.. auch canionize ( canion artige wucherungen generieren )

supermuckl 14. Mai 2004 20:27

Re: "weiche übergänge" in arrays
 
Liste der Anhänge anzeigen (Anzahl: 1)
kostprobe(mal schnell erstellt):

glkgereon 14. Mai 2004 20:30

Re: "weiche übergänge" in arrays
 
reaktion 1: geil!
reaktion 2: haben!

:-)

ist das freeware?

supermuckl 14. Mai 2004 20:33

Re: "weiche übergänge" in arrays
 
so ziemlich.. kannst halt keine riesen auflösungen generieren bzw super krasse effekte nich nutzen ( 95% gehen aber )

echt hart was man damit hinbekommt ( gallerien angucken lohnt 200% )

glkgereon 14. Mai 2004 20:36

Re: "weiche übergänge" in arrays
 
wo gibts das denn?

atreju2oo0 14. Mai 2004 20:40

Re: "weiche übergänge" in arrays
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich hab für die Uni mal so ein Programm geschrieben...
Zumindest denke ich das Du dir sowas vorstellst...
Ist aber ziemlich buggy noch und auf Erdkunde ausgelegt...

P.S.: Hat nix mit den Landschaften zu tun...
Einfach Datei -> neues Diagramm -> Random und dann erstellen!

glkgereon 14. Mai 2004 22:05

Re: "weiche übergänge" in arrays
 
geil, kann man dvon die sources haben?

dizzy 15. Mai 2004 01:48

Re: "weiche übergänge" in arrays
 
Ist ja lustig... Da wollte ich gerade auch noch Terragen als obergeiles Lanschafts-Tool empfehlen, den Link raussuchen - und was sehe ich: Ist planetside :lol:

Mein Lieblings-Map-Generator :!: Aber was sehe ich... Nicht mehr komplett frei! Das war mal anders... Ich bin wirklich enttäuscht :cry: Ich sehe in letzter Zeit immer häufiger, dass sehr interessante Freeware-Projekte nachher in ein (halb-)kommerzielles Produkt gewandelt werden. Sehr bedauerlich! :evil:

atreju2oo0 15. Mai 2004 08:30

Re: "weiche übergänge" in arrays
 
Liste der Anhänge anzeigen (Anzahl: 1)
Shit hab gedacht das waren die Sourcen gepackt... :oops:
Jetzt aber :angle:

glkgereon 15. Mai 2004 19:55

Re: "weiche übergänge" in arrays
 
thx :thuimb:
ich denk n bisserl umgebaut (darf ich doch, solang ichs für mich behalte, oder? :gruebel: ) wird mir das einige probleme ersparen :-D

atreju2oo0 15. Mai 2004 21:29

Re: "weiche übergänge" in arrays
 
Meinetwegen kannst Du's sogar verkaufen... :lol:

Aber mich würde dein Endprog interessieren.
:-D

glkgereon 16. Mai 2004 19:31

Re: "weiche übergänge" in arrays
 
naja, das endprog wird nur wenig anders aussehen

ich werd aber sehr viel rausreissen, da ich ja
nur die random funktion brauche
dann kann ich ja das ganze zeug mit den messstationen und so, sowie die beschriftungen raustun
ausserdem will ich ja nur grautöne ausgeben


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:40 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz