Hallo Board,
ich stehe momentan vor der Herausforderung ein Shellscript zu schreiben was einen mathematisch nicht ganz trivialen Vorgang automatisieren soll:
Ich habe eine Menge an Punkten im dreidimensionalen, welche eine Oberfläche beschreiben. Eine zweite Menge, welche eine andere Oberfläche beschreiben, diese Oberfläche ist etwas größer. Ich will also diese zwei Flächen darstellen und muss sie dann voneinander subtrahieren (um den Abstand der zwei Oberflächen graphisch darzustellen). Geht sowas mit GnuPlot? Oder muss ich mich da anderweitig umschauen?
Ich hoffe mal es ist halbwegs klar was ich brauche... Tabelle an Punkten, Fläche draus Bilden, zwei so Flächen voneinander abziehen...
Danke für alle Ratschläge
Idler
Mathematische Problemstellung
-
- Beiträge: 5648
- Registriert: 30.12.2004 15:31:07
- Wohnort: Wegberg
Re: Mathematische Problemstellung
Hallo
Sowas sollte man auch per Povray und CSG lösen bzw. darstellen können.
mfg
schwedenmann
Sowas sollte man auch per Povray und CSG lösen bzw. darstellen können.
mfg
schwedenmann
Re: Mathematische Problemstellung
Sind die Punkte der beiden Punktwolken aus dem gleichen Gitter? Also musst du nicht interpolieren?
Re: Mathematische Problemstellung
Geht es jetzt um Ebenen im dreidimensionalen Raum? Oder was für "Oberflächen" sind das? Kugeloberflächen? Ist die Form überhaupt bekannt? Liegen die Punkte exakt auf der Fläche, und wieviele Punkte pro Fläche sind gegeben?
Grüße
jay
Grüße
jay
Re: Mathematische Problemstellung
Ich arbeite eher mit Mathematica, aber hab auch ein paar Kenntnisse in Gnuplot.
Wenn ich das richtig verstehe:
Du hast 2 Datensätze, die jeweils eine Liste von Koordinatenpaaren in kartesischen Koordinaten sind. Diese Listen sind aber nicht gleich groß, sprich enthalten eine unterschiedliche Zahl von Koordinatenpaaren.
Die Koordinaten sollen eine Oberfläche im 3D-Raum beschreiben. Du hast aber nicht die exakte mathematische Beschreibung für eben diese Oberfläche.
Du willst nun die Flächen einzeln plotten, und dann die Differenz davon nochmal plotten?
Mein Vorschlag:
Schau dir "splot" in Gnuplot an, dort kannst du auch diskrete Datensätze plotten. Allerdings funktioniert "splot" nur mit kartesischen Koordinaten.
Dokumentation Gnuplot: http://www.gnuplot.info/documentation.html
Für die Differenz würde ich den kleineren Datensatz mit {0,0,0} auffüllen, und dann "größeren Datensatz"-"kleineren Datensatz" rechnen. Dadurch bekommst du eine neue Liste von Koordinatenpaaren, die du dann ebenfalls in dieser Weise plotten kannst.
Hoffe geholfen zu haben.
*edit*
Ich war etwas vorschnell mit dem Abziehen der Ebene, funktioniert nur unter besonderen Vorraussetzungen. Für die Erklärung siehe meinen zweiten Post, zwei drunter.
Wenn ich das richtig verstehe:
Du hast 2 Datensätze, die jeweils eine Liste von Koordinatenpaaren in kartesischen Koordinaten sind. Diese Listen sind aber nicht gleich groß, sprich enthalten eine unterschiedliche Zahl von Koordinatenpaaren.
Die Koordinaten sollen eine Oberfläche im 3D-Raum beschreiben. Du hast aber nicht die exakte mathematische Beschreibung für eben diese Oberfläche.
Du willst nun die Flächen einzeln plotten, und dann die Differenz davon nochmal plotten?
Mein Vorschlag:
Schau dir "splot" in Gnuplot an, dort kannst du auch diskrete Datensätze plotten. Allerdings funktioniert "splot" nur mit kartesischen Koordinaten.
Dokumentation Gnuplot: http://www.gnuplot.info/documentation.html
Für die Differenz würde ich den kleineren Datensatz mit {0,0,0} auffüllen, und dann "größeren Datensatz"-"kleineren Datensatz" rechnen. Dadurch bekommst du eine neue Liste von Koordinatenpaaren, die du dann ebenfalls in dieser Weise plotten kannst.
Hoffe geholfen zu haben.
*edit*
Ich war etwas vorschnell mit dem Abziehen der Ebene, funktioniert nur unter besonderen Vorraussetzungen. Für die Erklärung siehe meinen zweiten Post, zwei drunter.
Zuletzt geändert von Tutti am 03.07.2008 18:58:35, insgesamt 1-mal geändert.
Re:Mathematica -tutti
Hallo Tutti,
habe mir endlich Mathematika für Linux besorgt. Frage mich aber nun wie ich das auf Debian installieren soll.
Kannst Du mir bitte eine kurze Anleitung geben.
Danke Thomas
habe mir endlich Mathematika für Linux besorgt. Frage mich aber nun wie ich das auf Debian installieren soll.
Kannst Du mir bitte eine kurze Anleitung geben.
Danke Thomas
Re: Re:Mathematica -tutti
Bei mir war das so, wenn ich mich recht erinnere:thomasius hat geschrieben:Hallo Tutti,
habe mir endlich Mathematika für Linux besorgt. Frage mich aber nun wie ich das auf Debian installieren soll.
Kannst Du mir bitte eine kurze Anleitung geben.
Danke Thomas
Habe von Wolfram (Mathematica Hersteller) eine eMail mit Downloadlink bekommen, nachdem ich die Lizenz beantragt hatte. Dort konnte ich die Linux Variante in Form einer Binary runterladen. Die Datei ausführbar machen, und dann logischerweise ausführen. Das wurde dann einfach installiert und währenddessen einige Pfade abgefragt, aber da kann man durchaus die Standard Sachen lassen, wenn ich mich recht erinnere.
Das wichtige:
Am Schluss wurde ein Key generiert, der von der eigenen Hardware abhängt. Mit diesem Key konnte man sich von Wolfram den passenden Registrierungsschlüssel geben lassen. Den Schlüssel dann beim ersten Start eingeben und es funktionierte.
Zusatz
Ich war oben etwas schnell, wie ich gerade bemerke. Die Ebenen, in der Art wie ich sie beschrieben habe, voneinander abziehen funktioniert logischerweise nicht immer. Es sollten wohl immer 2 Koordinatenpaare (zB x,y) + Höhe (z) vorhanden sein. Es macht natürlich nur Sinn, für das entsprechende Paar (x,y) die (z) Werte abzuziehen. Oder eben (y,z) festhalten und (x) abziehen, je nachdem. Wenn das völlig willkürliche Punkte sind, und man die nicht nach einem solchen Kriterium sortieren kann wird es schwierig.
Re: Mathematische Problemstellung
Ob das jetzt wirklich in den Programm Gesucht kommt sei mal dahingestellt. Ist für mich nur ne Mathematik-Frage.
Prinzipiell gibts da 2 Möglichkeiten.
1. falls die Datensätze gleichen, festen x,y koordinaten eine z-komponente zuweisen, können wir einfach die Datensätze manuell voneinander abziehen (z.b. ooocalc) und danach plotten. Mit Gnuplot ist da splot wie tutti schon sagte der richtige Befehl. Gnuplot stößt allerdings hierbei bei der Interpolation an seine Grenzen wenn man nicht nur die Punkte plotten will, sondern so ein schönes Netz.
2. Falls nicht exakt gleiche Koordinatensätze vorhanden sind stoßen wir an ein Problem unabhängig von den Programmen. Wir versuchen auf einem Punkt/Vektor an einer Fläche deren Verlauf wir nicht (genau) kennen, einen anderen Punkt/Vektor abzuziehen. Bei hinreichender Datendichte reicht es womöglich aus die Fläche zu stückeln und einen geradlinigen Verlauf zwischen den Gittenpunkten anzunehmen. Ansonsten bleibt als weiteres Interpolationsverfahren nur noch das Fitting (was gnuplot hingegen wieder sehr gut kann, im gegensatz zu Excel mit dem "Data Analysis Tools"). Hierzu müssen wir allerdings wieder einen Funktionsverlauf wissen an den wir fitten wollen und dann die beiden Funktionen voneinander abziehe. Problem ist also im Allgemeinen mathematisch schon nicht wirklich zu lösen. Die Frage is also meiner Meinung nach nicht mehr nach einem Plotter ,sondern nach einem vernünftigen Interpolationsalgorithmus.
Ich würde für so nen umfangreichen Zweck aber auch eine der Mathematik-Programme verwenden, bzw. vllt lässt sich mit mehr Informationen über die Datensätze (und der Mathematikkenntnisse des Threadstarters^^) die herangehensweise deutlich vereinfachen.
Prinzipiell gibts da 2 Möglichkeiten.
1. falls die Datensätze gleichen, festen x,y koordinaten eine z-komponente zuweisen, können wir einfach die Datensätze manuell voneinander abziehen (z.b. ooocalc) und danach plotten. Mit Gnuplot ist da splot wie tutti schon sagte der richtige Befehl. Gnuplot stößt allerdings hierbei bei der Interpolation an seine Grenzen wenn man nicht nur die Punkte plotten will, sondern so ein schönes Netz.
2. Falls nicht exakt gleiche Koordinatensätze vorhanden sind stoßen wir an ein Problem unabhängig von den Programmen. Wir versuchen auf einem Punkt/Vektor an einer Fläche deren Verlauf wir nicht (genau) kennen, einen anderen Punkt/Vektor abzuziehen. Bei hinreichender Datendichte reicht es womöglich aus die Fläche zu stückeln und einen geradlinigen Verlauf zwischen den Gittenpunkten anzunehmen. Ansonsten bleibt als weiteres Interpolationsverfahren nur noch das Fitting (was gnuplot hingegen wieder sehr gut kann, im gegensatz zu Excel mit dem "Data Analysis Tools"). Hierzu müssen wir allerdings wieder einen Funktionsverlauf wissen an den wir fitten wollen und dann die beiden Funktionen voneinander abziehe. Problem ist also im Allgemeinen mathematisch schon nicht wirklich zu lösen. Die Frage is also meiner Meinung nach nicht mehr nach einem Plotter ,sondern nach einem vernünftigen Interpolationsalgorithmus.
Ich würde für so nen umfangreichen Zweck aber auch eine der Mathematik-Programme verwenden, bzw. vllt lässt sich mit mehr Informationen über die Datensätze (und der Mathematikkenntnisse des Threadstarters^^) die herangehensweise deutlich vereinfachen.