Schnittpunkt Kreis und Gerade bei tikz

Tabellen und Grafiken erstellen und anordnen


Madridista
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 59
Registriert: Mo 22. Aug 2011, 14:50

Schnittpunkt Kreis und Gerade bei tikz

Beitrag von Madridista »

Folgender Code:
\documentclass[]{scrartcl}

\usepackage{tikz}
\usetikzlibrary{calc}
\newcommand\Punkt{\tikz[scale=0.07]\draw[thick](-1,-1)--(1,1)(-1,1)--(1,-1);}


\begin{document}
	\begin{tikzpicture}
		\draw (0,0)--(3.9,0);
			\node at (2.2,1.5) (P) {\Punkt};
			\node[scale=0.9] at (2.2,1.5) [anchor=south west] {$P$};
			\node at (0.1,-0.2) {$g$};
			\draw (P) circle (1.8cm) node (C){};
	\end{tikzpicture}
\end{document}
Kann mir jemand sagen, wie ich es hinbekomme, die Schnittpunkte zu markieren und am besten nur in diesem Bereich einen Ausschnitt des Kreisbogens anzuzeigen?
Madridista till I die!

Benutzeravatar
iTob
Forum-Meister
Forum-Meister
Beiträge: 1221
Registriert: Mo 19. Apr 2010, 22:19
Kontaktdaten:

Beitrag von iTob »

Hast du mal ins pgfmanual geschaut? STichworte clipping, arc und intersections libraray. Wenn du dort selber gelesen hast und dann hilfe brauchst helfe ich gerne weiter ;-)

Madridista
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 59
Registriert: Mo 22. Aug 2011, 14:50

Beitrag von Madridista »

Erst einmal vielen Dank für die Tipps, ich hatte vorher schon in die Anleitung geschaut, aber auf Grund ihres Umfanges, ist es schwer, dass zu finden, was man braucht. Die Stichworte haben mir sehr geholfen. Was ich aber absolut nicht hin bekomme ist es den Schnittpunkt zu bestimmen bzw. zu extrahieren. Mein Code sieht jetzt so aus:
\documentclass[]{scrartcl} 

\usepackage{tikz} 
\usetikzlibrary{calc} 
\usetikzlibrary{intersections}
\newcommand\Punkt{\tikz[scale=0.07]\draw[thick](-1,-1)--(1,1)(-1,1)--(1,-1);} 


\begin{document} 
\begin{tikzpicture}
	\draw (0,0)--(3.9,0);
		\node at (2.2,1.5) (P) {\Punkt};
		\node[scale=0.9] at (2.2,1.5) [anchor=south west] {$P$};
		\node at (0.1,-0.2) {$g$};
		
	\pgfintersectionofpaths %Dabei, weil ich hoffte, damit die Schnittpunkte extrahieren zu können.
		{\pgfpathcircle{\pgfpoint{2.2cm}{1.5cm}}{1.8cm}}
		{{\pgfpointxy{0}{0}}{\pgfpointxy{3.9cm}{0}}}
		
	\begin{scope}
		\clip  (0,-0.1) rectangle (3.9,0.1);
		\draw (P) circle (1.8cm) node (C){};
	\end{scope}
\end{tikzpicture}
\end{document} 
Am liebsten wäre es mir, wenn man die Schnittpunkte direkt mit einem Buchstaben bezeichnet könnte, den ich dann weiter benutzen kann.
Madridista till I die!

Madridista
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 59
Registriert: Mo 22. Aug 2011, 14:50

Beitrag von Madridista »

So jetzt habe ich es hinbekommen, habe es wie folgt gelöst:
\documentclass[]{scrartcl}

\usepackage{tikz}
\usetikzlibrary{calc}
\usetikzlibrary{intersections}
\newcommand\Punkt{\tikz[scale=0.07]\draw[thick](-1,-1)--(1,1)(-1,1)--(1,-1);}

\begin{document}

\begin{tikzpicture}
	\draw[name path=a--b] (0,0)--(3.9,0);
		\node at (2.2,1.5) (P) {\Punkt};
		\node[scale=0.9] at (2.2,1.5) [anchor=south west] {$P$};
		\node at (0.1,-0.2) {$g$};
		
%	\pgfintersectionofpaths
%		{\pgfpathcircle{\pgfpoint{2.2cm}{1.5cm}}{1.8cm}}
%		{{\pgfpointxy{0}{0}}{\pgfpointxy{3.9cm}{0}}}
		
	\begin{scope}
		\clip  (0,-0.1) rectangle (3.9,0.1);
		\draw (P) circle (1.8cm);
	\end{scope}
		\path [name path=c] (P) circle (1.8cm);%Bei dem Befehl darüber erkennt er dann nicht, was "c" ist
	
	\path [name intersections={of=a--b and c}];
	\coordinate [label=below:$A$] (A) at (intersection-1);
	\coordinate [label=below:$B$] (B) at (intersection-2);	

%	\path [name intersections={of=a--b and c, by={[label=below:$A$] (A), [label=below:$B$] (B)}}]; hier hat er Probleme mit den Buchstaben in den runden Klammern, keine Ahnung warum. Die log fragt, ob nicht ein Semikolon fehlt, wüsste aber nicht wo.

\end{tikzpicture}

\end{document}

Einzige Frage die jetzt noch bleibt ist, geht dass noch schöner, bzw. habe ich grobe Anfängerfehler dabei, die im weiteren Verlauf zu größeren Fehlern führen können?
Und hätte man das auch irgendwie mit dem pgfintersection of paths eleganter lösen können?
Madridista till I die!

Benutzeravatar
iTob
Forum-Meister
Forum-Meister
Beiträge: 1221
Registriert: Mo 19. Apr 2010, 22:19
Kontaktdaten:

Beitrag von iTob »

Nabend :-)

Entschuldige bitte die etwas verspätete Antwort, aber ich hab viel zu tun im Moment …

Im Prinzip ist dein Code ok so. Schließlich liefert er die Ergebnisse die er soll ;-) Ich habe dennoch etwas darin korrigiert und den Code meinem Stil angepasst, das heißt nicht das man es so machen muss, aber ich finde so wird er gut lesbar und etwas kürzer. Die Ausgabe bleibt die gleiche.
\documentclass[]{scrartcl} 

\usepackage{tikz} 
\usetikzlibrary{calc} 
\usetikzlibrary{intersections} 
\newcommand\Punkt{\tikz[scale=0.07]\draw[thick](-1,-1)--(1,1)(-1,1)--(1,-1);} 

\begin{document} 

\begin{tikzpicture}
	% Gerade
	\draw[name path=a--b] (0,0)--(3.9,0);
	\node at (0.1,-0.2) {$g$}; 
	% Punkt
	\node at (2.2,1.5) (P) {\Punkt}; 
	\node[scale=0.9] at (2.2,1.5) [anchor=south west] {$P$};
	% Kreisbogen
	\begin{scope} 
		\clip  (0,-0.1) rectangle (3.9,0.1); 
		\draw [name path global=c] (P) circle (1.8cm); 
	\end{scope} 
	% Schnittpunkte
	\path [name intersections={of=a--b and c, by={A, B}}]; 
	\node at (A) [below] {$A$};
	\node at (B) [below] {$B$};
\end{tikzpicture} 

\end{document}
%Bei dem Befehl darüber erkennt er dann nicht, was "c" ist
Das liegt daran, das Pfade nur innerhalb des aktuellen {scope} benannt werden. Mit name path global kann hier Abhilfe geschaffen werden. Aber deine Version, den Pfad zu wiederholen, ist auch ok. Da ist dann nur das Problem, das Änderungen etwa am Radius immer an zwei Stellen gemacht werden müssen.
%   \path [name intersections={of=a--b and c, by={[label=below:$A$] (A), [label=below:$B$] (B)}}]; hier hat er Probleme mit den Buchstaben in den runden Klammern, keine Ahnung warum. Die log fragt, ob nicht ein Semikolon fehlt, wüsste aber nicht wo.
Es fehlt auch kein Semikolon, aber du hast die Funktion des by-Schlüssels nicht ganz korrekt benutzt. Diesem Schlüssel kann man nur eine Liste mit Namen – z. B. by={A, B} – übergeben. Dann wird an jedem Schnittpunkt eine Koordinate mit einem Namen aus der Liste erstellt – bei uns hieße der erste Schnittpunkt dann also (A) und der zweite (B). Auf diese Koordinaten kannst du dann zugreifen und sie „belabeln“. Nur in einem Schritt geht das nicht, auch wenn es eine gute Idee für künftige Versionen wäre.
Und hätte man das auch irgendwie mit dem pgfintersection of paths eleganter lösen können?
Ich würde sagen nein. PGF ist die Basis, auf die TikZ aufbaut. Als normaler User sollte man eigentlich alles auf TikZ-Ebene lösen können.

Ich hoffe, ich habe alle offenen Fragen beantworten können und keine neuen aufgeworfen. Wenn ja, kannst du bitte den Status des Thread anpassen, wenn nein scheu dich nich nochmal nachzufragen ;-)

Gute Nacht!
Tobi

Madridista
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 59
Registriert: Mo 22. Aug 2011, 14:50

Beitrag von Madridista »

Keine neuen Fragen, "nur" ein besseres Verständnis, vielen Dank
Madridista till I die!

Antworten