3
1

Ich möchte bei folgendem Beispiel ein Quadrat über der linken "schiefen" Seiten des Dreiecks haben.

Open in Online-Editor
\documentclass[border=2pt]{standalone}

\usepackage{tikz}
\usetikzlibrary{intersections}

\begin{document}
  \begin{tikzpicture}
    \coordinate (A) at (0,0);
    \coordinate (B) at (6,0);
    \path[name path=a] (B) -- ++(150:5.5);
    \path[name path=b] (A) -- ++(60:3.5);
    \path[name intersections={of=a and b}] (intersection-1) coordinate (C);
    \draw (A) -- (B) --(C) -- (A);
  \end{tikzpicture}
\end{document}

Ich hab keine Idee, wie man das umsetzt. Ich hab gefunden, dass man mit \pgfmathveclen die Länge der Linie ausrechnen könnte, allerdings weiß ich nicht, wie ich die x- und y-Koordinaten aus (C) rausbekommen kann. Falls ich die Länge x hätte, könnte ich mit \draw (A) -- ++(150:x) usw. ein Quadrat zeichenen.

gefragt 28 Feb '15, 20:30

tom75's gravatar image

tom75
2.2k277984
Akzeptiert-Rate: 57%


Lade einfach die TikZ Bibliothek calc. Dann kannst Du folgende Syntax für die Berechnung nutzen

Open in Online-Editor
($<coordinate>!<faktor>!<winkel>:<second coordinate>$)

Damit ist eine Koordinate gemeint, die <faktor> mal von <coordinate> in Richtung <second coordinate> entfernt ist. Wird der optionale <winkel> noch angegeben, wird diese Koordinate anschließend noch um den Winkel um <coordinate> rotiert.

Das Quadrat kannst Du entsprechend mit

Open in Online-Editor
\draw[red,very thick,dashed](A)--($(A)!1!90:(C)$)--($(C)!1!-90:(A)$)--(C)--cycle;

zeichnen.

alt text

Code:

Open in Online-Editor
\documentclass[border=2pt]{standalone}

\usepackage{tikz}
\usetikzlibrary{intersections}
\usetikzlibrary{calc}

\begin{document}
\begin{tikzpicture}
  \coordinate (A) at (0,0);
  \coordinate (B) at (6,0);
  \path[name path=a] (B) -- ++(150:5.5);
  \path[name path=b] (A) -- ++(60:3.5);
  \path[name intersections={of=a and b}] (intersection-1) coordinate (C);
  \draw (A) -- (B) --(C) -- (A);
  \draw[red,very thick,dashed] (A)--($(A)!1!90:(C)$)--($(C)!1!-90:(A)$)--(C)--cycle;
\end{tikzpicture}
\end{document}
Permanenter link

beantwortet 28 Feb '15, 20:53

esdd's gravatar image

esdd
17.8k284257
Akzeptiert-Rate: 62%

bearbeitet 28 Feb '15, 20:54

Geht das vll. auch mit einem regular polygon aus der Lib shapes?

(28 Feb '15, 21:23) cis

Wenn schon ein Node, dann tut es auch ein einfacher quadratischer?

(28 Feb '15, 21:59) esdd

Perfekt! Danke!

(01 Mär '15, 18:45) tom75

Das ist schon die beste Lösung - im TikZ-Handbuch, Kap. 13.5 steht das sogar. Sollte ich echt mal lesen, auch wenn der Abschnitt leider kurz ist.

(02 Mär '15, 17:07) cis

@cis Dann sind wir uns ja doch einig :-) Und das Lesen des Abschnittes lohnt sich.

(02 Mär '15, 21:29) esdd

Auf Anregung von @cis ist hier noch eine Alternative, bei der der Abstand zwischen den Punkten (A) und (C) bestimmt wird und dann ein quadratischer Node mit diesem Abstand als Kantenlänge auf der Dreieckseite eingefügt wird.

Open in Online-Editor
\documentclass[border=2pt]{standalone}

\usepackage{tikz}
\usetikzlibrary{intersections}
\usetikzlibrary{calc}

\begin{document}
\begin{tikzpicture}
  \coordinate (A) at (0,0);
  \coordinate (B) at (6,0);
  \path[name path=a] (B) -- ++(150:5.5);
  \path[name path=b] (A) -- ++(60:3.5);
  \path[name intersections={of=a and b}] (intersection-1) coordinate (C);
  \draw (A) -- (B) --(C) -- (A);
  \path let \p1=($(C)-(A)$), \n1={veclen(\x1,\y1)} in
    (A)node[draw,blue,dashed,very thick,
      minimum size=\n1,
      outer sep=0pt,inner sep=0pt,
      anchor=south west,
      rotate=60
      ]{};
\end{tikzpicture}
\end{document}

alt text


Da @cis sich das Quadrat als Dekoration der Strecke vorstellt, ist hier ein noch etwas umständlicherer Vorschlag, bei dem zusätzlich die decorations.shapes Bibliothek benötigt wird.

Open in Online-Editor
\documentclass[border=2pt]{standalone}

\usepackage{tikz}
\usetikzlibrary{intersections}
\usetikzlibrary{calc}
\usetikzlibrary{decorations.shapes}

\tikzset{
  decorate with square/.style={
    decorate,
    outer sep=0pt,
    decoration={
      shape backgrounds,
      shape=rectangle,
      anchor=south,
      shape size=#1,
      shape evenly spread=1
    }
  }
}

\begin{document}
\begin{tikzpicture}
  \coordinate (A) at (0,0);
  \coordinate (B) at (6,0);
  \path[name path=a] (B) -- ++(150:5.5);
  \path[name path=b] (A) -- ++(60:3.5);
  \path[name intersections={of=a and b}] (intersection-1) coordinate (C);
  \draw (A) -- (B) --(C) -- (A);
  \path let \p1=($(C)-(A)$), \n1={veclen(\x1,\y1)} in
    [draw=green,dashed,very thick,decorate with square=\n1] (A)--(C);
\end{tikzpicture}
\end{document}

Ergebnis:

alt text


Und da @cis unbedingt lieber ein regular polygon statt einem einfachen rectangle haben möchte, hier eine weitere Version, bei der dann auch noch die Bibliothek shapes.geometric geladen werden muss:

Open in Online-Editor
\documentclass[border=2pt]{standalone}

\usepackage{tikz}
\usetikzlibrary{intersections}
\usetikzlibrary{calc}
\usetikzlibrary{decorations.shapes,shapes.geometric}

\tikzset{
  decorate with square/.style={
    decorate,
    outer sep=0pt,
    decoration={
      shape backgrounds,
      shape=regular polygon,
      anchor=south,
      shape size=#1,
      shape evenly spread=1
    },
    regular polygon sides=4
  }
}

\begin{document}
\begin{tikzpicture}
  \coordinate (A) at (0,0);
  \coordinate (B) at (6,0);
  \path[name path=a] (B) -- ++(150:5.5);
  \path[name path=b] (A) -- ++(60:3.5);
  \path[name intersections={of=a and b}] (intersection-1) coordinate (C);
  \draw (A) -- (B) --(C) -- (A);
  \path let \p1=($(C)-(A)$), \n1={veclen(\x1,\y1)} in
    [draw=orange,dashed,very thick,decorate with square=\n1] (A)--(C);
\end{tikzpicture}
\end{document}

alt text

Permanenter link

beantwortet 28 Feb '15, 21:56

esdd's gravatar image

esdd
17.8k284257
Akzeptiert-Rate: 62%

bearbeitet 02 Mär '15, 14:15

Ich dachte an sowas wie \draw[red, decorate with=regular polygon, ...., paint=blue] (C) -- (A); ist glaube ich nicht so einfach.

(01 Mär '15, 20:38) cis

@cis Ich habe jetzt auch noch eine Variante mit decorate ergänzt. Das geht schon, ist aber unnötig umständlich.

(01 Mär '15, 23:32) esdd

Ich finde die Methode gar nicht so schlecht, bloß hat die decoration-lib scheints keinen einfachen Positionierungsmechanismus. PS: Ah und ich sehe gerade noch, das ist immer noch kein "regular polygon" (mit 4 Seiten). Damit habe ich es verzweifelt versucht.

(02 Mär '15, 13:32) cis

@cis Ich habe Dir jetzt auch noch eine Version mit regular polygon eingefügt. Bevorzugen würde ich aber ganz eindeutig die Version aus dem anderen Lösungsvorschlag, den @tom75 akzeptiert hat.

(02 Mär '15, 14:18) esdd

Ja so ist das gut, kapiert bloß niemand mehr :D

(02 Mär '15, 14:39) cis
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:

×731
×9
×3

gestellte Frage: 28 Feb '15, 20:30

Frage wurde gesehen: 10,658 Mal

zuletzt geändert: 02 Mär '15, 21:29