この画像のポイント A と B を自動的に修正するにはどうすればよいでしょうか?

この画像のポイント A と B を自動的に修正するにはどうすればよいでしょうか?

Aこの画像のポイントを自動的に見つける一般的な方法を探していますB。 見つかりません。 手作業で計算しなければなりません。 ここに画像の説明を入力してください

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

ポイントAB自動的に見つける方法はありますか?

答え1

私の知る限り、フォアサイドのストレッチとバックサイドのストレッチを区別する重要な値を計算した最初の投稿はこれ(興味がある皆さんへ:これが私が「クレジットを与える」という意味です。以下では異なる数式とマクロを使用しますが、導出が説明され、結果を比較するために使用できる投稿を見ることができて良かったです。個人的には、これらの「参照」を常に追加する必要があると思います。そうすることで、Alain Matthesの回答に多くのリンクが含まれ、ユーザーが関連する投稿を簡単に検索できるようになります。個人的には、Alainはそれに対してクレジットに値すると思います。)これらは、それらとは異なる座標で行われましたがtikz-3dplottikz-3dplotが、慣例この答えこれらを使えば、飛行機に乗り換えることができxy、必要なのは

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

ここで、およびalpha1は、パスが前面から背面に遷移する場所を決定するalpha2重要な値であり、したがって、およびの位置を解析的に固定します。phiAB

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

ここに画像の説明を入力してください

これを自分の出力と注意深く比較すると、 の場所にわずかな不一致があることがわかりますA。これは数値の問題か、ユーザーがミスをした可能性があります。

関連情報