Auf dem matheplanet habe ich einen von @Stefan auf die Schnelle gemachten Entwurf für einen Gebietsgraphen gesehen:

alt text

Der Graph illustriert das sogenannte Isoperimetrische Problem, was nach einer Kurve vorgegebener Länge fragt, welche eine maximale Fläche umspannt. Die Lösung ist bekannterweise der Kreis. Das Bild hier zeigt einen ersten Beweisschritt: dass die gesuchte Fläche konvex sein muss, sonst könnte man sie ja durch Spiegeln an der Verbindungsgeraden zweier Randpunkte noch vergrößern bei gleicher Länge, kurz gesagt.

Daher soll die rote Gerade das grüne Gebiet eigentlich nur berühren und die gestrichelte Linie soll eine Spiegelung des Gebietsrandes zwischen den Berührungspunkten an der roten Gerade sein. Wie kann man das erreichen?

Obiges Bild wurde mit folgendem Code gezeichnet:

Open in writeLaTeX
\documentclass[margin=5mm,tikz]{standalone}
\begin{document}
\begin{tikzpicture}[scale=0.35]
\coordinate (A) at (-4,2);
\coordinate (B) at (-2,-2);
\coordinate (C) at (2,-2);
\coordinate (D) at (4,4);
\coordinate (E) at (0,1);

\coordinate (F) at (0,4);

%Geglättete Polygonzüge
\draw[smooth cycle, tension=0.8, thick, fill=green!30!yellow]  plot[mark=none, mark size=1.5pt, mark options={fill=red}] coordinates{(A)(B)(C)(D)(E)};

\draw[smooth, dashed, thick]  plot[mark=none, mark size=1.5pt, mark options={fill=red}] coordinates{(A)(F)(D)};

%Gerade
\draw[thick, red, shorten >=-1cm, shorten <=-1cm]  (A)--(D);

%%Koordinatensystem
%\draw [thick, ->] (-5,0) -- (5,0) node [anchor=north west] {};
%\draw [thick, ->] (0,-5) -- (0,5) node [anchor=south east] {$\mathbf{C}$};

\end{tikzpicture}
\end{document}

gefragt 27 Mär '14, 16:33

welle's gravatar image

welle
106222631
Akzeptiert-Rate: 0%

bearbeitet 28 Mär '14, 12:22

stefan's gravatar image

stefan ♦♦
18.3k163148

Die Frage ist zum Archivieren gedacht, kein Support benötigt. Antworten sind jedoch sehr willkommen!

(27 Mär '14, 16:34) welle
1

@Stefan Vielen Dank für das Einfügen der sehr hilfreichen Erklärung zum mathematischen Hintergrund der Abbildung.

(28 Mär '14, 12:56) welle

Mir erscheint es durch die Kurvenglättung mittels smooth sehr schwierig oder zumindest aufwändig, tangentiale Berührungspunkte genau zu bestimmen. Aber vielleicht hat dazu jemand anders einen besseren Vorschlag, bei dem das möglich ist.

Aus dem von @Stefan in der Frage ergänzten mathematischen Kontext ergibt sich jedoch, dass es durchaus in Ordnung ist, die Berührungspunkte von Hand anzunähern, da die Verbindungsgerade aus mathematischer Sicht nicht unbedingt genau tangential sein muss.

alt text

  • Wegen pic ist Version 3 von pgf/tikz nötig.
  • Graph als pic definieren, damit er mehrmals eingefügt werden kann. Dabei die Koordinaten so anpassen, dass der Punkt (0,0) in einem der Berührungspunkte liegt. Dieser Punkt ist so eine Art „Anker“ beim Einfügen des pic, um den dann auch rotiert werden kann.
  • Im pic den zweiten Berührungspunkt näherungsweise ermitteln und bezeichnen.
  • Das pic ein zweites Mal gestrichelt einfügen, dabei x und y vertauschen und so drehen, dass die Berührungspunkte aufeinander fallen. Der Drehwinkel ergibt sich aus den Koordinaten (x,y) des zweiten Berührungspunktes über 2*atan(x/y)-90.
  • Damit nur der benötigte Teil des gestrichelten Graphen sichtbar ist, geeignet mit clip beschneiden.
Open in writeLaTeX
\documentclass[tikz,margin=10mm]{standalone}
\usetikzlibrary{calc,arrows.meta}
\begin{document}
\begin{tikzpicture}[very thick]
\tikzset{
  form/.pic={
    % Koordinaten in Berührungspunkten
    \coordinate (-O) at (0,0);\coordinate (-A) at (7.87,2.11);
    % Geglättete Polygonzüge
    \draw[smooth cycle, tension=0.8,pic actions]
      plot coordinates{(-.1,-.1)(2,-4)(6,-4)(8,2)(4,-1)};
    %\node[red] at (-A){\Huge x}; % zur Kontrolle der Anpassung
  }
}
  % Gebiet einfügen
  \pic(Gebiet)[draw,very thick,fill=green!30!yellow]{form};
  % Gebiet spiegeln und beschneiden
  \begin{scope}
    \clip(Gebiet-O)--(Gebiet-A)--($(Gebiet-O)!0.6!45:(Gebiet-A)$)--cycle;
    \pic[dashed,very thick,x={(0cm,1cm)},y={(1cm,0cm)},rotate=-60]{form};
  \end{scope}
  % Gerade
  \draw[red]  ($(Gebiet-O)!-.2!(Gebiet-A)$)--($(Gebiet-O)!1.2!(Gebiet-A)$);
  % Pfeil
  \draw[-{Stealth[length=4mm,width=2mm]},bend right](5,0.2)to(4.5,2.2);

\end{tikzpicture}
\end{document}

Nötige Zwischenschritte

Ermittlung und Kontrolle der Berührungspunkte mit

Open in writeLaTeX
\documentclass[tikz,margin=10mm]{standalone}
\usetikzlibrary{calc,arrows.meta}
\begin{document}
\begin{tikzpicture}[very thick]
\tikzset{
  form/.pic={
    % Koordinaten in Berührungspunkten
    \coordinate (-O) at (0,0);\coordinate (-A) at (7.87,2.11);
    % Geglättete Polygonzüge
    \draw[smooth cycle, tension=0.8,pic actions]
      plot coordinates{(-.1,-.1)(2,-4)(6,-4)(8,2)(4,-1)};
    \node[red] at (-A){\Huge x}; % zur Kontrolle der Anpassung
  }
}
  \pic(Gebiet)[draw]{form};
  \pic[dashed,very thick,x={(0cm,1cm)},y={(1cm,0cm)},rotate=-60]{form};
\end{tikzpicture}
\end{document}

Die beiden Graphen dürfen sich nicht überschneiden und es darf nur ein „x“ zu sehen sein.

alt text

Ermittlung und Kontrolle des Beschneidungsbereiches in dem zunächst \draw[red] statt \clip verwendet wird.

alt text

Permanenter link

beantwortet 28 Mär '14, 02:11

esdd's gravatar image

esdd
17.8k284257
Akzeptiert-Rate: 62%

bearbeitet 31 Mär '14, 21:50

1

Hervorragend gelöst und erklärt! Die Näherung der Randpunkte ist völlig in Ordnung, denn sie sind in mathematischen Kontext beliebig, Hauptsache ihre Verbindungsgerade liegt nicht komplett in der konkaven Kurve. Auch daher habe ich den mathematischen Hintergrund ergänzt. Dass es tangential aussieht, ist eine bildlich schöne Wahl, natürlich. :-) In diesem Sinne kann man den 1. Absatz gern ändern, dass die Wahl per Hand für die Beweisskizze so genug ist.

(28 Mär '14, 12:27) stefan ♦♦
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
×117
×4

gestellte Frage: 27 Mär '14, 16:33

Frage wurde gesehen: 9,708 Mal

zuletzt geändert: 31 Mär '14, 21:50