Seite 1 von 1

(tikz) intersections als Koordinaten verwenden

Verfasst: Mi 3. Mai 2017, 15:13
von pointloma
Liebes Forum,

ich fühle mich ein wenig schlecht, weil ich hier immer nur nach Hilfe fragen, ohne selbst großartig zu etwas beitragen zu können. Ich hoffe ihr nehmt mir das nicht übel.

Mit viel Trial and Error (und Code von anderen übernehmen) bin ich zu folgendem Code gekommen, der soweit auch funktioniert, wie ich das gerne hätte.


\documentclass[12pt,a4paper]{scrreprt}

\usepackage[utf8]{inputenc} %Eingabekodierung
\usepackage[german]{babel} %deutscher Sprachraum
\usepackage[T1]{fontenc} %Ausgabefonts

\usepackage{tikz}
\usetikzlibrary{intersections}

\begin{document}

\begin{tikzpicture}
\def\rad{4cm}
\coordinate (O) at (0,0); 
\coordinate (N) at (0,\rad); 

%Atmosphäre
\filldraw[color=gray!10, name path=atmo] (O) circle [radius=\rad+1cm];
%Erde
\filldraw[color=blue!20, name path=earth] (O) circle [radius=\rad];
%Äquator
\draw[dashed] 
  (\rad,0) arc [start angle=0,end angle=180,x radius=\rad,y radius=5mm];
\draw
  (\rad,0) arc [start angle=0,end angle=-180,x radius=\rad,y radius=5mm];
  
  %Solarstrahlung
  \def\angle{180}
  \def\width{9cm}

  \path (\angle:9cm) coordinate(light)  ++(\angle+90:0.5*\width) -- +(\angle-90:\width) ;
        
  \foreach \x in {-4,...,4} {
   \path[name path=ray,overlay] (light) ++(\angle+90:\x*\width/9) coordinate(start) -- +(180+\angle:10cm);
   \draw[->, name intersections={of=earth and ray, sort by=ray}]  (start) -- (intersection-1);
   }
   
\end{tikzpicture}
\end{document}
Im Anhang ist ein Bild, mit dem, was mir noch fehlt und was ich nicht hinbekomme. Auch mit der Dokumentation bin ich nicht weiter gekommen. Alle meine Versuche sind bisher gescheitert, weswegen ich mich nun an euch wende.

Danke für die Hilfe!

Re: (tikz) intersections als Koordinaten verwenden

Verfasst: Do 4. Mai 2017, 12:30
von markusv
pointloma hat geschrieben: Mit viel Trial and Error (und Code von anderen übernehmen)
Habe mich auch mal auf diesen Pfad begeben und ein wenig dazu geschmissen.

Die Kreisbögen auf der "Erdoberfläche" sind soweit klar, die Bögen zurück sind zumindest an den Punkten ausgerichtet.

Bei den Pfeilen und vor allem der Pfeillänge bin ich noch ein wenig unklar.
Am besten wäre es, die Schnittpunkte mit der Atmosphäre als Koordinaten zu haben, allerdings fehlen mir dazu gerade die Werkzeuge bzw. der nötige Grips, um es zu berechnen!

Evtl. hilft es ja als weiterer Ansatz.
\documentclass[12pt,a4paper]{scrreprt}

\usepackage[utf8]{inputenc} %Eingabekodierung
\usepackage[ngerman]{babel} %deutscher Sprachraum
\usepackage[T1]{fontenc} %Ausgabefonts

\usepackage{tikz}
    \usetikzlibrary{plotmarks} %ergänzt
    \usetikzlibrary{angles} %ergänzt
    \usetikzlibrary{intersections}

\begin{document}

\begin{tikzpicture}
\def\rad{4cm}
\coordinate (O) at (0,0); 
\coordinate (N) at (0,\rad); 

%Atmosphäre
\filldraw[color=gray!10, name path=atmo] (O) circle [radius=\rad+1cm];
%Erde
\filldraw[color=blue!20, name path=earth] (O) circle [radius=\rad];
%Äquator
\draw[dashed] 
  (\rad,0) arc [start angle=0,end angle=180,x radius=\rad,y radius=5mm];
\draw
  (\rad,0) arc [start angle=0,end angle=-180,x radius=\rad,y radius=5mm];
  
  %Solarstrahlung
  \def\angle{180}
  \def\width{9cm}

  \path (\angle:9cm) coordinate(light)  ++(\angle+90:0.5*\width) -- +(\angle-90:\width) ;
        
  \foreach \x in {-4,...,4} {
   \path[name path=ray,overlay] (light) ++(\angle+90:\x*\width/9) coordinate(start) -- +(180+\angle:10cm);
   \draw[->, name intersections={of=earth and ray, sort by=ray}]  (start) -- (intersection-1) coordinate(strahl\x);
   ;
   }
   \tikzset{anglestyle/.style={angle eccentricity=1.5, draw, angle radius=\rad}}
   \draw [red] pic [anglestyle] {angle = strahl-4--O--strahl-3};
   \draw [orange] pic [anglestyle] {angle = strahl-1--O--strahl0};
   \draw [red] (strahl-4) to[bend left] (strahl-3);
   \draw [orange] (strahl-1) to[bend left] (strahl0);
   \draw[<-, red] (strahl-4) --++(-3,0);
   \draw[<-, orange] (strahl-1) --++(-1,0);
\end{tikzpicture}
\end{document}

Verfasst: Fr 5. Mai 2017, 10:17
von Bartman
Das Beispiel von markusv hat mich zu weiteren Änderungen inspiriert:
\documentclass[tikz, border=10pt]{standalone}

\usetikzlibrary{angles, intersections}

\begin{document}
\begin{tikzpicture}
\newcommand*{\rad}{4cm}
\coordinate (O) at (0,0);
\coordinate (N) at (0,\rad);

%Atmosphäre
\filldraw[color=gray!10, name path=atmo] (O) circle [radius=\rad+1cm];
%Erde
\filldraw[color=blue!20, name path=earth] (O) circle [radius=\rad];
%Äquator
\draw [dashed] (\rad,0) arc [
	start angle=0,
	end angle=180,
	x radius=\rad,
	y radius=5mm
];

\draw (\rad,0) arc [
	start angle=0,
	end angle=-180,
	x radius=\rad,
	y radius=5mm
];
 
%Solarstrahlung
\renewcommand*{\angle}{180}
\newcommand*{\width}{9cm}

\path (\angle:9cm) coordinate (light)  ++(\angle+90:0.5*\width) -- +(\angle-90:\width) ;

\foreach \x in {-4,...,4} {
	\path[name path=ray,overlay] (light) ++(\angle+90:\x*\width/9) 
		coordinate (start) -- +(180+\angle:10cm);
	\path[name intersections={of=atmo and ray, sort by=ray}] (intersection-1) 
		coordinate (atmoray\x);% <- eingefügt
	\draw[->, name intersections={of=earth and ray, sort by=ray}] (start) -- (intersection-1) 
		coordinate (earthray\x);
}
\begin{scope}[
	anglestyle/.style={
		angle eccentricity=1.5, 
		draw, 
		angle radius=\rad
	},
	thick,
	bend angle=10% <- eingefügt
]
\draw [red] pic [anglestyle] {angle = earthray-4--O--earthray-3};
\draw [orange] pic [anglestyle] {angle = earthray-1--O--earthray0};
\draw [red] (earthray-4) to[bend left] (earthray-3);
\draw [orange] (earthray-1) to[bend left] (earthray0);
\draw [->, red] (atmoray-4) -- (earthray-4);% <- geändert
\draw [->, orange] (atmoray-1) -- (earthray-1);% <- geändert
\end{scope}
\end{tikzpicture}
\end{document}

Verfasst: Mo 8. Mai 2017, 11:30
von pointloma
Ich danke euch beiden wahnsinnig! Das hilft mir enorm weiter. Wenn es euch interessiert, werde ich den fertigen Code dann noch hochladen.