Ich möchte eine symmetrische bikonvexe Linse zeichnen. Idealerweise gebe ich die Position des Linsenmittelpunktes, den Krümmungsradius der Außenflächen und den Abstand vom Linsenmittelpunkt (optischer Achse) zum Linsenrand vor. Außerdem sollte man eine Füllfarbe vorgeben können.

Ein entsprechendes Analogon für bikonkave Linsen wäre auch Klasse.

gefragt 02 Aug '14, 15:45

nonlinearx's gravatar image

nonlinearx
100517
Akzeptiert: 58%

Für PSTricks würde mir spontan pst-optic einfallen.

(02 Aug '14, 16:03) Johannes

Kenne ich, aber ich möchte mich auf tikz konzentrieren.

(02 Aug '14, 16:05) nonlinearx

Linsenhöhe

Hier mal was für bikonvexe Linsen. Die Benutzung ist

Open in writeLaTeX
\convex[<tikz Optionen>]{<r>}{<h>}(<x>,<y>);

mit den im Bild dargestellten Parametern.

alt text

Open in writeLaTeX
\documentclass{article}
\usepackage{tikz}
\makeatletter
\newcommand\convex[1][]{\@convex{#1}}
\def\@convex#1#2#3(#4,#5){
  \pgfmathsetmacro\@alpha{acos(1-(#3)/(#2)}
  \draw[#1] ({(#4)+(#3)},{#5}) 
  arc (0:\@alpha:#2) 
  arc (180-\@alpha:180:#2)
  arc (180:180+\@alpha:#2)
  arc (-\@alpha:0:#2)
  -- cycle;
}
\makeatother
\begin{document}
\begin{tikzpicture}
  \convex{1}{.5}(0,0);  
  \convex[thick,fill=blue!50,draw=blue]{1}{.5}(2,0);
  \convex[thick,fill=blue!50,draw=blue]{2}{.5}(4,0);
  \convex[thick,fill=blue!50,draw=blue]{1}{1}(6,0);
  \convex[thick,fill=blue!50,draw=blue]{.5}{1}(9,0);
\end{tikzpicture}
\end{document}

alt text

Hier noch eine Animation. Die Form der Linse wird als Funktion des Abstandes vom Mittelpunkt verändert:

alt text

Linsendicke

Die Benutzung ist gleich wie oben

Open in writeLaTeX
\convex[<tikz Optionen>]{<r>}{<h>}(<x>,<y>);

mit den im Bild dargestellten Parametern.

alt text

Open in writeLaTeX
\documentclass{article}
\usepackage{tikz}
\makeatletter
\newcommand\convex[1][]{\@convex{#1}}
\def\@convex#1#2#3(#4,#5){
  \pgfmathsetmacro\@alpha{asin((2*#3)/(2*#2))}
  \draw[#1] ({#4},{#5+#3}) 
  arc (\@alpha:-\@alpha:#2)
  arc (180+\@alpha:180-\@alpha:#2)
  -- cycle;
}
\makeatother
\begin{document}
\begin{tikzpicture}
  \convex{1}{.5}(0,0);  
  \convex[thick,fill=blue!50,draw=blue]{1}{.5}(2,0);
  \convex[thick,fill=blue!50,draw=blue]{2}{.5}(4,0);
  \convex[thick,fill=blue!50,draw=blue]{1}{1}(6,0);
\end{tikzpicture}
\end{document}

alt text

Auch hier wieder mit Animation. Dieses Mal wird die Linsendicke variiert.

alt text

Konkave Linsen

Die Benutzung ist analog zur konvexen Linse

Open in writeLaTeX
\concave[<tikz Optionen>]{<r>}{<h>}(<x>,<y>);

mit den im Bild dargestellten Parametern.

Open in writeLaTeX
\documentclass[tikz]{standalone}
\makeatletter
\newcommand\concave[1][]{\@concave{#1}}
\def\@concave#1#2#3(#4,#5){
  \pgfmathsetmacro\@alpha{asin((2*#3)/(2*#2))}
  \pgfmathsetmacro\@height{#2-.5*sqrt(4*(#2)^2-(2*#3)^2)}
  \draw[#1] ({#4},{#5+#3})
  -- ++(1.5*\@height,0)
  arc (180-\@alpha:180+\@alpha:#2)
  -- ++(-3*\@height,0)
  arc (-\@alpha:\@alpha:#2)
  -- cycle;
}
\begin{document}
\begin{tikzpicture}[dot/.style={draw,fill,circle,inner sep=1pt}]
  \concave[thick,fill=blue!50,draw=blue]{3}{2}(0,0);
  \node[dot,label={left:$(x,y)$}] (O) at (0,0) {};
  \draw[<->] (O) -- node[left] {$h$} +(0,2);
  \draw (1.5*\@height,2) arc (180-\@alpha:180-\@alpha/2:3) node[dot] {} -- node[above] {$r$} ++(180-\@alpha/2:-3) node[dot] (m) {};
  \draw[help lines] (m) -- +(-1,0) arc (180:180-\@alpha/2:1) node[below left] {$\alpha$};
\end{tikzpicture}
\end{document}

alt text

Permanenter link

beantwortet 02 Aug '14, 16:06

Henri's gravatar image

Henri
10.0k31730

bearbeitet 03 Aug '14, 06:13

Sieht gut aus, danke. Jetzt muss ich nur noch versuchen das zu verstehen ;) Leider funktioniert das mit dem Abstand nicht ganz so wie gedacht. Ich meinte damit bezogen auf deine Bilder den Abstand vom Linsenmittelpunkt (Schnittpunkt der beiden Symmetrieachsen) zum oberen bzw. unteren Ende der Linse. Wenn ich einen Zahlenwert z.B. in cm eingebe, ist der Abstand aber deutlich größer als vorgegeben. Wenn ich das richtig verstehe, meint der von dir verwendete Abstand den Wert bis zum linken oder rechten Ende der Linse!?

(02 Aug '14, 16:09) nonlinearx

@nonlinearx Siehe aktualisierte Antwort.

(02 Aug '14, 18:06) Henri

Was muss ich ändern, damit ich anstelle der seitlichen Dicke (bei dir h) den Abstand nach oben vorgeben, also den Linsendurchmesser beeinflussen kann.

(03 Aug '14, 03:04) nonlinearx

@nonlinearx Ich berechne den Winkel nach der Formel aus Wikipedia: Kreissegment. Da Du Dich anscheinend überhaupt nicht mit der Antwort auseinander gesetzt hast, sondern lediglich auf der "Tu es für mich" Einstellung beharrst, lies bitte die Anleitung zu PGF/TikZ bevor Du irgendwelche weiteren Fragen dazu stellst.

(03 Aug '14, 05:53) Henri
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

Aktuelle Buch-Infos

LaTeX Cookbook

LaTeX Beginners Guide

Limitierter Rabatt ebook
50% Coupon code tDRet6Y

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:

×492
×1
×1

Frage gestellt: 02 Aug '14, 15:45

Frage wurde angeschaut: 1,940 Mal

Zuletzt aktualisiert: 03 Aug '14, 06:13