在两个节点之间以特定半径绘制圆弧

在两个节点之间以特定半径绘制圆弧

我使用以下代码作为复杂绘图的一部分,绘制指定起始角度、终止角度和半径的圆弧。

是否可以从节点 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角的对边AOBsin(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} 

相关内容