Hallo allerseits,

ich beschäftige mich gerade ein wenig mit Tikz und stoße zur Zeit auf ein Problem, auf das ich seit ein paar Tagen keine Lösung finde.

Und zwar geht es um das Beispiel weiter unten. Ich möchte die zwischen den Arc's einfärben. Dies wäre nun kein Problem wenn ich wüsste wie der Winkel von den Schnittpunkten aus ist und wie weit der Arc bis zum nächsten Punkt ist. Hat jemand vielleicht eine Möglichkeit parat wie man die drei Linien "auswählen" kann und diese einfärben?

Öffne in Overleaf
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{intersections}
\begin{document}
\begin{tikzpicture}
\pgfmathsetmacro{\radiusA}{1*90 / 120)}%
\draw [name path = Kreis1] (-4,0) arc (180:360:4 cm and \radiusA cm);
%Waagerecht

\pgfmathsetmacro{\radiusB}{4*cos(270-10)}%
\draw [name path = Kreis2] (0,4) arc (90:270:\radiusB cm and 4 cm);

\begin{scope}[rotate = -30]
\draw[name path = Kreis3] (0:4) arc (0:180:4 cm and 2.5 cm);
\end{scope}
\end{tikzpicture}
\end{document}

gefragt 11 Mär, 16:24

TikzProblem's gravatar image

TikzProblem
211
Akzeptiert: 0%

bearbeitet 11 Mär, 17:02

stefan's gravatar image

stefan ♦♦
16.9k22438


Die fillbetween library von pgfplots kann sowas mithilfe von intersection segments:

Öffne in Overleaf
\documentclass{standalone}
\usepackage{tikz}
\usepackage{pgfplots}
\usepgfplotslibrary{fillbetween}

\usetikzlibrary{intersections}
\begin{document}
\pgfdeclarelayer{pre main}
\begin{tikzpicture}
\pgfsetlayers{pre main,main}

\pgfmathsetmacro{\radiusA}{1*90 / 120)}%
\draw [name path = Kreis1] (-4,0) arc (180:360:4 cm and \radiusA cm);
%Waagerecht

\pgfmathsetmacro{\radiusB}{4*cos(270-10)}%
\draw [name path = Kreis2] (0,4) arc (90:270:\radiusB cm and 4 cm);

\begin{scope}[rotate = -30]
\draw[name path = Kreis3] (0:4) arc (0:180:4 cm and 2.5 cm);
\end{scope}

% first: intersect 1 and 2, remember as temp path
\path [
    %->,red,orange, % <-- for experiments
    intersection segments={
        of=Kreis1 and Kreis2,
        sequence={L2[reverse] -- R1[reverse]},
    },
    name path=lowerleft,
];

\pgfonlayer{pre main}
% now: intersect intermediate result with Kreis3
\fill [
    %->,thick,
    orange,
    intersection segments={
        of=lowerleft and Kreis3,
        sequence={L2 -- R2[reverse]},
    },
];
\endpgfonlayer
\end{tikzpicture}
\end{document}

alt text

Kernidee ist intersection segments, das im manual von pgfplots http://pgfplots.sourceforge.net/pgfplots.pdf dokumentiert ist: es erlaubt das identifizieren und konkatenieren von schnitt segmenten zweier Kurven. Die werden dabei durchnumeriert und mit L (wie left) und R (wie right) dem "linken" bzw "rechten" Argument der Operation zugeordnet. L1 ist also das erste segment des linken arguments. Mit [reverse] kann man das argument umdrehen.

Die layers sind jetzt "nur" noch zubehoer, damit das gefuellte segment unter die Berandung gemalt wird.

Permanenter link

beantwortet 13 Mär, 16:21

cfeuersaenger's gravatar image

cfeuersaenger
1.2k23

Deine Antwort auf die Frage (nicht auf andere Antworten)
Knebel-Vorschau

Folge dieser Frage

Per E-Mail:

Wenn Du Dich anmeldest, kannst Du Updates hier abonnieren

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs füge einfach zwei Leerzeichen an die Stelle ein, an der die neue Zeile sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Zugeordnete Themen:

×1
×1

Frage gestellt: 11 Mär, 16:24

Frage wurde angeschaut: 257 Mal

Zuletzt aktualisiert: 13 Mär, 16:21

Verwandte Fragen