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}
ポイントA
をB
自動的に見つける方法はありますか?
答え1
私の知る限り、フォアサイドのストレッチとバックサイドのストレッチを区別する重要な値を計算した最初の投稿はこれ(興味がある皆さんへ:これが私が「クレジットを与える」という意味です。以下では異なる数式とマクロを使用しますが、導出が説明され、結果を比較するために使用できる投稿を見ることができて良かったです。個人的には、これらの「参照」を常に追加する必要があると思います。そうすることで、Alain Matthesの回答に多くのリンクが含まれ、ユーザーが関連する投稿を簡単に検索できるようになります。個人的には、Alainはそれに対してクレジットに値すると思います。)これらは、それらとは異なる座標で行われましたがtikz-3dplot
、tikz-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
重要な値であり、したがって、およびの位置を解析的に固定します。phi
A
B
\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
。これは数値の問題か、ユーザーがミスをした可能性があります。