2
1

Ich habe zweimal die gleiche Ellipse gegeben und würde gerne Punkte darauf ansprechen, das Endresultat soll in etwa so aussehen: alt text

Dabei ist es wichtig, dass die Normalen sich einmal im Inneren der drei Punkte auf der Ellipse und einmal außerhalb schneiden. Das Problem ist, dass ich nicht weiß wie man Punkte auf einer Kurve (hier Ellipse) ansprechen kann, es soll sich aber in beiden Fällen um die gleiche Kurve handeln.

Open in Online-Editor
\documentclass[a4paper,11pt]{article}
\usepackage{tikz}
\usepackage{subcaption}
\usepackage{caption}
\begin{document}
\begin{figure}[htb]
  \centering
  \begin{minipage}[t]{.45\linewidth}
    \centering
    \begin{tikzpicture} %Normalen schneiden sich im Inneren des Dreiecks
      \draw (0, 0) ellipse (2 and 1.5);
    \end{tikzpicture}
  \end{minipage}
  \hfill
  \begin{minipage}[t]{.45\linewidth}
    \centering
    \begin{tikzpicture} %Normalen schneiden sich nicht im Dreieck
      \draw (0, 0) ellipse (2 and 1.5);
    \end{tikzpicture}
  \end{minipage}
  \caption{Bildtitel}
\end{figure}
\end{document}

gefragt 29 Mai '15, 13:25

embeh's gravatar image

embeh
1474812
Akzeptiert-Rate: 0%

bearbeitet 29 Mai '15, 17:03

esdd's gravatar image

esdd
17.8k284257


Das war jetzt aber fast mehr eine Matheaufgabe. Wenn man die Länge der Halbachse in x-Richtung mit \a bezeichnet und die der Halbachse in y-Richtung mit \b, dann liegen alle Punkte ({\a*cos(\t)},{\b*sin(\t)}) mit \t zwischen 0° und 360° auf der Ellipse. Die Normalengleichung konnte ich auch noch berechnen. Richtig schwierig wird das ganze, weil sich die Normalen aller drei Punkte in einem Punkt schneiden sollen. Das habe ich dann nur noch durch Probieren mit verschiedenen Punkten auf den Ellipsen hinbekommen ...

alt text

Code:

Open in Online-Editor
\documentclass[a4paper,11pt]{article}
\usepackage{tikz}
\usetikzlibrary{
  calc,
  math,
  intersections
  }
\tikzset{
  dot/.style={circle,draw,fill=blue!50,inner sep=1pt},
  area/.style={draw=#1!80!black,fill=#1!80!black!10}
}
\newcommand\Ellipse[3]{%
  \begin{tikzpicture}[evaluate={\a=2;\b=1.5;}]
    \draw (0, 0) ellipse [x radius=\a,y radius=\b];
    \foreach[count=\i] \t in {#1,#2,#3}{
      \tikzmath{
        \ex=\a*cos(\t);
        \ey=\b*sin(\t);
        \ny0=(\b^2-\a^2)/\b^2*sin(\t);
      }
      \path(\ex,\ey)coordinate(n\i);
      \path[name path global=l\i,overlay]($(0,\ny0)!-1!(n\i)$)--(n\i);
    }
    \path[area=brown](n1)--(n2)--(n3)--cycle;
    \path[name intersections={of=l1 and l2,by=ns}];
    \foreach \i in {1,...,3}\draw (ns)--(n\i)node[dot]{};
    \node[dot]at(ns){};
  \end{tikzpicture}%
}
\begin{document}
\begin{figure}[htb]
  \centering
  \begin{minipage}[t]{.45\linewidth}
    \centering
    \Ellipse{-10}{102}{250}
  \end{minipage}%
  \hfill
  \begin{minipage}[t]{.45\linewidth}
    \centering
    \Ellipse{102}{197}{250}
  \end{minipage}
  \caption{Bildtitel}
\end{figure}
\end{document}
Permanenter link

beantwortet 29 Mai '15, 17:18

esdd's gravatar image

esdd
17.8k284257
Akzeptiert-Rate: 62%

bearbeitet 29 Mai '15, 18:25

1

Es gibt polare Koordinaten auch als (<Winkel>:<x-Radius> and <y-Radius>).

(02 Jun '15, 16:31) Qrrbrbirlbel

Wie du sicherlich weißt, können Punkte auf einem Kreis („polare Koordinaten“) in TikZ angesprochen werden mit

Open in Online-Editor
(<Winkel>:<Radius>)

Dies ist die implizite Version des xy polar-Koordinatensystems bzw. des canvas polar-Koordinatensystems (sollte <Radius> eine Dimensionseinheit (pt, cm, in, …) enthalten). Wir könnten also auch

Open in Online-Editor
(xy polar cs: angle=<Winkel>, radius=<Radius>)

bzw.

Open in Online-Editor
(canvas polar cs: angle=<Winkel>, radius=<Radius mit Dimensionseinheit>)

schreiben.

Ich hatte in einer anderen Antwort schonmal was zu dem Unterschied zwischen canvas und xy/xyz geschrieben.

Dort steht auch, dass es polare Koordinaten mit einem x- sowie einem y-Radius gibt, also:

Open in Online-Editor
(<Winkel>:<x-Radius> and <y-Radius>)

Es sei noch angemerkt, dass die circle- und ellipse-Pfadspezifikation mit runden Klammern, also

Open in Online-Editor
circle (<Radius>)
circle (<x-Radius> and <y-Radius>)
ellipse (<Radius>)
ellipse (<x-Radius> and <y-Radius>)

als veraltet gilt. Ich spreche mich immer wieder gerne für die []-Variante aus (gleiches gilt für die arc-Pfadspezifikation):

Open in Online-Editor
circle [radius=<Radius>]
circle [x radius=<x-Radius>, y radius=<y-Radius>]
ellipse [radius=<Radius>]
ellipse [x radius=<x-Radius>, y radius=<y-Radius>]

Diese haben nämlich den Vorteil, dass man Werte in einem Scope darüber (der Pfad selbst, eine scope-Umgebung oder die tikzpicture-Umgebung selbst) setzen kann:

Open in Online-Editor
\draw[radius=.5] (0,0) circle[] ++(right:1) circle[] (.5,1) circle[x radius=1];

Das TikZ-Handbuch spricht auch noch davon, dass die runden Klammern für Koordinaten vorgesehen sind.


Nun zu deiner Frage: Ich schließe mich esdd an. Drei (nicht-triviale) Winkel finden, für die es einen gemeinsamen Normalenschnittpunkt gibt, ist eine Mathematik- und keine TikZ-Aufgabe. (Mal abgesehen davon, wenn die Grafik nur so aussehen soll wie deine Vorgabe, suche drei Winkel bei denen das halt ungefähr hinhaut, und gut ist. So präzise ist TikZ/PGF dann auch nicht.)

Ich nutze in meiner Lösung tatsächlich aber kein einziges mal eine polare Koordinate, da ich zum Spezifizieren eines Punktes auf der Ellipse die arc-Pfadspezifikation nutze. Dies erlaubt es mir, mit turn die Normale zu finden. (Übrigens: Ellipse-Wikipediaartikel)

Ich setze x- und y-Radius in den Optionen vom TikZpicture:

Open in Online-Editor
\begin{tikzpicture}[x radius=2, y radius=1.5]

Diese Angaben gelten sowohl für circle-/ellipse- genauso wie für arc-Pfadspezifikationen. Um auf diese Werte allerdings wieder drauf zuzugreifen, benötigt man ein sehr Low-Level-Macro \pgfkeysvalueof, das ich kurzerhand in \tvo (TikZvalueof) verpacke sowie über zwei einfache PGFmath-Funktionen zur Verfügung stelle.

Das erlaubt mir jetzt also einfach

Open in Online-Editor
\draw circle[];

und sowas wie

Open in Online-Editor
\draw (0:x_radius) arc[start angle=0, end angle=<Winkel>]

zu sagen, um einen Bogen zu beschreiben, der mich zu dem <Winkel>-Punkt auf der mit \draw circle[] gezeichneten Ellipse zu finden. Das mache ich in einer Schleife, so dass ich die drei (oder mehr) Punkte automatisch platziere:

Open in Online-Editor
\path[start angle=0] \foreach \winkel[count=\zaehler] in {<Liste von Winkeln>}{
    (0:x_radius) arc [end angle=\winkel] coordinate (e\zaehler-c)
    -- ([turn]90:1) coordinate (e\zaehler-norm-c)
  }
  coordinate (eC) at (intersection of e1-c--e1-norm-c and e2-c--e2-norm-c);

Die Koordinate eC bezeichnet natürlich nur den Schnittpunkt von den ersten beiden Normalen.

Danach wird in ähnlicher Schleifen-Weise das Drei- oder n-Eck gezeichnet, die circle-Punkte platziert und mit edges verbunden:

Open in Online-Editor
\fill[nodes={dot=blue!25}, fill=red!20, draw=red]
     (e1-c) \foreach \winkel[count=\zaehler] in {<Liste von Winkeln>}{
  -- (e\zaehler-c) node(e\zaehler-n)[]} -- cycle
  node (eC-n) at(eC) [dot=blue!50]
    \foreach \winkel[count=\zaehler] in {<Liste von Winkeln>} {edge[black] (e\zaehler-n)};

Code

Open in Online-Editor
\documentclass[tikz]{standalone}
\newcommand*\tvo[1]{\pgfkeysvalueof{/tikz/#1}}
\tikzset{
  declare function={x_radius=\tvo{x radius};y_radius=\tvo{y radius};},
  dot/.style={circle, draw=black, fill={#1}, inner sep=+0pt,
      minimum size=+1pt, very thin, node contents=},
}
\newcommand*\Ellipse[2][]{%
\begin{tikzpicture}[
  x radius=2, y radius=1.5,#1]
\draw circle[];
\path[start angle=0] \foreach \winkel[count=\zaehler] in {#2}{
    (0:x_radius) arc [end angle=\winkel] coordinate (e\zaehler-c)
    -- ([turn]90:1) coordinate (e\zaehler-norm-c)
  }
  coordinate (eC) at (intersection of e1-c--e1-norm-c and e2-c--e2-norm-c);
\fill[nodes={dot=blue!25}, fill=red!20, draw=red]
     (e1-c) \foreach \winkel[count=\zaehler] in {#2}{
  -- (e\zaehler-c) node(e\zaehler-n)[]} -- cycle
  node (eC-n) at(eC) [dot=blue!50]
    \foreach \winkel[count=\zaehler] in {#2} {edge[black] (e\zaehler-n)};
\end{tikzpicture}}
\begin{document}
\Ellipse{349.5, 102, 250}
\Ellipse{20, 180, 360-20}
\Ellipse[line join=bevel]{85, 360, 360-85}
\Ellipse{90, 180, 270, 360}
\end{document}

Output

alt textalt textalt textalt text

Permanenter link

beantwortet 02 Jun '15, 16:50

Qrrbrbirlbel's gravatar image

Qrrbrbirlbel
2.9k3815
Akzeptiert-Rate: 53%

Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

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ügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×730

gestellte Frage: 29 Mai '15, 13:25

Frage wurde gesehen: 8,804 Mal

zuletzt geändert: 02 Jun '15, 17:17