Tikz oder PSTricks: Rechteck --> Torus

Tabellen und Grafiken erstellen und anordnen


BlackDevil
Forum-Century
Forum-Century
Beiträge: 107
Registriert: Di 23. Jul 2013, 11:38
Wohnort: Deutschland

Tikz oder PSTricks: Rechteck --> Torus

Beitrag von BlackDevil »

Hallo Zusammen,

ich möchte meiner Arbeit eine Grafik verpassen, einfach weil es den Text sehr gut Unterstützt.

Folgendes zur Vorstellung:
Man nehme ein rechteckiges Gitter, zum Beispiel der Größe 5x10. Die Ecken dieses Gitters sollen mit den Buchstaben A bis D versehen werden. Darüberhinaus soll ein Pfeil von einer Seite zur anderen zeigen. Nun nimmt man das Gitter und faltet die Seite AC auf die Seite BD und erhält einen Zylinder. Die Buchstaben A, B, C und D sind entsprechend vermerkt, das Gitter weiterhin zu sehen. Ein Pfeil kommt oben zentriert aus dem Zylinder raus und und zeigt auf der Unterseitze, zwischen C und D, auf das Zentrum. Im dritten Bild sind die beiden Kanten des Zylinders, AB und CD, aufeinander gefaltet und man erhält einen Torus.

Pfuach :shock: Hier noch mal als Bild:
Bild

Ich arbeite, wenn ich Grafiken mit Tikz erstelle, mit dem Programm Tikzedt. Das geht einfach schneller als ständig neu zu kompilieren. Nun finde ich aber nur Workarounds zum Thema Zylinder und Torus. Und PSTricks bekomme ich nicht ordentlich ans laufen... Tikz läuft aber.

Meine Frage nun: Kann mir jemand mit der Grafik auf die Sprünge helfen? Am liebsten wäre mir Tikz, aber ich vermute, dass der Zylinder und der Torus nur mit Workarounds möglich sind, oder? Und mit PSTricks habe ich 0 Erfahrungen ...


Danke im Voraus und Grüße

feuersaenger
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 91
Registriert: Mi 5. Okt 2011, 18:24
Wohnort: Rheinbach

Beitrag von feuersaenger »

Hallo,

Teilaufgaben davon wurden in anderen Foren auch schonmal gestellt, so z.B. unter

https://tex.stackexchange.com/questions ... 171#162171

https://tex.stackexchange.com/questions ... using-tikz

Vielleicht kommst Du damit schon weiter? Immerhin basieren diese plots auf surface plots, d.h. auf Matrixartigen input daten, die lediglich geeignet in X und Y angepasst sind.

Die Pfeilchen / text nodes kann man auch dazu plazieren.

Gruss

Christian

BlackDevil
Forum-Century
Forum-Century
Beiträge: 107
Registriert: Di 23. Jul 2013, 11:38
Wohnort: Deutschland

Beitrag von BlackDevil »

Der Zylinder gefällt mir gut, ebenso der Ansatz das ganze zu plotten :D

Auf Basis dessen könnte ich versuchen einen Torus zu erstellen. Ich hoffe nur ich brauch dafür nicht all zu lange :oops:

Danke. Ich melde mich dann mit Ergebnissen

BlackDevil
Forum-Century
Forum-Century
Beiträge: 107
Registriert: Di 23. Jul 2013, 11:38
Wohnort: Deutschland

Beitrag von BlackDevil »

So, naja ... so richtig klappen will das nicht.
\documentclass{article}
\usepackage{tikz,amsmath, amssymb,bm,color}
\usepackage[margin=0cm,nohead]{geometry}
\usepackage{pgfplots}
\usepackage[active,tightpage]{preview}
\usetikzlibrary{shapes,arrows}
% needed for BB
\usetikzlibrary{calc}

\begin{document}
\begin{tikzpicture}
\node [circle, fill=black] (0,0) {};
% 	\begin{axis}[at={(0,-10)}]
%         \addplot3[surf,samples=25,samples y=31,domain=0:1*pi,y domain=0:2*pi] ({4*cos(deg(y))},{4*sin(deg(y))},{x});
%     \end{axis}
    
  \begin{axis}
     \addplot3[
         surf,
         colormap/cool,
         samples=20,
         domain=0:2*pi,
         y domain=0:2*pi,
         z buffer=sort
       ]
       ( {(0.5+1+cos(deg(x)))*cos(deg(y+pi))}, 
         {(0.5+1+cos(deg(x)))*sin(deg(y+pi))}, 
         {sin(deg(x))}
       );
  \end{axis}
\end{tikzpicture}
\end{document}
Den Code hab ich so aus Tikzedt rausgezogen.

Nun gibt es folgende Probleme:
- Der Torus sieht arg ugly aus ... Edit: die modifizierte Version ist hübscher aber noch etwas wulstig
- Ich bekomme es nicht hin die Umgebungen zu verschieben ...
- Gut, dass das Ganze so bunt ist und man das Koordinatensystem sieht wird eine Einstellungssache sein :)

Aber es ist mal ein Anfang :D

feuersaenger
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 91
Registriert: Mi 5. Okt 2011, 18:24
Wohnort: Rheinbach

Beitrag von feuersaenger »

Hi,

basierend auf Deinem Anfang habe ich kurz vor dem Abendessen mal was rumgebastelt. Zu den Pfeilchen bin ich noch nicht gekommen, aber vielleicht findest Du ja die Farbkodierung auch inspirierend (obwohl weder gefragt noch komplett konsistent gemacht).

Die Pfeilchen und so kannst Du einfach innerhalb von \begin{axis} ... \end{axis} eintragen - mit der Sonderbehandlung, dass jede Koordinate im "axis cs" angegeben werden muss (vgl. das unterste Bild, da ist mal so eine drin).
\documentclass{standalone}

\usepackage{pgfplots}

\pgfplotsset{compat=1.9}

\begin{document}

% options for all following plots:
\pgfplotsset{
	hide axis,
	colormap/cool,
	%
	% allow \draw ... instructions inside of an axis to leave the
	% outline of the axis:
	clip=false,
}

\begin{tikzpicture}
  \begin{axis}[
  	axis equal,view={0}{90},
  ]
     \addplot3[
         surf,
         samples=13,
		 point meta=y,
       ]
	   {1};
  \end{axis}
\end{tikzpicture}
\begin{tikzpicture}
  \begin{axis}[
  	axis equal,
  ]
  \addplot3[
	   	surf,
		samples=20,
		%samples y=31,
		domain=1:5,
		y domain=0:2*pi,
		z buffer=sort,
		variable=\u,variable y=\v,
		point meta=v,
	] 
	   	({4*cos(deg(v))},{4*sin(deg(v))},{u});
\end{axis}
\end{tikzpicture}
\begin{tikzpicture}
  \begin{axis}[
  	axis equal,
  ]
     \addplot3[
         surf,
         samples=20,
         domain=0:2*pi,
         y domain=pi/2:2.5*pi,
         z buffer=sort,
		 variable=\u,variable y=\v,
		 point meta=v,
       ]
       ( {(0.5+2+cos(deg(u)))*cos(deg(v+pi))},
         {(0.5+2+cos(deg(u)))*sin(deg(v+pi))},
         {sin(deg(u))}
       );

	   \draw (axis cs:0,-2,0) circle(2pt);
  \end{axis}
\end{tikzpicture}

\end{document}
Bild
Dateianhänge
torus.png
torus.png (45.38 KiB) 3123 mal betrachtet

BlackDevil
Forum-Century
Forum-Century
Beiträge: 107
Registriert: Di 23. Jul 2013, 11:38
Wohnort: Deutschland

Beitrag von BlackDevil »

Danke :) Das geht auf jeden Fall schon mal in eine richtige Richtung. Kann ich die Plots irgendwie in ein Tikz-Bild packen? Ich habe gelesen das soll über node gehen, funktioniert aber nicht .... ich habe auch parallel eventuell die Möglichkeit gefunden die Körper einfach per 3D Programm zu erstellen und einzufügen ...

BlackDevil
Forum-Century
Forum-Century
Beiträge: 107
Registriert: Di 23. Jul 2013, 11:38
Wohnort: Deutschland

Beitrag von BlackDevil »

So, nachdem ich von dem Kollegen nichts mehr höre versuch ich es hier weiter :roll: Danke schon mal für den Support :D

Der Torus gefällt mir eigentlich ganz gut:

Edit: CODE GELÖSCHT, UPDATE UNTEN

Ich bekomme es aber weder hin den Torus einfarbig (schwarze Rahmenlinien und weiße Füllung) zu gestalten oder irgendwo anders hin zu schieben. Darüberhinaus habe ich eine Animation gefunden die mein vorhaben darstellt:

Bild
Quelle: http://mathematica.stackexchange.com/qu ... to-a-torus

Das zeigt Problem zwei: Irgendwie sollte das Rechteck, der Zylinder und der Torus aus dem selben Gitter bestehen :?

Danke Feuersänger. Und Respekt für die Arbeit die du mit dem Paket gehabt haben musst :)


Edit: Update

Ich bin nun drauf gekommen, das ich die Grafiken am einfachsten mit der Grupplot Umgebung platzieren kann. Das klappt soweit so gut:
\documentclass{standalone} 

\usepackage{pgfplots} 
\usetikzlibrary{pgfplots.groupplots}

\begin{document} 
\pgfplotsset{ 
   hide axis,
   colormap/blackwhite,
   % 
   % allow \draw ... instructions inside of an axis to leave the 
   % outline of the axis: 
   clip=false, 
} 
\pgfplotsset{ 
   hide axis,
   colormap/cool,
   % 
   % allow \draw ... instructions inside of an axis to leave the 
   % outline of the axis: 
   clip=false, 
} 
\begin{tikzpicture} 
\begin{groupplot}[
    group style={
        group name=my plots,
        group size=3 by 1,
        ylabels at=edge left
    },
    footnotesize,
    width=5cm,
    height=4cm,
    tickpos=left,
    ytick align=outside,
    xtick align=outside,
    enlarge x limits=false,
	domain=-10:10    
]
% Lattice
\nextgroupplot
%	\draw[step=1.0,black] ({axis cs:-2,-2}) grid ({axis cs:5,5});

% Cylinder
\nextgroupplot
  \addplot3[ 
         surf, 
      samples=20, 
      %samples y=31, 
      domain=1:5, 
      y domain=0:2*pi, 
      z buffer=sort, 
      variable=\u,variable y=\v, 
      point meta=v, 
   ] 
         ({1*cos(deg(v))},{1*sin(deg(v))},{u}); 

% Torus
\nextgroupplot
     \addplot3[ 
     	surf,
         samples=20, 
         domain=0:2*pi, 
         y domain=0:2*pi, 
         z buffer=sort, 
       variable=\u,variable y=\v, 
       point meta=v, 
       ] 
       ( {(1+0.5*cos(deg(u)))*cos(deg(v+pi))}, 
         {(1+0.5*cos(deg(u)))*sin(deg(v+pi))}, 
         {0.5*sin(deg(u))} 
       ); 
       \end{groupplot}
       
\draw [draw,thick,step=0.5cm] (0,0) node (v1) {} grid (3,2);
%\draw [thick,bend angle=-45, bend left] (0,1.5) to (-0.5,1.5) to (1.5,0) to (3.5,1.5) to (3,1.5);

%\draw [thick,bend angle=-45, bend left] (6,2) to (4.5,2) to (4.5,0) to (6,0.2);

\node at (-0.5,1.5) {A};
\node at (-0.5,0) {B};
\node at (3.5,1.5) {C};
\node at (3.5,0) {D};

\end{tikzpicture} 
\end{document}
Was nun fehlt ist:
- Das ganze soll einfach nur einfarbig Schwarz/Weiß sein
- Die Anzahl Knoten/die Gittergröße sollte immer gleich sein
- Die Tikz Pfeile und das Gitter müssen irgendwie als "Overlay" da rein. Ich habe zwar gesehen, dass man das wohl einfach zum "\nextgroupplot" dazupackt, aber Tikzedt meckert am Doppelpunkt bei axis cs:
- Der Blickwinkel dürfte gerne von etwas weiter oben sein ...

Edit: Ich habe noch eine neue Version Code angehängt. Das ist ja ganz nett, aber irgendwie sieht es nach nix aus ... hat jemand einen Vorschlag? Ansonsten lass ichs dann doch weg ...

Antworten