Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Höhenlinien-Interpolation

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] > 2 <
010
27.12.2015, 19:25 Uhr
ao

(Operator)


Na ja, niemand hat gesagt, dass das einfach ist, aber sooo kompliziert ist es nun auch wieder nicht. Eigentlich reicht es, eine anschauliche Vorstellung von Ableitungen zu haben. Jahrelang studieren muss man dafür nicht.

Wie gesagt, lies mal was über Geoinformationssysteme. Aus allen möglichen Daten Karten aufzubereiten ist eine Grundaufgabe davon. Wenn ich deinen Blog richtig gelesen habe, lebst du in Köln. Da sollte es eigentlich gut ausgestattete öffentliche Bibliotheken geben, wo Bücher nicht viel kosten.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
28.12.2015, 16:28 Uhr
Yadgar



Hi(gh)!


Zitat von ao:
Eigentlich reicht es, eine anschauliche Vorstellung von Ableitungen zu haben. Jahrelang studieren muss man dafür nicht.



f(x) = 7x³+4x²-x+2
F(x) = 1,75*x^4+4/3*x³+0,5*x²+2x
f'(x) = 21x²+8x+1
f''(x) = 42x+8
f'''(x) = 42

Zweiundvierzig! Die Antwort ist zweiundvierzig!!!


Zitat von ao:

Wenn ich deinen Blog richtig gelesen habe, lebst du in Köln. Da sollte es eigentlich gut ausgestattete öffentliche Bibliotheken geben, wo Bücher nicht viel kosten.


Das Niveau in der städtischen Zentralbibliothek hat in den letzten zehn Jahren ziemlich nachgelassen - Programmierliteratur beschränkt sich auf C++- und Java-Einführungen bzw. "Wie programmiere ich Spiele für Wischhandys", wo es Mitte der 2000er Jahre noch Bücher z. B. über Grafikformate oder Kryptographie gab... den wirklich guten Stoff wird man wohl eher in der FH-Bibliothek bekommen!

(und zum Thema "Afghanistan" gibt es in der Geographieabteilung noch ganze fünf Bücher - von denen ich drei selbst besitze! Traurig... aber andere Baustelle!)

Bis bald im Khyberspace!

Yadgar
--
Flagmaker - ein Programmier-Blog

Dieser Post wurde am 28.12.2015 um 16:47 Uhr von Yadgar editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
28.12.2015, 20:09 Uhr
Hans
Library Walker
(Operator)



Zitat von Yadgar:
den wirklich guten Stoff wird man wohl eher in der FH-Bibliothek bekommen!


Oder in der Uni-Bibliothek; - stellt sich nur die Frage, ob die auch öffentlich ist, d.h. ob man sich dort auch als externer Nutzer anmelden kann, um Bücher auszuleihen?
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.

Dieser Post wurde am 28.12.2015 um 20:10 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
03.01.2016, 23:23 Uhr
Hans
Library Walker
(Operator)


Hi,

Zitat von Yadgar:

Höhere Mathematik... bis ich die verstanden habe, gehen wohl noch ein paar Jahre ins Land!


das ist nicht ungewönlich, d.h. Du wärst nicht der Erste, der dafür ein Weile braucht. Um es etwas einfacher zu machen: Dieses Buch hab ich neulich entdeckt und es war mir gleich sympatisch. ;-) Es gibt dazu auch noch einen Titel zur Analysis: Analysis - anschaulich und anwendungsorientiert. Wenn Du die in der Stadtbibliothek nicht findest, dann sicher in der FH- oder Unibibliothek, wo ich sie als erstes mal her holen würde.

Dann noch kurz zu den GIS, also den Geografischen InformationsSystemen: Da gibt es u.a. auch das Programmpaket QGIS, welches ein "freies Open-Source-Geographisches-Informationssystem" ist. Dazu ein Tutorial auf einer anderen Website, die auch sonst noch nützlich sein könnte.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.

Dieser Post wurde am 03.01.2016 um 23:24 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
03.01.2016, 23:28 Uhr
Hans
Library Walker
(Operator)



Zitat von ao:
Eigentlich reicht es, eine anschauliche Vorstellung von Ableitungen zu haben. Jahrelang studieren muss man dafür nicht.



Zitat von Yadgar:

f(x) = 7x³+4x²-x+2
F(x) = 1,75*x^4+4/3*x³+0,5*x²+2x
f'(x) = 21x²+8x+1
f''(x) = 42x+8
f'''(x) = 42

Zweiundvierzig! Die Antwort ist zweiundvierzig!!!


Was uns zeigt, dass Du ein paar Grundlagen der höheren Mathematik ja schon kennst, denn wir haben hier ja nicht die Antwort auf die ultimative Frage, sondern die dritte Ableitung einer Funktion, die uns hier 42 als Ergebnis liefert.
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.

Dieser Post wurde am 03.01.2016 um 23:29 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
08.01.2016, 06:22 Uhr
Hans
Library Walker
(Operator)


Hi,

irgendwie beschäftigt micht dieses Thema auch, weil ich ein ähnliches Problem "auf der langen Bank liegen" habe...

Ich beziehe mich jetzt nur mal auf dieses hier:

Zitat von Yadgar:
Ich habe ein Programm geschrieben, das aus Bitmaps (TGA-Format) mit aus eingescannten topographischen Karten extrahierten Höhenlinien 16-bit-Heightfields für POV-Ray erzeugen soll. POV-Ray interpretiert dabei nur die Rot- und Grünwerte, so dass sich 65536 Höhenstufen ergeben.



Das die Ausgabe von PovRay weiter verarbeitet werden soll, lass ich mal aussen vor, denn es geht mir gerade nur darum, aus dem Bild mit den Höhenlinien ein Heigtfield zu machen. Dazu kam ich auf folgenden Ansatz: Das Programm liesst die Bilddatei, die im besten Fall nur zweifarbig ist, also nur ein Bit Farbtiefe hat. In der Bilddatei ist ja auch die Höhe und die Breite des Bildes codiert. Diese wird dazu benutzt, ein Integerarray mit den gleichen Ausmaßen des Bildes zu definieren, aus dem das Heightfield wird. Dieses Array wird zunächst mit -99999 (also einen sehr kleinen negativen Wert) initialisiert, da 0 (Null) durchaus ein sinnvoller Wert sein kann. Der Wert -99999 zeigt an, das für diesen Punkt noch kein Wert ermittelt wurde.
Als nächstes sucht das Programm vom Koodinatenursprung des Bildes aus die erste Höhenlinie. Wenn es die gefunden hat, wird an den korrepondierenden Koordinaten des Int-Arrays ein Wert gesetzt, z.B. Eins.
Anschliessend wird die Fläche, die sich jenseits der Höhenlinie befindet abgescannt und die zugehörigen Punkte (inclusive derer der Höhelinie selbst) im Heightfield ebenfalls auf eins gesetzt. Das macht man solange, bis die nächste Höhenlinie kommt. Die begrenzt den zu füllenden Bereich. Dieses Durchsuchen ist im Prinzip das gleiche, wie bei einem Algorithmus zum Flächen füllen in Malprogrammen, also ein Floodfill. Der Unterschied ist, dass ein einer Bitmap gesucht wird und Werte an korrespondierenden Koordinaten in einem Integerarray geändert werden.
Dieses Vorgehen dient dazu, Widersprüche zu vermeiden, die auftreten können, wenn eine Höhenline an zwei verschiedenen Stellen der x-Achse den gleichen y-Wert hat, etwa weil sie einen Bogen beschreibt.
Wenn auf diese Weise eine Fläche bearbeitet wurde, d.h. ein Teil des Int-arrays mit Werten belegt ist, wird die nächste Höhenlinie gesucht. Wenn diese gefunden ist, wird wiederum der Bereich jenseits dieser Höhenlinie nach dem selben Prinzip abgesucht. In dem Intarray wird jetzt aber ein anderer Wert eingetragen, als zuvor. Der kann jetzt zwei betragen, besser ist es aber, wenn er 10 beträgt. Warum, erkläre ich später noch.
Das ganze wird solange widerholt, bis das Bild komplett bearbeitet ist.

Jetzt gibt es aber noch vier Probleme:
1. Da nur die Höhenlinien gegeben sind, aber keine weiteren Informationen, können Gipfel und Senken (oder Täler) nur schlecht, bzw. gar nicht erkannt werden.
2. Es ist wichtig, das die Höhenlinien auch wirklich getrennt sind. Denn wenn sie zu nah aneinander liegen, kann es sein, das sie nicht mehr eindeutig auseinander zu halten sind.
3. Nachdem man den Floodfill das erste mal ausgeführt hat, und auf die zweite Höhenlinie trift, ist es nötig, an der korrespondierenden Stelle im Intarray nachzusehen, ob dort schon ein Wert ungleich des Init-Wertes steht! Dann braucht man da nämlich erst mal nichts weiter zu tun. Das kann durch den floodfill durchaus vorkommen, nämlich dann, wenn die zweite gefundene Höhenlinie in Wirklichkeit das andere Ende der ersten ist, also an einer Stelle y zwei x-Werte hat. Und ebenfalls, wenn eine Höhenlinie an einer Stelle x zwei y-Werte hat, also etwa auch wieder einen Bogen beschreibt.
4. Wenn man diese Arbeit mit einem Bild erledigt hat, erhält man als Ergebnis nur "Tafelberge", bzw. Stufen. An dieser Stelle kommt die Sache mit Gradientenberechnung und der Spline-interpolation ins Spiel, die ao vorgeschlagen hat. Dazu ist es nach meinen bisherigen Überlegungen allerdings erfolderlich, sich den Verlauf der Höhenlinien zu merken. Ansonsten müsste man das mit in den Floodfill-Algorithmus einbauen, und das halte ich bisher nicht für sinnvoll.
Wenn man die Gradienten jedoch an den Punkten entlang der Höhenlinien berechnet hat, kann man den Bereich zwischen jeweils zwei Höhenlinien mit Zwischenwerten füllen, die sich für den Bereich als passend ergeben. Das ist auch der Grund dafür, die einzelnen Felder mit Zahlen zu füllen, die sich um mehr als eins unterscheiden. (Anmerkung für mich: Vielleicht ist es auch sinnvoll, anstelle von integer ein Array aus float-zahlen zu nehmen. Dann kann man für die jeweilige Steigung soviele Zwischenwerte bestimmen, wie man braucht. Bei sehr steilem Gelände kommt man mit wenig Zwischenwerten aus, bei sehr geringen Steigungen kann man dagegen auch mehr als 10 aus meinem obigem Beispiel bestimmen. Beim speichern werden die Daten dann mit einem Faktor einer glatten 10er-Potenz multipliziert und nach int konvertiert. Ende der Anmerkung.)

Wenn Du mit Blender eingermassen klar kommst, ist es eine brauchbare Idee, ein Bild mit wenigen Höhenlinien (max. 10) zu nehmen und das entsprechende Gelände aus einem Grid heraus nachzubauen. Ich hab das mal mit 9 Höhenlinien gemacht:

Hier nur die Höhenlinien; als Bezierkurven in Blender.
Hier mit einem Grid darüber. Es besteht aus 61 x 61 Vertexen.
Und hier das, was dabei heraus kommen kann.

Am Letzten Bild sieht man zum einem, was ich mit "Tafelbergen" meine. Aber auch, das die Höhenlinien, wenn sie für sich alleine stehen, nicht eindeutig sind. Oder ist irgendwer beim betrachten der Höhenlinien auf die Idee gekommen, dass das unten rechts eine Senke sein könnte?

Soweit mal für den Augenblick,
Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.

Dieser Post wurde am 08.01.2016 um 06:23 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: