![]() |
"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 |
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. |
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.... |
Re: "weiche übergänge" in arrays
naja dann nimmst Du einen doppelt so großen Bereich und ziehst vom ergebnis die hälfte ab...
|
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 |
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 |
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 |
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 ) |
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 |
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 ( ![]() 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 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:27 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz