(tikz) intersections als Koordinaten verwenden

Tabellen und Grafiken erstellen und anordnen


pointloma
Forum-Anfänger
Forum-Anfänger
Beiträge: 14
Registriert: Sa 23. Apr 2016, 16:01

(tikz) intersections als Koordinaten verwenden

Beitrag 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!
Dateianhänge
Minimalbeispiel.pdf
(64.37 KiB) 258-mal heruntergeladen

markusv
Forum-Meister
Forum-Meister
Beiträge: 947
Registriert: Do 3. Sep 2015, 17:20
Wohnort: Leipzig

Re: (tikz) intersections als Koordinaten verwenden

Beitrag 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}
Wäre Microsoft Word für das Schreiben von Büchern entwickelt worden,
würde es Microsoft Book heißen.

Unkomplizierte und schnelle LaTeX-Hilfe, bspw. Erstellung von Vorlagen und Bewerbungen:
Help-LaTeX@web.de

Bartman
Forum-Meister
Forum-Meister
Beiträge: 2456
Registriert: Do 16. Jul 2009, 21:41
Wohnort: Hessische Provinz

Beitrag 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}

pointloma
Forum-Anfänger
Forum-Anfänger
Beiträge: 14
Registriert: Sa 23. Apr 2016, 16:01

Beitrag von pointloma »

Ich danke euch beiden wahnsinnig! Das hilft mir enorm weiter. Wenn es euch interessiert, werde ich den fertigen Code dann noch hochladen.

Antworten