Como posso corrigir os pontos A e B automaticamente nesta imagem?

Como posso corrigir os pontos A e B automaticamente nesta imagem?

Estou tentando encontrar um método geral para encontrar os pontos Ae Bautomaticamente desta imagem. Eu não consigo entender. Devo calcular à mão. insira a descrição da imagem aqui

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

Existe uma maneira de encontrar o ponto Ae Bautomaticamente?

Responder1

AFAIK, o primeiro post trabalhando nos valores críticos que distinguem os trechos na parte frontal daqueles na parte traseira foiesse. (Para todos os interessados: é isso que quero dizer com "dar crédito". Embora o seguinte utilize fórmulas e macros diferentes, foi bom para mim ver um post em que a derivação é explicada e que posso usar para compare meus resultados. Pessoalmente, acho que sempre devemos adicionar essas "referências", porque a resposta de Alain Matthes tem muitos links e os usuários têm uma maneira simples de procurar postagens relacionadas. Pessoalmente, sinto que Alain merece crédito por isso.) Essas coisas foram feitas. em coordenadas diferentes daquelas tikz-3dplot, mas as expressões análogas nas tikz-3dplotconvenções foram colocadas emesta resposta. Com eles, você pode mudar para um xyavião e tudo que você precisa dizer é

 \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);

Aqui, alpha1e alpha2estão os valores críticos phique determinam onde o caminho faz transições da frente para trás e, assim, fixam as localizações de Ae Banaliticamente.

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

insira a descrição da imagem aqui

Se você comparar isso com muito cuidado com sua saída, verá que há uma pequena discrepância na localização de A. Este pode ser um problema numérico ou um erro de uso.

informação relacionada