Wie lässt sich mit TikZ ein Würfel zeichnen? Die Kantenlänge sollte mit einem Namen versehen werden. Danke.

Zusatz (oder neue Frage?): Gibt es eine TikZ Bibliothek, die für das Zeichnen von 3d Objekten hilfreich ist?

gefragt 28 Okt '15, 18:12

runix's gravatar image

runix
1.0k247486
Akzeptiert-Rate: 0%

bearbeitet 28 Okt '15, 18:12

Ich habe eine halbwegs gute Lösung. Ich kann sie auch gerne posten, wenn keiner der Profis antworten möchte.

(28 Okt '15, 19:18) runix

Auch ohne irgendwelche Extradefinitionen kennt TikZ bereits ein xyz Koordinatensystem, das für solche einfachen Zeichnungen direkt verwendet werden kann:

alt text

Damit kann man dann auch schon einen Würfel zeichnen:

Open in Online-Editor
\documentclass[border=5pt]{standalone}
\usepackage{siunitx}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\newcommand*\kante{2}
% Ecken
\path[scale=\kante]
  (0,0,0)  coordinate [label=left:$A$]  (A)
  (1,0,0)  coordinate [label=right:$B$] (B)
  (1,1,0)  coordinate [label=right:$C$] (C)
  (0,1,0)  coordinate [label=left:$D$]  (D)
  (0,0,-1) coordinate [label=left:$E$]  (E)
  (1,0,-1) coordinate [label=right:$F$] (F)
  (1,1,-1) coordinate [label=right:$G$] (G)
  (0,1,-1) coordinate [label=left:$H$]  (H)
;
%Kanten
\draw[font=\tiny]
  (A) -- node[above] {\SI{\kante}{\cm}} (B)
      -- node[pos=.6,sloped,above]{\SI{\kante}{\cm}} (C)
      -- (D) -- cycle
  (B) -- node[sloped,above]{\SI{\kante}{\cm}}(F)
      -- (G) -- (H) --(D)
  (C) -- (G)
;
\path[dashed, very thin] (E) edge (A) edge (F) edge (H);
\end{tikzpicture}
\end{document}

alt text


Auf Wunsch von @cis ist hier noch ein Beispiel, wie man die Koordinaten in einer Schleife definieren und beschriften könnte:

Open in Online-Editor
% Ecken
\foreach \p/\d/\n in{
  {0,0,0}/left/A, {1,0,0}/right/B, {1,1,0}/right/C, {0,1,0}/left/D,
  {0,0,-1}/left/E, {1,0,-1}/right/F, {1,1,-1}/right/G, {0,1,-1}/left/H}
  \path[scale=\kante](\p)coordinate[label=\d:$\n$](\n);

Es gibt noch weitere Möglichkeiten, aber ich fand den Verzicht auf eine Schleife irgendwie übersichtlicher.

Permanenter link

beantwortet 28 Okt '15, 21:37

esdd's gravatar image

esdd
17.8k284257
Akzeptiert-Rate: 62%

bearbeitet 28 Okt '15, 22:37

Ich hätte jetzt erwartet, dass Du die Koordinaten mittels einer Schleife erzeugst (selbst war ich mir da nicht sicher, wie das geht) :()

(28 Okt '15, 22:11) cis

Naja, die Koordinaten müssen natürlich auch automatisch generiert werden aus 0 und 1 und -1 - aber schon gut.

(28 Okt '15, 23:03) cis

Ich finde, dass auch dieses Beispiel bei texample aufgenommen werden sollte. Die dortigen Beispiele sind mir ehrlich gesagt viel zu exotisch und für den Otto NormalTeXer nicht brauchbar.

(29 Okt '15, 21:41) runix

@runix Vielen Dank für den Hinweis! Auf TeXample.net sind in der Tat neben Lehrbeispielen für bestimmte Features auch abgefahrene Beispiele, denn neben Arbeitsbeispielen ist es auch als Bühne eine Werbung für die Möglichkeiten mit TikZ. Manches nahm ich auf, was ich gut fand, manches wurde eingesendet und diente einem speziellen Zweck. Auf meiner Aufgabenliste ist noch das Hinzufügen vieler Beispiele von TeXwelt und goLaTeX und mehr.

(29 Okt '15, 22:15) stefan ♦♦

alt text

Open in Online-Editor
\documentclass[border=5pt]{standalone}
\usepackage{amsmath}
\usepackage{tikz}
\usetikzlibrary{positioning}

\begin{document}

\begin{tikzpicture}[%
x={(1cm,0cm)},
y={(0cm,1cm)},
z={({0.5*cos(45)},{0.5*sin(45)})},
]
  \def\a{2}

\coordinate (A) at (0,0,0); 
\coordinate (B) at (\a,0,0) ;
\coordinate (C) at (\a,\a,0); 
\coordinate (D) at (0,\a,0); 
\coordinate (E) at (0,0,\a); 
\coordinate (F) at (\a,0,\a); 
\coordinate (G) at (\a,\a,\a); 
\coordinate (H) at (0,\a,\a);

%Ecken
\node[left= 1pt of A]{$A$};
\node[right= 1pt of B]{$B$};
\node[right= 1pt of C]{$C$};
\node[left= 1pt of D]{$D$};
\node[left= 1pt of E]{$E$};
\node[right= 1pt of F]{$F$};
\node[right= 1pt of G]{$G$};
\node[left= 1pt of H]{$H$};

%Kanten
\draw[] (A) 
-- (B)  node[midway, below]{\tiny$\a$cm}
-- (C)      node[midway, right]{\tiny$\a$cm}
-- (D)  node[midway, above]{\tiny$\a$cm}
-- (A)  node[midway, left]{\tiny$\a$cm};
\draw[] (B) -- (F) -- (G) -- (C);
\draw[] (G) -- (H) -- (D);
\draw[densely dashed] (A) -- (E) -- (F);
\draw[densely dashed] (E) -- (H);

\end{tikzpicture}

\end{document}
Permanenter link

beantwortet 28 Okt '15, 19:27

cis's gravatar image

cis
9.5k93459491
Akzeptiert-Rate: 29%

bearbeitet 28 Okt '15, 20:46

Die Strecken nach hinten sind doch zu lang oder?

(28 Okt '15, 19:47) runix

Ich weiß auch nicht, warum es mit z={({cos(45)},{sin(45)})}, immer so blöd wird. Jetzt ggf. besser.

(28 Okt '15, 20:08) cis

Passt. Eine Frage: In welcher Zeile deines Codes wird a spezifiziert?

(28 Okt '15, 20:15) runix

Bitte nicht \a außerhalb einer Gruppe mit \def definieren. \a ist bereits definiert, wie Du gemerkt hättest, wenn Du LaTeX-konform \newcommand verwendet hättest. Wenn es schon unbedingt \a sein muss, dann unbedingt die (Um-)Definition innerhalb der tikzpicture-Umgebung vornehmen, damit die Umdefinierung lokal zur Umgebung bleibt!

(28 Okt '15, 20:23) saputello

ok......... ;)

(28 Okt '15, 20:46) cis

Hallo, das erzeugte Bild ist eine Kavalierprojektion, bei der die z-Achse im 45° Winkel angetragen wird. Das in der Schule geforderte Schrägbild ist eine Kavalierprojektion, bei der die z-Achse im 45°-Winkel und auf 50% verkürzt dargestellt wird. Es wäre schön, Schrägbilder automatisch erzeugen zu können. Das gezeigte Beispiel zeigt eine weniger starke Verkürzung. Kann man irgendwie rausfinden, wieviel die z-Richtung verkürzt wird und gibt es eine Möglichkeit, das anzupassen?

Permanenter link

beantwortet 21 Jul '23, 11:57

Arianndi's gravatar image

Arianndi
1
Akzeptiert-Rate: 0%

Willkommen auf TeXwelt.de! Auf welche der Antworten beziehst Du Dich? Du solltest es besser als Kommentar zur betreffenden Antwort schreiben, nicht als eigene Antwort auf die Frage. Hier sind Antworten stets "echte" Antworten, keine Gespräche oder Rückfragen, sondern Lösungen. Das verbessert die Übersicht erheblich für die Archivierung der Lösungen. Ungewohnt und anders als in Webforen, doch innovativ und nutzbarer. Bemerkungen gern wie hier als Kommentare.

(21 Jul '23, 12:15) stefan ♦♦

Ich sehe gerade, das der editierbare Code die z-Verkürzung kontrolliert. Allerdings erscheinen bei mir die Eckenbeschriftungen nicht richtig. Somit:

\begin{tikzpicture}[%
  x={(1cm,0cm)},
  y={(0cm,1cm)},
  z={({0.5*cos(45)},{0.5*sin(45)})},
]
\def\a{2}

\coordinate (A) at (0,0,0); 
\coordinate (B) at (\a,0,0) ;
\coordinate (C) at (\a,\a,0); 
\coordinate (D) at (0,\a,0); 
\coordinate (E) at (0,0,\a); 
\coordinate (F) at (\a,0,\a); 
\coordinate (G) at (\a,\a,\a); 
\coordinate (H) at (0,\a,\a);

%Ecken
\draw (A) node[canvas is xy, anchor=east]{$A$};
\draw (B) node[canvas is xy, anchor=west]{$B$};
\draw (C) node[canvas is xy, anchor=west]{$C$};
\draw (D) node[canvas is xy, anchor=east]{$D$};
\draw (E) node[canvas is z, anchor=east]{$E$};
\draw (F) node[canvas is z, anchor=west]{$F$};
\draw (G) node[canvas is z, anchor=west]{$G$};
\draw (H) node[canvas is z, anchor=east]{$H$};

%Kanten
\draw[] (A) 
-- (B)  node[midway, below]{\tiny$\a$cm}
-- (C)      node[midway, right]{\tiny$\a$cm}
-- (D)  node[midway, above]{\tiny$\a$cm}
-- (A)  node[midway, left]{\tiny$\a$cm};
\draw[] (B) -- (F) -- (G) -- (C);
\draw[] (G) -- (H) -- (D);
\draw[densely dashed] (A) -- (E) -- (F);
\draw[densely dashed] (E) -- (H);

\end{tikzpicture}
Permanenter link

beantwortet 21 Jul '23, 12:27

Arianndi's gravatar image

Arianndi
1
Akzeptiert-Rate: 0%

Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×730
×20

gestellte Frage: 28 Okt '15, 18:12

Frage wurde gesehen: 18,185 Mal

zuletzt geändert: 21 Jul '23, 12:27