¿Cómo puedo corregir los puntos A y B automáticamente en esta imagen?

¿Cómo puedo corregir los puntos A y B automáticamente en esta imagen?

Estoy tratando de encontrar un método general para encontrar los puntos Aautomáticamente Bde esta imagen. No lo puedo obtener. Debo calcular a mano. ingrese la descripción de la imagen aquí

\documentclass[tikz,border=3.14mm]{standalone}
    \usepackage{fouriernc}
    \usepackage{tikz}
    \usepackage{tkz-euclide}
    \usetkzobj{all}
    \usepackage{tikz-3dplot}
    \usetikzlibrary{calc,backgrounds}
    \begin{document}
    \tdplotsetmaincoords{60}{110}
    \begin{tikzpicture}
    [scale=1,tdplot_main_coords]
    \path
    coordinate (O) at (0,0,0)
    coordinate (T) at  (0,0,3)
    coordinate (B) at  (3,{-sqrt(7)},0)
    coordinate (A) at  (0,4,0);
    \draw[thick, dashed] (O) -- (A) node[midway,sloped,below] {$r$};
    \draw[thick, dashed] (T) -- (A) node[midway,right] {$R$};
    \draw[thick, dashed] (T) -- (O) node[midway,left] {$d$};
    \foreach \v/\position in {T/above,O/below,A/below,B/below} {
        \draw[draw =black, fill=black] (\v) circle (1.2pt) node [\position=0.2mm] {$\v$};
    }
    \begin{scope}[tdplot_screen_coords, on background layer]
    \pgfmathsetmacro{\R}{5}%
    \pgfmathsetmacro{\r}{4}%
    \fill[ball color=cyan!50, opacity=1.0] (T) circle (\R);
    \end{scope}
    \tkzMarkRightAngle[size = 0.3](T,O,A);
    \draw [thick] (B) arc (318.5:450:4);
    \draw [thick, dashed] (A) arc (90:318.5:4);
    \end{tikzpicture}
    \end{document}

¿Hay alguna manera de encontrar el punto Ay Bautomáticamente?

Respuesta1

AFAIK, la primera publicación que resolvió los valores críticos que distinguen los estiramientos en la parte delantera de los de la parte trasera fueeste. (A todos los que estén interesados: esto es lo que quiero decir con "dar crédito". Aunque lo siguiente utilizará diferentes fórmulas y macros, fue bueno para mí ver una publicación en la que se explica la derivación y que puedo usar para compare mis resultados. Personalmente, creo que siempre se deben agregar estas "referencias" porque entonces la respuesta de Alain Matthes tiene muchos enlaces y los usuarios tienen una forma sencilla de buscar publicaciones relacionadas. Personalmente, creo que Alain merece crédito por eso). en coordenadas diferentes a aquellas tikz-3dplot, pero las expresiones análogas en las tikz-3dplotconvenciones fueron puestas enesta respuesta. Con ellos, puedes cambiar a un xyavión y todo lo que necesitas decir es

 \draw[thick] ({alpha1(\tdplotmaintheta,\tdplotmainphi,{atan(4/5)})}:4)
      coordinate (A)
      arc({alpha1(\tdplotmaintheta,\tdplotmainphi,{atan(4/5)})}:
      {alpha2(\tdplotmaintheta,\tdplotmainphi,{atan(4/5)})}:4) coordinate(B);

Aquí, alpha1y alpha2están los valores críticos phique determinan dónde el camino hace las transiciones desde el frente hacia el fondo y, por lo tanto, fijan las ubicaciones de Ay Banalíticamente.

\documentclass[tikz,border=3.14mm]{standalone}
\usepackage{fouriernc}
\usepackage{tikz-3dplot}
\usetikzlibrary{backgrounds}
\begin{document}
\tdplotsetmaincoords{60}{110}
\begin{tikzpicture}[scale=1,tdplot_main_coords,declare function={R=5;
 alpha1(\th,\ph,\b)=\ph-asin(cot(\th)*tan(\b));%
 alpha2(\th,\ph,\b)=-180+\ph+asin(cot(\th)*tan(\b));%
 beta1(\th,\ph,\a)=90+atan(cot(\th)/sin(\a-\ph));%
 beta2(\th,\ph,\a)=270+atan(cot(\th)/sin(\a-\ph));%
}]
 \path
 coordinate (O) at (0,0,0)
 coordinate (T) at  (0,0,3);
 \begin{scope}[tdplot_screen_coords, on background layer]
 \fill[ball color=cyan!50, opacity=1.0] (T) circle (R);
 \end{scope}
 \begin{scope}[canvas is xy plane at z={3-sqrt(5^2-4^2)}]
  \draw[thick,dashed] circle[radius=4cm];
  \draw[thick] ({alpha1(\tdplotmaintheta,\tdplotmainphi,{atan(4/5)})}:4)
  coordinate (A)
  arc({alpha1(\tdplotmaintheta,\tdplotmainphi,{atan(4/5)})}:
  {alpha2(\tdplotmaintheta,\tdplotmainphi,{atan(4/5)})}:4) coordinate(B);
 \end{scope}
 \begin{scope}[on background layer]
  \draw[thick, dashed] (O) -- (A) node[midway,sloped,below] {$r$};
 \draw[thick, dashed] (T) -- (A) node[midway,right] {$R$};
 \draw[thick, dashed] (T) -- (O) node[midway,left] {$d$};
 \foreach \v/\position in {T/above,O/below,A/below,B/below} {
     \draw[draw =black, fill=black] (\v) circle (1.2pt) node [\position=0.2mm] {$\v$};
 }
 \end{scope}
\end{tikzpicture}
\end{document}

ingrese la descripción de la imagen aquí

Si compara esto con mucho cuidado con su resultado, verá que hay una pequeña discrepancia en la ubicación de A. Esto podría ser un problema numérico o uno de uso cometido un error.

información relacionada