Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   3D Funktion (https://www.delphipraxis.net/162173-3d-funktion.html)

Cicaro 10. Aug 2011 17:13

3D Funktion
 
Hallo.

Hier sind eher die Mathematiker gefragt. Ich kenn mich mit 3D Funktionen nicht sonderlich gut aus aber würde gern was dazulernen. Ich suche im Grunde eine Funktion, die folgende Eigenschaften besitzt:

Vorgaben:
- Funktion sollte sich aus Sinus und Kosinus zusammensetzen (nicht stetig steigend oder fallend, und keine Grenzwerte)
- Funktion sollte sich beliebig jedoch zwischen 2 festen Werten bewegen (zB -1 und 1, mich interessiert eigentlich genau 1 Wert, der von 2 Variablen abhängt)
- x und y sind die beiden Variablen und z das Funktionsergebnis
- Funktion sollte in etwa wie eine Wasseroberfläche aussehen (kann beliebig krum sein, jedoch ohne großartige Brüche)


Ich hoffe das reicht an Parametern!
Ihr dürft mich gern nach Strich und Faden belehren. Ich bitte euch zu schlau-meiern!! :-D
//Edit: Und kennt jemand Freeware-Tools zum veranschaulichen solcher Funktionen ?

MfG

jfheins 10. Aug 2011 17:26

AW: 3D Funktion
 
Hmmmm, da gibt's mehrere Möglichkeiten.

Eine sehr einfache ist z.B. diese hier:
http://www.wolframalpha.com/input/?i...9%2Bsin%28y%29
+ Hat ein paar Wellen
- Für eine Wasseroberfläche viel zu regelmäßig

Ob die jetzt gut oder schlecht ist kommt auch ein bisschen drauf an, was du damit machen willst ;-)

Sinderion 10. Aug 2011 17:57

AW: 3D Funktion
 
Puh, das ist schwieriger als gedacht! :shock:

Mein (zurzeit) bester Versuch:

10*Sin[(x + Sin[y])]+10*Sin(y + Cos[x])]

Das größte Problem ist wohl, dass man mit z = f[x,y] keine sich brechenden Wellen (heißt das so?) erhalten kann.
Mit Parametrischen Funktionen könnte man das ev. besser hinbekommen, bin mir aber nicht sicher

Cicaro 11. Aug 2011 00:53

AW: 3D Funktion
 
Zitat:

Zitat von Sinderion (Beitrag 1116072)
Das größte Problem ist wohl, dass man mit z = f[x,y] keine sich brechenden Wellen (heißt das so?) erhalten kann.

Brechende Wellen sind mit Funktionen allgemein nicht möglich, da Funktionen für jede Eingabe immer nur einen Funktionswert haben können (sonst wären es keine Funktionen).

Ich habe gerade ganz grob gesagt z = Sin(x) + Cos(y) ausprobiert und es sieht sehr wellig aus. Ich vermute ich muss sehr viel mehr sin und cos einmischen und x und y noch etwas strecken/stauchen/etc.

Und das führt mich wohl zu "Perlin noise" ...
Kennt sich jemand damit aus ? Oder hat jemand Lust etwas damit zu arbeiten ? :thumb:

Medium 11. Aug 2011 08:21

AW: 3D Funktion
 
Es wäre auch nicht unwichtig zu wissen, was für ein Wasser dir so vorschwebt. Ein ruhiger Tümpel verhält sich doch etwas anders als ein windiger Strand, oder mitten im Ozean. Vom Grundsatz her ist Perlin-Noise praktisch nie falsch, aber da gibt's sooo viele Wege Feintuning zu betreiben.
Da Perlin-Noise eine absolute Standardaufgabe im Bereich Grafik ist, finden sich dazu Haufen an Dingen im Netz zum Verständnis. Das macht wenig Sinn hier zu wiederholen.
Zitat:

Oder hat jemand Lust etwas damit zu arbeiten ?
Ich hoffe doch du ;)

Cicaro 11. Aug 2011 12:40

AW: 3D Funktion
 
Zitat:

Zitat von Medium (Beitrag 1116143)
Zitat:

Oder hat jemand Lust etwas damit zu arbeiten ?
Ich hoffe doch du ;)

Ja meine Begeisterung dafür hält sich in Grenzen. Ich arbeite eigentlich an der Engine eines Spiels und benötige diesen kleinen Umweg für die "Weltgenerierung". Aber falls jemand Welten nach seinen Wünschen in einem Spiel generieren möchte, wäre ich dafür dankbar und würde es natürlich durch Namensnennung zu würdigen wissen (allerdings ist das ein Projekt zu Lernzwecken etc.).

Achja es geht hier nicht ums Wasser, eher um eine (möglichst) extrem zufällige Weltgenerierung. ^^

Memnarch 11. Aug 2011 13:32

AW: 3D Funktion
 
Stellt sich noch die Frage: Machst du "nur" Oberflächengenerierung oder etwas in die richtung wie MineCraft(Tunnelsystem, Untergrundgenerierung)



MFG
Memnarch

BUG 11. Aug 2011 13:57

AW: 3D Funktion
 
Und da findet sich unter Bei Google suchenheightmap algorithm nichts?
Eine nette Linksammlung gibt es z.B. hier.

EDIT: noch einfacher Algorithmus zum schnell implementieren.
Code:
Eingabe:
  L
  A Anfangsvariation
  D Variationsdämpfung (<= 1 für sinnvolle Ergebnisse)
Ausgabe:
  Heightmap L (2^L mal 2^L)
Variablen:
  V Variation
Ablauf:
  L := ein "Teilstück" mit der Größe 2^L mal 2^L
  V := A
  solange Teilstücke größer 1
    für jedes Teilstück T von L
      teile T in 4 gleichgroße neue Teilstücke T_1 bis T_4.
      für die neuen Teilstücke T_i tue
        T_i.höhe := T_i.höhe + 2*zufall(0 bis 1)*V - V
    V := A*V
Wenn dir das Ergebnis zu verrauscht aussieht, kannst du es noch glätten.

Cicaro 12. Aug 2011 23:04

AW: 3D Funktion
 
Zitat:

Zitat von Memnarch (Beitrag 1116252)
Stellt sich noch die Frage: Machst du "nur" Oberflächengenerierung oder etwas in die richtung wie MineCraft(Tunnelsystem, Untergrundgenerierung)

Naja ich sehe die größte Schwierigkeit in der Oberflächengenerierung. Wenn man sich Minecraft anschaut, so kann man im Grunde die Welt in 2 Teile aufteilen, Luft und Boden. Dann setzt man eine Höhe für den Meeresspiegel, füllt alles Luft unter dem Meeresspiegel mit Wasser auf und setzt auf der höchsten Bodenschicht Gras hin. Schließlich fügt man rein zufällig zusammenhängende Erze in den Boden ein und schon hat man eine Minecraft Welt. Tunnel ist allerdings auch ein Problem, das meiner Meinung nach mit einem ähnlichen Prinzip wie bei der Oberfläche gelöst werden kann.

Wie gesagt ich arbeite an der Engine und versuche gerade die Welt "unendlich" groß zu machen.

Medium 12. Aug 2011 23:08

AW: 3D Funktion
 
Wenn es zumindest ein wenig abwechslungsreich und "nett" sein soll, wirst du um Noises und ggf. fraktal-ähnliche Konstrukte nicht herum kommen. Man schaue sich z.B. Bei Google suchenTerragen an: Im Grundsatz alles Perlin-Noise.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:04 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