DMUG-Archiv 2006

Frühere   Chronologischer Index   Spätere
Vorherige   Thematischer Index   Nächste

Re: 3D Niveaulinien

Guten Abend Reinhard,

Ihr unteres Bild ist ein ContourPlot. In einem 3D Plot können Sie einen ContourPlot mit ShadowPlot aus dem Graphics3D Paket einfüen.

Bezüglich der Aufgabe, in einen Plot3D-Bild z-Niveaulinien einzuzeichnen, sollten Sie einmal MathSource absuchen. Wenn Sie es eigenhändig tätigen wollen, dann empfiehlt sich auf die Schnelle folgendes:

(1) Plot3D mit Mesh -> False
(2) die Niveaulinien aus einem Gatter von ImplicitPlots herausholen
(3) alles zusammen zeichnen, mit anderen Worten,

In[136]:=
Needs["Graphics`ImplicitPlot`"];
Clear[schlosserLevelsHomeMade];
schlosserLevelsHomeMade[f_, x_, y_, xMin_, xMax_, yMin_, yMax_, z_List, opts___] := (* expecting f as f[x, y] in {xMin, xMax} x {yMin, yMax}; want to plot levels at values from z in the list *)
Module[{lines, l0, g3D},
 If[FreeQ[f, x] || FreeQ[f, y],
   Print["Function f independent from x,y."];
   Return[$Failed]
 ];
 g3D = Plot3D[f, {x, xMin, xMax}, {y, yMin, yMax}, opts,
   Mesh -> False, DisplayFunction -> Identity];
 lines = {};
 (* ugly, i.e. procedural *)
 For[o = 1, o <= Length[z], o++,
   lines = Append[lines, Part[First[Graphics[ImplicitPlot[f == z[[o]],
          {x, xMin, xMax}, {y, yMin, yMax},
DisplayFunction -> Identity, opts]]], All, 3] /. {p_?NumberQ, q_?NumberQ} -> {p, q, z[[o]]}
   ]
 ];
Show[{g3D, Graphics3D[{AbsoluteThickness[1], lines}]}, DisplayFunction -> $DisplayFunction]
] /;  Length[z] > 0

In[147]:=
schlosserLevelsHomeMade[Sin[x y] Cos[x + y], x, y, -Pi, Pi, -Pi, Pi, Range[-0.9, 0.9, 0.1], PlotPoints -> 83]

gibt das Bildchen im Anhang. Problem ist, dass die Polygone von g3D zuzeiten die lines verdecken, weil die Polygone und die lines unabhängig voneinander diskretisiert sind. Andererseits braucht man die Polynome gerade wg. ihrer Verdeckungsanalyse: Ohne die Polygone sieht man ein sinnloses Gewirr von Niveaulinien. Bevor man hier Verbesserungen anbringt, ist die Suche auf MathSource angebracht, denn solche Darstellungsaufgaben sind mglw. grundlegend in der Welt des technischen Zeichnens.

Gruss
Udo.


reinhard schlosser wrote:

Liebe Liste,

ich möchte den Graph einer reellwertigen Funktion von zwei Veränderlichen zeichen.

Z. B. z = f(x,y) = (x2 + 3 y2) exp(1 - (x2 + y2)).

Verwende ich Plot3D, dann wird der Graph durch ein Netz von partiellen Funktionen dargestellt. Wie kann ich statt dieses Netzes mit Plot3D oder Ähnliches eine Schar von 3D-Niveaukurven darstellen lassen? Zusätzlich sollten diese Niveaukurven noch in eine Ebene z = const der 3D-Darstellung projeziert werden.
Im Anhang ist graphisch dargestellt, was ich gerne hätte.
Vielen Dank im voraus für Eure Hilfe.

JPEG image

Verweise:
Frühere   Chronologischer Index   Spätere
Vorherige   Thematischer Index   Nächste

DMUG DMUG-Archiv, http://www.mathematica.ch/archiv.html