![在两个节点之间以特定半径绘制圆弧](https://linux22.com/image/383409/%E5%9C%A8%E4%B8%A4%E4%B8%AA%E8%8A%82%E7%82%B9%E4%B9%8B%E9%97%B4%E4%BB%A5%E7%89%B9%E5%AE%9A%E5%8D%8A%E5%BE%84%E7%BB%98%E5%88%B6%E5%9C%86%E5%BC%A7.png)
我使用以下代码作为复杂绘图的一部分,绘制指定起始角度、终止角度和半径的圆弧。
是否可以从节点 z 到节点 x 绘制半径为 0.5 厘米的相同圆弧(即保持圆弧的形状而不将其放大)。我尝试通过将半径设为 0.88 厘米来伪造节点 x 处的圆弧末端(如下图所示);但我需要保持半径为 0.5 厘米。
\documentclass{beamer}
\usepackage{tikz}
\begin{document}
\begin{frame}[t]
\begin{tikzpicture}[scale=2]
\node [thin, black] (0,0) (oscnd){}
([shift={(180.:.3)}]oscnd.center) node (oscndl){}
([shift={(90.:.3)}]oscndl.center) node (oscndlu){} node{\textcolor{red} x}
([shift={(180.:1.)}]oscndlu.center) node (oscndlul){}
([shift={(-90.:.3)}]oscndl.center) node (oscndld){} node{\textcolor{red}z}
([shift={(180.:1.)}]oscndld.center) node (oscndldl){}
;
\draw[thick, green, fill=green!40!white, opacity=.4] (oscndldl.center) -- (oscndld.center) arc (-160:160:.5cm) -- (oscndlu.center) -- (oscndlul.center);
\end{tikzpicture}
\end{frame}
\end{document}
此图是下图的一部分。它是用圆圈而不是圆弧绘制的。
答案1
编辑:应 OP 的要求,添加一些数学元素
根据我的计算,如果我正确理解了你的问题,这个圆弧从一个角度开始180+asin(3/5)
并结束于180-asin(3/5)
。
\documentclass{beamer}
\usepackage{tikz}
\begin{document}
\begin{frame}[t]
\begin{tikzpicture}[scale=2]
\node [thin, black] (0,0) (oscnd){}
([shift={(180.:.3)}]oscnd.center) node (oscndl){}
([shift={(90.:.3)}]oscndl.center) node (oscndlu){} node{\textcolor{red} x}
([shift={(180.:1.)}]oscndlu.center) node (oscndlul){}
([shift={(-90.:.3)}]oscndl.center) node (oscndld){} node{\textcolor{red}z}
([shift={(180.:1.)}]oscndld.center) node (oscndldl){}
;
\draw[thick, green, fill=green!40!white, opacity=.4] (oscndldl.center) -- (oscndld.center) arc (-180+asin(3/5):180-asin(3/5):.5cm) -- (oscndlu.center) -- (oscndlul.center);
\end{tikzpicture}
\end{frame}
\end{document}
一些几何元素:
在斜边长度为 1 个单位的矩形三角形中,锐角的正弦值是对边的长度。这里,角 AOB(alpha)的正弦值是边 AB 的长度。
半径为 1 个单位的圆称为三角圆。下图中的圆半径为 1 个单位。140° 的正弦等于 40° 的正弦。因为蓝色线段的长度相同。
90° 和 180° 之间的每个角度都对应一个长度,即一个正弦值。因此,要求长度等于正弦值相当于强加一个 alpha 角测量值。
在您的图中,正弦等于 0.3 [shift={(90.:.3)}]
,斜边等于 0.5 arc (-160:160:.5cm)
。
这会强加一个角度,如我计算的那样。如果你想改变这个角度,你必须改变正弦:[shift={(90.:.3)}]
或者改变斜边,即圆弧的半径(-160:160:.5cm)
关于该解决方案的一些补充解释(应 OP 的要求):
由于三角圆的半径等于1个单位,所以正弦小于1。正弦函数sin()
和反正弦asin()
称为互惠的。
该sine
函数,顾名思义,当角度介于 0° 和 90° 之间时,给出长度例如三角形 AOB 中AB
角的对边AOB
sin(20)=0,342...
该arcsine
函数做“相反”的事情,即从给定的长度(小于 1 个单位)给出相应的角度。
由于0.5
是斜边(圆的半径)一半1 个单位,对应的窦是两次高达0.3,即0.6。
这个正弦值可以通过除以 0.3/0.5=0.6(相当于 3/5=0.6)直接得到。因此,该公式计算出的角度窦等于 0.3,并且斜边等于 0.5
这个角度(你可以用电脑上安装的计算器来计算)大约是36.87...°asin(3/5)=36,869897645844021296855612559093...°
我在 180 度处添加此角度以获得要绘制的圆弧的起始角度,并在 180° 处将其移除以获得其终止角度。我完全可以(并且我正在纠正我的解决方案)写成arc (-180+asin(3/5):180-asin(3/5):.5cm)
。
使用 www.DeepL.com/Translator 翻译
答案2
只是为了好玩和学习......根据线宽、线经度、圆终止半径、条件的值来创建形状的实现line_width<=termination_radio
;扩展到两个绘图定义中的红色形状。decorations.fractals
用于红色形状的正确终止。
结果:
梅威瑟:
\documentclass[tikz,border=10pt]{standalone}
\usetikzlibrary{decorations.fractals}
\begin{document}
\begin{tikzpicture}[]
\def\GreenShape(#1)[#2][#3][#4]
{%1: Position 2: Line width 3:Line Longitude 4: Circle termination radio
\pgfmathparse{asin(0.5*#2/#4)}
\edef\Theta{\pgfmathresult}
\draw[
fill=green!50!black,
preaction={%For the shadow
transform canvas={shift={(2pt,-3pt)}},
fill=gray,
fill opacity=0.4,
}
](#1) |- ++(#3,0.5*#2) arc (180-\Theta:\Theta-180:#4) -| cycle;
\path(#1)-- ++(#3,0.5*#2)++(-\Theta:#4) coordinate (A);
\shade[inner color=yellow, outer color=green!50!black](A) circle (0.8*#4);
\shade[inner color=yellow, outer color=green!50!black](A) circle (0.5*#4);
}
%For the red shape:
\def\RedShape(#1)[#2][#3][#4]
{%1: Position 2: Line width 3:Line Longitude 4: Circle termination size
\draw[
decoration=Koch snowflake,
fill=red,
thick,
preaction={%For the shadow
transform canvas={shift={(2pt,-3pt)}},
fill=gray,
fill opacity=0.4,
}
]
(#1)++(#4,-0.5*#2) coordinate (init)
.. controls +(-180:0.5) and +(-45:0.1) .. ++(-#4*1.5,-0.5*#2)
.. controls +(135:0.1) and +(-90:0.2) .. ++(#4*0.5,#2)
.. controls +(90:0.2) and +(-135:0.1) .. ++(-#4*0.5,#2)
.. controls +(45:0.1) and +(-180:0.5) .. ++(#4*1.5,-0.5*#2)
-- ++(0.4*#3,0)
.. controls +(90:0.5) and +(-90:0.5) .. ++(-#4+0.25*#2,#4+0.7) coordinate (ball)
arc (180:0:#4)
.. controls +(-90:0.5) and +(90:0.5) .. ++(-#4+0.25*#2,-#4-0.7)
-- ++(0.6*#3,0)
decorate{decorate{--++(#4*1.5,0.5*#2) -- ++(0,-#2*2) --++(-#4*1.5,+0.5*#2)}}
-- (init)
;
\path (ball)++(#4,0) coordinate (B);
\shade[inner color=yellow, outer color=red!70!black](B) circle (0.5*#4);
}
%Start drawing the thing
\GreenShape(0,0)[0.5][1][0.5]
\RedShape(2.1,0)[0.5][6][0.5]
\end{tikzpicture}
\end{document}