
Ich habe eine typische geometrische Konstruktion, die ich mit zeichnen möchte TikZ
. Der folgende Code ergibt ein Liniensegment PQ
. Wie zeichne ich TikZ
einen Punkt auf der Linie, der senkrecht zu PQ
und durch P
sie hindurch verläuft und 2\sqrt{2}
Einheiten unterhalb des Liniensegments liegt PQ
? Ich glaube, dazu muss ich \usetikzlibrary{calc}
in der Präambel haben. (Ich möchte diesen Punkt mit R beschriften und ein rechtwinkliges Dreieck zeichnen QPR
.) Wenn ich verwenden möchte, \tkzMarkRightAngle(Q,P,R);
um anzuzeigen, dass das Dreieck ein rechtwinkliges Dreieck ist, muss ich dann \usepackage{tkz-euclide}
in der Präambel haben?
\documentclass{amsart}
\usepackage{tikz}
\usetikzlibrary{shapes,positioning,intersections,quotes}
\begin{document}
\begin{tikzpicture}
\draw[yellow, line width=0.1pt] (-1.75,-1.75) grid[xstep=0.5, ystep=0.5] (2.75,1.75);
\draw[draw=gray!30,latex-latex] (0,1.75) +(0,0.25cm) node[above right] {$y$} -- (0,-1.75) -- +(0,-0.25cm);
\draw[draw=gray!30,latex-latex] (-1.75,0) +(-0.25cm,0) -- (2.75,0) -- +(0.25cm,0) node[below right] {$x$};
\node[outer sep=0pt,circle, fill,inner sep=1.5pt,label={[fill=white]left:$P$}] (P) at (-1,-1) {};
\node[outer sep=0pt,circle, fill,inner sep=1.5pt, label={[fill=white]right:$Q$}] (Q) at (2,1) {};
\draw[green!20!white] (P) -- (Q);
\end{tikzpicture}
\end{document}
Antwort1
Suchen Sie im Code nach erklärenden Kommentaren:
\documentclass{amsart}
\usepackage{tikz}
%% you need the following 2 lines to use \tkzMarkRightAngle
%\usepackage{tkz-euclide}
%\usetkzobj{all}
\usetikzlibrary{shapes,positioning,intersections,quotes,calc}
\begin{document}
\begin{tikzpicture}
\draw[yellow, line width=0.1pt] (-1.75,-5) grid[xstep=0.5, ystep=0.5] (2.75,1.75);
\draw[draw=gray!30,latex-latex] (0,1.75) +(0,0.25cm) node[above right] {$y$} -- (0,-1.75) -- +(0,-0.25cm);
\draw[draw=gray!30,latex-latex] (-1.75,0) +(-0.25cm,0) -- (2.75,0) -- +(0.25cm,0) node[below right] {$x$};
\node[outer sep=0pt,circle, fill,inner sep=1.5pt,label={[fill=white]left:$P$}] (P) at (-1,-1) {};
\node[outer sep=0pt,circle, fill,inner sep=1.5pt, label={[fill=white]right:$Q$}] (Q) at (2,1) {};
\draw[green!20!white] (P) -- (Q);
%% the perpendicular
\pgfmathparse{2*sqrt(5)}
\node[outer sep=0pt,circle, fill,inner sep=1.5pt,label={[fill=white]left:$R$}] (R) at ($ (P)!\pgfmathresult cm! -90:(Q) $) {};
\draw[green!20!white] (P) -- (R) -- (Q);
%% right angle with tkz-euclide
%\coordinate (p) at (P);
%\tkzMarkRightAngle[color=green!20!white](Q,p,R)
%\fill (p) circle (2.1pt); %% to make the dot above right angle again.
\coordinate (a) at ($ (P)!5mm! -45:(Q) $);
\draw[green!20!white] (a) -- ($(P)!(a)!(Q)$);
\draw[green!20!white] (a) -- ($(P)!(a)!(R)$);
\end{tikzpicture}
\end{document}
Antwort2
Um Ihre Fragen zu beantworten: Tikz führt fast alles über pgfmathparse aus, was eher wie C-Code aussieht: 2*sqrt(5), was übrigens im Standardskalenmaßstab über 4 cm entspricht. ($(P)!1!90:(Q)$) bedeutet, bei (P) zu beginnen und 1-mal die Distanz zu (Q) zurückzulegen, 90 Grad (gegen den Uhrzeigersinn) von der Richtung zu (Q).
\documentclass{amsart}
\usepackage{tikz}
\usetikzlibrary{shapes,positioning,intersections,quotes,calc}
\begin{document}
\begin{tikzpicture}
\draw[yellow, line width=0.1pt] (-1.75,-1.75) grid[xstep=0.5, ystep=0.5] (2.75,1.75);
\draw[draw=gray!30,latex-latex] (0,1.75) +(0,0.25cm) node[above right] {$y$} -- (0,-1.75) -- +(0,-0.25cm);
\draw[draw=gray!30,latex-latex] (-1.75,0) +(-0.25cm,0) -- (2.75,0) -- +(0.25cm,0) node[below right] {$x$};
\node[outer sep=0pt,circle, fill,inner sep=1.5pt,label={[fill=white]left:$P$}] (P) at (-1,-1) {};
\node[outer sep=0pt,circle, fill,inner sep=1.5pt, label={[fill=white]right:$Q$}] (Q) at (2,1) {};
\draw[green!20!white] (P) -- (Q);
\coordinate (R) at ($(P)!2cm*sqrt(5)!-90:(Q)$);
\node[outer sep=0pt,circle, fill,inner sep=1.5pt, label={[fill=white]right:$R$}] at(R) {};
\end{tikzpicture}
\end{document}
Antwort3
Eigentlich sind Sie nicht gezwungen, zu verwenden \usepackage{tkz-euclide}
. Es bietet Ihnen nur eine einfachere \tkzMarkRightAngle(Q,P,R)
Konstruktion als reines tikz
, aber dies kann auch relativ einfach erreicht werden, indem nur verwendet wird, tikz
wie es @HarishKumar getan hat. Außerdem style
macht die Verwendung von s für Achsen und Punkte den Code übersichtlicher.
\documentclass[tikz]{standalone}
\usetikzlibrary{calc}
\begin{document}\small
\begin{tikzpicture}[outer sep=0pt,p/.style={circle, fill,inner sep=1.5pt},ax/.style={draw=gray!50,latex-latex}]
\draw[yellow,line width=0.1pt] (-2.75cm,-1.75cm) grid[xstep=0.5, ystep=0.5] (2.75cm,1.75cm);
\draw[ax](0,1.75cm) +(0,0.25cm) node[above] {$y$} -- (0,-1.75cm) -- +(0,-0.25cm);
\draw[ax](-2.75cm,0) +(-0.25cm,0) -- (2.75cm,0) -- +(0.25cm,0) node[right] {$x$};
\coordinate[p,label={[fill=white]below:$P$}] (P) at (-1cm,-1cm);
\coordinate[p,label={[fill=white]right:$Q$}] (Q) at (2cm,1cm);
\coordinate[p,label={[fill=white]left :$R$}] (R) at ($(P)!{2cm*sqrt(2)}!90:(Q)$);
\draw (P)--(R)--(Q)--(P)--cycle;
\coordinate (a) at ($(P)!4mm!45:(Q)$);
\draw ($(P)!(a)!(Q)$) -- (a) -- ($(P)!(a)!(R)$);
\end{tikzpicture}
\end{document}
Antwort4
Für diejenigen, die interessiert sind, eine Möglichkeit (unter anderem), dies zu tun mitMetaPost.
Der Punkt R, bei dem PR senkrecht zu PQ ist und sich 2\sqrt{2}
Einheiten von P entfernt unterhalb von PQ befindet, ergibt sich aus der folgenden Anweisung ( u
wobei es sich hier um die Längeneinheit handelt cm
):
R = P + 2u*sqrt2*unitvector(Q-P) rotated -90;
Das anglebetween
Makro von MetaPostMetaspaßFormat ermöglicht es, rechtwinklige Markierungen zwischen den beiden Schnittpunkten recht einfach zu zeichnen P--Q
( P--R
das dritte Argument ist die Beschriftung, hier eine leere Zeichenfolge), wenn der anglemethod
Parameter auf 2 gesetzt ist. Mit dem Standardwert dieses Parameters, 1, wäre die Markierung ein Kreisbogen. Die gewünschte Länge der Markierung sollte als Argument für einen anderen Parameter angegeben werden anglelength
(der Standardwert beträgt 20 pt).
anglemethod := 2; anglelength := 2mm;
draw anglebetween(P--Q, P--R, "");
Sehendas Metafun-Handbuch, S. 279, für eine ausführliche Darstellung.
\documentclass[border=2mm]{standalone}
\usepackage{luamplib}
\mplibsetformat{metafun}
\mplibtextextlabel{enable}
\begin{document}
\begin{mplibcode}
% Axes parameters
u := cm; % Unit length
xmin := -1.75u; xstep := .5u; xmax := 2.75u;
ymin := -5u; ystep := xstep; ymax := 1.75u;
% Triangle summits
pair P, Q, R; P = u*(-1, -1); Q = u*(2, 1);
R = P + 2u*sqrt2*unitvector(Q-P) rotated -90;
beginfig(1);
% Grid
drawoptions(withcolor yellow);
for i = ceiling(xmin/xstep) upto floor(xmax/xstep):
draw (i*xstep, ymin) -- (i*xstep, ymax);
endfor
for j = ceiling(ymin/ystep) upto floor(ymax/ystep):
draw (xmin, j*ystep) -- (xmax, j*ystep);
endfor
% Axes
drawoptions(withcolor .8white);
drawarrow (xmin, 0) -- (xmax, 0);
drawarrow (0, ymin) -- (0, ymax);
% Triangle
drawoptions(withcolor green);
path triangle; triangle = P--Q--R--cycle; draw triangle;
% Right-angle mark of length 2 mm (and no label)
anglemethod := 2; anglelength := 2mm;
draw anglebetween(P--Q, P--R, "");
% Labels
drawoptions();
label.bot("$x$", (xmax, 0)); label.lft("$y$", (0, ymax));
dotlabel.lft("$P$", P); dotlabel.rt("$Q$", Q); dotlabel.bot("$R$", R);
endfig;
\end{mplibcode}
\end{document}
Soll mit LuaLaTeX gesetzt werden. Ausgabe: