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, 21:45

nonlinearx's gravatar image

nonlinearx
10071218
Akzeptiert-Rate: 33%

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

(02 Aug '14, 22:03) Johannes

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

(02 Aug '14, 22: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, 22:06

Henri's gravatar image

Henri
15.7k133943
Akzeptiert-Rate: 46%

bearbeitet 03 Aug '14, 12: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, 22:09) nonlinearx

@nonlinearx Siehe aktualisierte Antwort.

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

×728
×1
×1

gestellte Frage: 02 Aug '14, 21:45

Frage wurde gesehen: 9,923 Mal

zuletzt geändert: 03 Aug '14, 12:13