
\documentclass[12pt]{article}
\usepackage{geometry}
\usepackage[T1]{fontenc}
\usepackage[latin1]{inputenc}
\usepackage[brazil]{babel}
\usepackage{tikz}
\begin{center}
\begin{document}
\begin{tikzpicture}
\draw[ultra thick](0,0) circle [radius=1];
\draw[ultra thick](1.5,0.5) circle [radius=1.5];
\end{tikzpicture}
\end{center}
\end{document}
Antwort1
Das tkz-euclide
Paket bietet Ihnen ein Makro \tkzInterCC
zum Berechnen der Schnittpunkte von zwei Kreisen. Die Zeile gibt also \tkzInterCC[R](A,1 cm)(B,1.5 cm) \tkzGetPoints{M1}{N1}
an, dass der Radius des Kreises mit dem Mittelpunkt bei A
und dem Radius 1 cm und der Kreis mit dem Mittelpunkt bei B
und dem Radius 1,5 cm die Schnittpunkte finden. Das Makro \tkzGetPoints{M1}{N1}
benennt die Schnittpunkte als M1
und N1
.
\documentclass{standalone}
\usepackage{tikz}
\usepackage{tkz-euclide}
\usetkzobj{all}%IMPORTANT--recognizes points, lines, circles, etc
\begin{document}
\begin{tikzpicture}[scale=1]
\tkzDefPoint(0,0){A} %center of circle 1
\tkzDefPoint(1.5,0.5){B} %center of circle 2
\tkzInterCC[R](A,1 cm)(B,1.5 cm) \tkzGetPoints{M1}{N1} %get the intersection
% of circles centered at A with radius 1 and B with radius 1.5 and store as M1, N1
\begin{scope}
\tkzClipCircle(A,M1)
\tkzFillCircle[color=green!50,opacity=.5](B,M1)
\end{scope}
\tkzDrawCircle[R](A,1.cm) %draw circle 1 centered at A with radius 1
\tkzDrawCircle[R](B,1.5cm) %draw circle 2 centered at B with radius 1
\tkzDrawPoints[color=orange, fill=orange](M1,N1)%Draw points
\end{tikzpicture}
\end{document}
Ich finde es sinnvoll, die Kreise nach dem Schnittbereich zu zeichnen (Reihenfolge zählt). Die Ausgabe in Gummi wird unten angezeigt:
Antwort2
Wie im Kommentar erwähnt, benötigen Sie die Schnittpunkte nicht, um den Überlappungsbereich auszufüllen. Wenn Sie sie jedoch benötigen, können Sie die Schnittpunktbibliothek verwenden, um sie zu finden. Der folgende Code zeigt ein Beispiel dafür.
\documentclass[12pt]{article}
\usepackage{geometry}
\usepackage[T1]{fontenc}
\usepackage[latin1]{inputenc}
\usepackage[brazil]{babel}
\usepackage{tikz}
\usetikzlibrary{intersections}
\def\rayona{1}
\def\rayonb{1.5}
\def\interangle{90}
\begin{document}
\begin{tikzpicture}
% define first center
\coordinate (centera) at (0,0);
% Calculate second center based on radius and where is first intersection
\draw (centera) ++ (\interangle:\rayona) ++ (\interangle-90:\rayonb) coordinate (centerb);
% fill in first
\begin{scope}
\clip (centera) circle (\rayona);
\fill[black!15] (centerb) circle (\rayonb);
\end{scope}
% then draw the circles
\draw[ultra thick,name path=circlea] (centera) circle (\rayona);
\draw[ultra thick,name path=circleb] (centerb) circle (\rayonb);
%find intersections
\draw[name intersections = {of = circlea and circleb}] (intersection-1) node[red] {$\times$} node[above left]{Inter1} (intersection-2) node[red] {$\times$} node[below right]{Inter2};
\end{tikzpicture}
\end{document}
Ich habe auch versucht, dies ohne die Intersections-Bibliothek zu tun. Die erste Intersection befindet sich auf dem Weg zum zweiten Zentrum. Ich habe versucht, die zweite zu finden, indem ich
\draw (centera) ++ ({\pgfmathparse{\interangle-2*atan{\rayonb/\rayona}}\pgfmathresult}:\rayona) coordinate (inter2);
aber Latex gibt mir einen unvollständigen \iffalse-Fehler. Weiß jemand, wie man das behebt?
Bearbeitenhabe meine Antwort gefundenHierDas \pgfmathparse muss entfernt werden, damit eine andere Lösung ohne die Intersections-Bibliothek möglich ist.
\documentclass[12pt]{article}
\usepackage{geometry}
\usepackage[T1]{fontenc}
\usepackage[latin1]{inputenc}
\usepackage[brazil]{babel}
\usepackage{tikz}
\def\rayona{1}
\def\rayonb{1.5}
\def\interangle{90}
\begin{document}
\begin{tikzpicture}
% define first center
\coordinate (centera) at (0,0);
% Calculate second center based on radius and where is first intersection and define the first intersection
\draw (centera) ++ (\interangle:\rayona) coordinate (inter1) ++ (\interangle-90:\rayonb) coordinate (centerb);
% fill in first
\begin{scope}
\clip (centera) circle (\rayona);
\fill[black!15] (centerb) circle (\rayonb);
\end{scope}
% then draw the circles
\draw[ultra thick] (centera) circle (\rayona);
\draw[ultra thick] (centerb) circle (\rayonb);
%calculate the position of the second intersection
\draw (centera) ++ ({\interangle-2*atan{\rayonb/\rayona}}:\rayona) coordinate (inter2);;
% Use intersection
\draw (inter1) node[red] {$\times$} node[above left] {Inter1};
\draw (inter2) node[red] {$\times$} node[below right] {Inter2};
\end{tikzpicture}
\end{document}
Antwort3
Wie von Alain erwähnt, intersections
ist die Bibliothek möglicherweise die richtige Wahl zum Suchen der Schnittpunkte.
Wenn es Ihnen nichts ausmacht, dass der Rest Ihrer Kreise mit der Hintergrundfarbe gefüllt wird, können Sie die Schnittpunkte der Kreise mit diesem Einzeiler füllen:
\path[fill=yellow, postaction={fill=white, even odd rule, draw}] (0,0) circle (2) (2,.3) circle (3);
Füllen Sie zunächst den gesamten Pfad (Vereinigung beider Kreise) mit Ihrer Hervorhebungsfarbe und postaction
zeichnen Sie dann (mit ) den Rest (symmetrische Differenz) mit Ihrer Hintergrundfarbe neu, indem Sie verwenden even odd rule
.