AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

"weiche übergänge" in arrays

Ein Thema von glkgereon · begonnen am 13. Mai 2004 · letzter Beitrag vom 16. Mai 2004
Antwort Antwort
Seite 1 von 3  1 23      
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#1

"weiche übergänge" in arrays

  Alt 13. Mai 2004, 21:30
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
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
tommie-lie
(Gast)

n/a Beiträge
 
#2

Re: "weiche übergänge" in arrays

  Alt 13. Mai 2004, 22:02
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.
  Mit Zitat antworten Zitat
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#3

Re: "weiche übergänge" in arrays

  Alt 14. Mai 2004, 19:26
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....
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
Benutzerbild von GuenterS
GuenterS

Registriert seit: 3. Mai 2004
Ort: Österreich > Bad Vöslau
760 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: "weiche übergänge" in arrays

  Alt 14. Mai 2004, 19:32
naja dann nimmst Du einen doppelt so großen Bereich und ziehst vom ergebnis die hälfte ab...
Günter
  Mit Zitat antworten Zitat
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#5

Re: "weiche übergänge" in arrays

  Alt 14. Mai 2004, 19:35
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

denn das will ich ja letztendlich damit machen ...
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
supermuckl

Registriert seit: 1. Feb 2003
1.340 Beiträge
 
FreePascal / Lazarus
 
#6

Re: "weiche übergänge" in arrays

  Alt 14. Mai 2004, 19:48
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
Das echte Leben ist was für Leute...
... die im Internet keine Freunde finden!
  Mit Zitat antworten Zitat
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#7

Re: "weiche übergänge" in arrays

  Alt 14. Mai 2004, 19:51
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
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
supermuckl

Registriert seit: 1. Feb 2003
1.340 Beiträge
 
FreePascal / Lazarus
 
#8

Re: "weiche übergänge" in arrays

  Alt 14. Mai 2004, 20:02
hab mal drüber nachgedacht nochmal..
hab Skizze angehängt ( PNG := Internetexplorer )
Miniaturansicht angehängter Grafiken
highmap_brainstorm.png  
Das echte Leben ist was für Leute...
... die im Internet keine Freunde finden!
  Mit Zitat antworten Zitat
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#9

Re: "weiche übergänge" in arrays

  Alt 14. Mai 2004, 20:05
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
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: "weiche übergänge" in arrays

  Alt 14. Mai 2004, 20:12
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
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:12 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