Moin, die Frage steht auch auf Englisch zur Verfügung: "3D Orbits around Sphere, arc points or orbit coordinates pos" auf latex-community und tex.stachexchange.

Außerdem als Projekt auf In overleaf (ehemals writelatex) sofern zugänglich.

Nun zum Problem:

Das Problem ist die path-Umgebung, die die Pläne nicht erkennt bzw. nur den einen und zwar den des ersten Orbits und dessen Subspur, blau und grün. Die Punkte Blau und Schwarz sind somit leicht zu platzieren. Leider funktioniert das nicht für andere Pläne.

Zu finden ist das Problem in den Zeilen weiter unten unter ###-problem-###. Die orangenen Punkte sollten also eigentlich auf den roten Linien liegen, da wo O und o sind.

Leider verstehe ich nicht warum das Ganze nicht funktioniert, zudem da auch die Änderung von \path zu \draw keinen Unterschied macht – genauso wenig wie die Änderung von orbplanetwo zu xzplane – ist das Ganze etwas merkwürdig.

Da dies nur das Minimalbeispiel ist und noch einiges in der Grafik hinzukommt, ist das manuelle Setzen der Punkte nicht gerade nützlich.

Ich freue mich über jede Unterstützung und seien es nur Vorschläge.

Open in Online-Editor
\documentclass{article} 
\usepackage{tikz, tikz-3dplot} 
\usetikzlibrary{calc,fadings,decorations.pathreplacing}

%% helper macros
\newcommand{\pgfmathsinandcos}[3]{% 
  \pgfmathsetmacro#1{sin(#3)}% 
  \pgfmathsetmacro#2{cos(#3)}% 
} 
\newcommand{\LongitudePlane}[3][current plane]{%
  \pgfmathsinandcos\sinEl\cosEl{#2} % elevation
  \pgfmathsinandcos\sint\cost{#3} % azimuth
  \tikzset{#1/.style={cm={\cost,\sint*\sinEl,0,\cosEl,(0,0)}}}
}
\newcommand{\LatitudePlane}[3][current plane]{%
  \pgfmathsinandcos\sinEl\cosEl{#2} % elevation
  \pgfmathsinandcos\sint\cost{#3} % latitude
  \pgfmathsetmacro\yshift{\cosEl*\sint}
  \tikzset{#1/.style={cm={\cost,0,0,\cost*\sinEl,(0,\yshift)}}} % 
}
\newcommand{\OrbitPlane}[3][current plane]{%
  \pgfmathsinandcos\sinEl\cosEl{#2} % elevation
  \pgfmathsinandcos\sint\cost{#3} % azimuth
  \tikzset{#1/.style={cm={\cost,\sint*\sinEl,0,\cosEl,(0,0)}}}
}
\newcommand{\DrawLongitudeCircle}[2][1]{
  \LongitudePlane{\angEl}{#2}
  \tikzset{current plane/.prefix style={scale=#1}}
   % angle of "visibility" 
  \pgfmathsetmacro\angVis{atan(sin(#2)*cos(\angEl)/sin(\angEl))} %
  \draw[current plane] (\angVis:1) arc (\angVis:\angVis+180:1); 
  \draw[current plane,dashed] (\angVis-180:1) arc (\angVis-180:\angVis:1); 
}
\newcommand{\DrawLatitudeCircle}[2][1]{
  \LatitudePlane{\angEl}{#2}
  \tikzset{current plane/.prefix style={scale=#1}}
  \pgfmathsetmacro\sinVis{sin(#2)/cos(#2)*sin(\angEl)/cos(\angEl)} 
  % angle of "visibility"
  \pgfmathsetmacro\angVis{asin(min(1,max(\sinVis,-1)))}  
  \draw[current plane] (\angVis:1) arc (\angVis:-\angVis-180:1); 
  \draw[current plane,dashed] (180-\angVis:1) arc (180-\angVis:\angVis:1);
}
\newcommand{\DrawOrbitCircle}[2][1]{
  \OrbitPlane{\angEl-8}{#2} % orbit kippen!!!
  \tikzset{current plane/.prefix style={scale=#1}}
   % angle of "visibility" 
  \pgfmathsetmacro\angVis{atan(sin(#2)*cos(\angEl)/sin(\angEl))} %
  % original
    \draw[current plane] (\angVis:1) arc (\angVis:\angVis+180:1); % sichtbarkeit des vor der kugel befindlichen bereichs
   \draw[current plane,dashed] (\angVis-180:1) arc (\angVis-180:\angVis:1); 
   } % achtung unten auch eine winkeländerung !!!???

%% document-wide tikz options and styles
\tikzset{%
  >=latex, % option for nice arrows 
  inner sep=0pt,%
  outer sep=2pt,%
  mark coordinate/.style={inner sep=0pt,outer sep=0pt,minimum size=3pt,fill=black,circle}%
}

\begin{document} 
\begin{tikzpicture}

%% some definitions 
\def\R{4} % sphere radius
\def\rr{5} % orbit radius?
\def\angEl{35} % elevation angle 
\def\angAz{-105} % azimuth angle 
\def\angPhi{-40} % longitude of point P 
\def\angBeta{25} % latitude of point P

%######################################################################
%% working planes
\pgfmathsetmacro\H{\R*cos(\angEl)} % distance to north pole
\tikzset{xyplane/.style={cm={cos(\angAz),sin(\angAz)*sin(\angEl),-sin(\angAz),cos(\angAz)*sin(\angEl),(0,-\H)}}}
\LongitudePlane[xzplane]{\angEl}{\angAz}
\LongitudePlane[pzplane]{\angEl}{\angPhi}
\LongitudePlane[yzplane]{\angEl}{\angAz+90}
\LatitudePlane[equator]{\angEl}{0}
\OrbitPlane[orbplanetwo]{\angEl-8}{\angAz} % dem orbit oben und unten winkel anpassen
\OrbitPlane[orbplane]{\angEl-8}{\angAz+60} % dem orbit oben und unten winkel anpassen

%######################################################################
%% draw xyplane and sphere
\fill[ball color=white!50!gray] (0,0) circle (\R); % 3D lighting effect
\draw[white] (0,0) circle (\R);

%% characteristic points
\path[orbplane] (\angBeta+10:\R/1) coordinate[mark coordinate,color=black] (P1); % works fine
\path[orbplane] (\angBeta+10:\rr/1) coordinate[mark coordinate,color=blue] (P2); % works fine

%#############################-problem-#########################################
\path[orbplanetwo] (\angPhi+50:\R/1) coordinate[mark coordinate,color=orange] (A1); % not at the expected position ???
\path[orbplanetwo] (\angBeta:\rr/1) coordinate[mark coordinate,color=orange] (A2); % not at the expected position ???

%##-wanted position of the orange dots-#####
\node at (-0.93,0) {o};
\node at (-1.15,0.05) {O};

%######################################################################
% Äquator, Orbit, Subspur etc.
%% draw meridians and latitude circles
\DrawLatitudeCircle[\R,yellow]{0} % equator
\DrawOrbitCircle[\rr,cyan]{\angAz+60} % orbit plane drehen !!!
\DrawOrbitCircle[\R,green]{\angAz+60} % orbit subspur !!!
\DrawOrbitCircle[\rr,red]{\angAz} % orbit plane drehen !!!
\DrawOrbitCircle[\R,red]{\angAz} % orbit subspur !!!

\end{tikzpicture} 
\end{document}

alt text

gefragt 26 Mär '15, 06:19

startrucky's gravatar image

startrucky
293
Akzeptiert: 100%

bearbeitet 27 Mär '15, 05:33

saputello's gravatar image

saputello
18.4k22352

@startrucky Willkommen auf der TeXwelt! Schön, dass es hier auch steht, auf Deutsch verstehe ich es gleich besser. :-) An den verlinkten Stellen gab es ja noch keine Lösung. Was ich toll fände: evtl. Verringern der Komplexität durch Herausnehmen von unbeteiligten Orbits und Punkten, Isolieren zu einem einzigen Problempunkt mit Orbit, und wenn es gelingt: einen Punkt manuell setzen, wo er eigentlich hingehört, vergleichbar mit dem Winkel-gesetzten Punkt, wo er falsch landet. Nur als Idee, was beim Troubleshooten noch helfen könnte. (Fragen können jederzeit editiert werden.)

(26 Mär '15, 06:43) stefan ♦♦

Leider wird es wohl nicht einfacher als dass.

(26 Mär '15, 07:36) startrucky

Ich habe mir erlaubt, die Lesbarkeit durch kleine sprachliche Korrekturen und korrektes Markdown (hoffentlich) zu verbessern. Bitte kein HTML verwenden. Das führt nicht immer zum korrekten Ergebnis. Informationen zur Nutzung von TeXwelt und der Markdown-Syntax findet sich u. a. auch in der FAQ.

(26 Mär '15, 08:24) saputello

Die Antwort wurde auf tex.stachexchange.org gegeben.

Permanenter link

beantwortet 27 Mär '15, 04:08

startrucky's gravatar image

startrucky
293

bearbeitet 27 Mär '15, 04:09

1

@startrucky Danke für die Info! Hatte es vorhin gefunden und die Lösung hier für interessierte Leser aufgeschrieben, gepostet ein paar Sekunden nachdem Du gerade das schriebst. Wegen der Ausführlichkeit würde ich meinen Post stehenlassen und vllt. den hier entfernen. Oder übernimm den Text hier rein. :-)

(27 Mär '15, 04:11) stefan ♦♦

Fürs Archivieren der Lösung: TonioElGringo fand die Ursache auf TeX.SX: in der Definition von \OrbitPlane:

Open in Online-Editor
\tikzset{#1/.style={cm={\cost,\sint*\sinEl,0,\cosEl,(0,0)}}}

Die Makros \cost, \sint, \sinEl und \cosEl werden nicht vor dem Setzen des Stils expandiert, daher erhalten orbplane und orbplanetwo den gleichen Stil.

Mit /.estyle stattdessen ginge es:

Open in Online-Editor
\tikzset{#1/.estyle={cm={\cost,\sint*\sinEl,0,\cosEl,(0,0)}}}

Es gibt nur leider einen Bug in der aktuellen TikZ-Version, wenn /.prefix nach einem /.estyle verwendet wird, wie in \DrawOrbitCircle hier:

Open in Online-Editor
\tikzset{current plane/.prefix style={scale=#1}}

Beheben lässt sich das dadurch, dass statt durch /.prefix die Option scale=#1 direkt darunter im \draw-Befehl angegeben wird:

Open in Online-Editor
\newcommand{\DrawOrbitCircle}[2][3]{
  \OrbitPlane{\angEl-8}{#2} % orbit kippen!!!
  % angle of "visibility" 
  \pgfmathsetmacro\angVis{atan(sin(#2)*cos(\angEl)/sin(\angEl))} %
  % original
  \draw[scale=#1,current plane] (\angVis:1) arc (\angVis:\angVis+180:1); % sichtbarkeit des vor der kugel befindlichen bereichs
  \draw[scale=#1,current plane,dashed] (\angVis-180:1) arc (\angVis-180:\angVis:1); 
} % achtung unten auch eine winkeländerung !!!???

Dann funktioniert es, zusammen mit /.estyle.

Permanenter link
Dieser Antwort ist "Community-Wiki" markiert.

beantwortet 27 Mär '15, 04:09

stefan's gravatar image

stefan ♦♦
5.8k12234

wikifiziert 27 Mär '15, 14:33

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:

×19
×7
×1

Frage gestellt: 26 Mär '15, 06:19

Frage wurde angeschaut: 2,300 Mal

Zuletzt aktualisiert: 27 Mär '15, 14:33