PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : TIKZ Gerade durch 2 Punkte



serverone
03-01-2012, 14:06
Hallo,

ich möchte ein Bild in TIKZ zeichnen, bei dem 2 Punkte durch eine Gerade verbunden werden sollen, also es um den Punkt noch etwas weiter geht und nicht nur von Punkt zu Punkt. Habe beim Suchen das hier gefunden, das zumindest schonmal Rechenarbeit erspart:
http://www.golatex.de/viewtopic,p,30674.html#30674
geht soweit sehr schön.

Nun habe ich aber die Punkte als Koordinaten am Anfang eingegeben und würde das der Übersichtlichkeit wegen auch gern so lassen.

Gibt es eine TIKZ-Funktion, mit der man auf eine Koordinaten eines Punktes zugreifen kann? Dann wäre es ja gelaufen.



\documentclass{article}

\usepackage[ngerman]{babel} %Dokumentensprache Deutsch
\usepackage{color} %Farben benutzbar machen
\usepackage{scalefnt} %TiKZ skalierbar
\usepackage{graphicx, tikz} %TiKZ nutzbar
\usepackage{amsmath,amsthm,amssymb, mathtools} %Diverse mathematische Symbole



\usetikzlibrary{arrows}
\usetikzlibrary{snakes} %fuer geschweifte Klammern
\usetikzlibrary{calc}



\newcommand\ZeichneGerade[6]{%
\coordinate (Punkt1) at (#1,#2);
\coordinate (Punkt2) at (#3,#4);
\pgfmathsetmacro\m{(#4-#2)/(#3-#1)}%
\pgfmathsetmacro\n{#2-\m*#1}%
\draw plot[domain=#5:#6] (\x,{\m*\x+\n});
}
%Syntax: \ZeichneGerade{x1}{y1}{x2}{y2}{anfang plotbereich}{ende plotbereich}


\begin{document}

\begin{tikzpicture}[scale=2]

\coordinate (A) at (0,0);
\coordinate (B) at (2,0);
\coordinate[label=45:$C$] (C) at (2,2);
\coordinate[label=135:$D$] (D) at (0,2);

\coordinate[label=0:$A'$] (A') at (2,1);
\coordinate[label=90:$B'$] (B') at (1,2);
\coordinate (C') at (0,0);
\coordinate (D') at (2,0);

\fill (A) circle (0.05em) node[below] {$A=C'$};
\fill (B) circle (0.05em) node[below] {$B=D'$};
\fill (C) circle (0.05em);
\fill (D) circle (0.05em);
\fill (A') circle (0.05em);
\fill (B') circle (0.05em);

\draw (A)--(B)--(C)--(D) -- cycle; %V-Eck ABCD

\draw[red] (A')--(B')--(C')--(D') -- cycle; %V-Eck A'B'C'D'

\ZeichneGerade{0}{0}{2}{2}{-0.5}{2.5};

\end{tikzpicture}



\end{document}


Wobei ich dann das Trennen der Koordinaten im Makro ZeichneGerade machen würde, sodass man dann nur noch

\ZeichneGerade{(A)}{(B)}{-0.5}{2.5};
oder so eingeben müsste.


Wenn ich dann im Weiteren

\coordinate[label=90:$1'u$] (1'u) at (intersection of B'--A' and A--B);
schreibe, so ergibt das einen gültigen Punkt, also müsste man nur irgendwie TIKZ davon überzeugen können, dass an den Koordinaten nicht Schluss ist - ist das Möglich?

Vielen Dank für Antworten
serverone

mechanicus
03-01-2012, 16:32
Hi,

entschuldige bitte meine Nachfrage, aber was genau meinst du. DU hast doch mittels \zeichneGerade die Punkte Punkt1 und Punkt2.

Gruß
Marco

serverone
03-01-2012, 21:44
Also ZeichneGerade braucht die x und y Koordinaten der jeweiligen Punkte einzeln. An die möchte ich rankommen. Hab dazu inzwischen über http://mrunix.de/forums/showpost.php?p=320832&postcount=5


\pgfextractx, \pgfextracty gefunden.

Leider funktioniert das irgendwie nicht. Der Abstand ist zunächst einmal im pt angegeben und ändert sich manchmal nicht, wenn ich die Koordinaten ändere. Ich habe außerdem das Gefühl, dass er die absoluten Koordinaten auf der Seite benutzt, was mir nichts bringt) Bsp:


\documentclass{article}

\usepackage[ngerman]{babel} %Dokumentensprache Deutsch
\usepackage{color} %Farben benutzbar machen
\usepackage{scalefnt} %TiKZ skalierbar
\usepackage{graphicx, tikz} %TiKZ nutzbar
\usepackage{amsmath,amsthm,amssymb, mathtools} %Diverse mathematische Symbole



\usetikzlibrary{arrows}
\usetikzlibrary{snakes} %fuer geschweifte Klammern
\usetikzlibrary{calc}





\newcommand\ZeichneGerade[6]{%
\coordinate (Punkt1) at (#1,#2);
\coordinate (Punkt2) at (#3,#4);
\pgfmathsetmacro\m{(#4-#2)/(#3-#1)}%
\pgfmathsetmacro\n{#2-\m*#1}%
\draw plot[domain=#5:#6] (\x,{\m*\x+\n});
}
%Syntax: \ZeichneGerade{x1}{y1}{x2}{y2}{anfang plotbereich}{ende plotbereich}


\newlength\vecx
\newlength\vecy
\newlength\dist


\begin{document}



\begin{tikzpicture}

\coordinate (A) at (2,2);
\fill (A) circle (0.25em) node[below] {$A$};
%\coordinate (B) at (1,0);
%\fill (B) circle (0.25em) node[below] {$B$};

\pgfextractx{\vecx}{A};

\node at (5,0){Der Abstand betraegt \the\vecx};


\end{tikzpicture}




\end{document}

Vorhin hatte ich folgende Idee:
Ich fasse einen Punkt P als komplexe Zahl auf und bastle ein Makro, das mir jeweils Re(P) und Im(P) liefert, was ja genau x und y von P sind. Problem war dabei, dass ich dazu P komplex konjugiert brauche.
Meine Idee dazu: ich spiegele P an der x-Achse. Da ich zum Spiegeln nichts gefunden habe, wohl aber zum Drehen: Suche den Punkt, wo eine senkrechte Gerade durch P die x-Achse schneidet ( mit dem |- oder -| Operator geht das wohl) und drehe P um 180° um diesen Punkt, es entsteht P'. Dann ist P' P komplex konjugiert und ich erhalte die Koordinaten durch (P +/- P')/2.

Alles doch irgendwie etwas kompliziert.

Bin noch über den Operator "let" gestolpert, was macht der?

esdd
04-01-2012, 14:30
Hallo,

reicht es dir , wenn du die Verbindung von A und C an beiden Enden um einen bestimmten Betrag (z.B. 3mm) verlängerst?


\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{calc}

\begin{document}
\begin{tikzpicture}[scale=2]

\coordinate (A) at (0,0);
\coordinate (B) at (2,0);
\coordinate[label=0:$C$] (C) at (2,2);
\coordinate[label=180:$D$] (D) at (0,2);

\coordinate[label=0:$A'$] (A') at (2,1);
\coordinate[label=90:$B'$] (B') at (1,2);
\coordinate (C') at (0,0);
\coordinate (D') at (2,0);

\fill (A) circle (0.05em) node[left] {$A=C'$};
\fill (B) circle (0.05em) node[right] {$B=D'$};
\fill (C) circle (0.05em);
\fill (D) circle (0.05em);
\fill (A') circle (0.05em);
\fill (B') circle (0.05em);

\draw (A)--(B)--(C)--(D) -- cycle; %V-Eck ABCD
\draw[red] (A')--(B')--(C')--(D') -- cycle; %V-Eck A'B'C'D'

\draw($(A)!-3mm!(C)$)--($(C)!-3mm!(A)$);% Gerade durch die Punkte A und C

\end{tikzpicture}
\end{document}


Gruß
Elke

serverone
04-01-2012, 16:34
1000-Dank essd,

genau sowas hab ich gesucht - es kann doch so einfach sein ;)

serverone