
Gegeben seien die Punkte A und B. Ich möchte ein Quadrat mit den Eckpunkten A und B zeichnen.
Natürlich gibt es zwei mögliche Quadrate sowie ein Segment AB.
Zuerst dachte ich, dass es mit „rotate around={90:(A)}“ gezeichnet werden könnte. Das funktioniert gut, um einen Punkt zu verschieben, aber nicht, um ein geneigtes Quadrat zu zeichnen.
Eine andere Möglichkeit ist die Verwendung einer senkrechten Linie durch B. Dafür ist jedoch die Länge von AB erforderlich. Dadurch entstehen zu komplizierte Codes.
Ich glaube, es gibt eine einfache Methode, um ein Quadrat mit vorgegebenen Eckpunkten zu zeichnen. Können Sie mir das mitteilen?
Antwort1
Sie können die calc
Bibliothek nutzen.
\documentclass[border=1cm]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\coordinate (A) at (0,0);
\coordinate (B) at (3,1);
\fill (A) circle (0.1);
\fill (B) circle (0.1);
\draw (A) node[below] {A} -- (B) node[below] {B} -- ($ (B)!1!-90:(A) $) -- ($ (A)!1!90:(B) $) -- cycle;
\end{tikzpicture}
\end{document}
Antwort2
Das tkz-euclide
Paket verfügt über zahlreiche Funktionen zum Erstellen geometrischer Konstruktionen, darunter die Erstellung eines Quadrats aus zwei zuvor definierten Koordinaten:
\tkzDefSquare(A,B)
\tkzGetPoints{C}{D}
Die erste Zeile definiert das Quadrat basierend auf A
und B
. Die zweite ruft die Koordinaten der letzten beiden Ecken ab und erstellt benannte Koordinaten C
und D
.
\documentclass[border=1cm]{standalone}
\usepackage{tkz-euclide}
\begin{document}
\begin{tikzpicture}
\coordinate (A) at (0,0);
\coordinate (B) at (3,1);
\tkzDefSquare(A,B)
\tkzGetPoints{C}{D}
\tkzDrawPoints[size=8](A,B,C,D)
\tkzDrawPolygon(A,B,C,D)
\end{tikzpicture}
\end{document}
Antwort3
So etwas tikz/turn
ist eine gute Wahl.
\documentclass[tikz, border=1cm]{standalone}
\usepackage{xparse}
\makeatletter
\NewDocumentCommand { \mysquare } { s O{} D(){a} D(){b} }
{
\tikz@scan@one@point\pgf@process(#3)
\pgf@xa = \pgf@x
\pgf@ya = \pgf@y
\tikz@scan@one@point\pgf@process(#4)
\pgfmathsetmacro{\square@l}{
sqrt( (\pgf@x - \pgf@xa)^2 + (\pgf@y - \pgf@ya)^2 )
}
\def\square@sign{}
\IfBooleanT { #1 } { \def\square@sign{-} }
\draw[#2] (#3) -- (#4)
-- ([turn]\square@sign 90:\square@l pt)
-- ([turn]\square@sign 90:\square@l pt)
-- cycle;
}
\makeatother
\begin{document}
\begin{tikzpicture}
\coordinate [label=below left:$A$] (a) at (0, 0);
\coordinate [label=right:$B$] (b) at (2, 3);
\coordinate [label=above:$C$] (c) at (2, 1);
\mysquare[thick](a)(b)
\mysquare*[thick, red](a)(c)
\end{tikzpicture}
\end{document}