在 TikZ 中计算坐标数

在 TikZ 中计算坐标数

我正在尝试在 TikZ 中单线绘制三个全等的等边三角形(见下图)。从本质上讲,这相当简单,但我想编写 TikZ 代码,以便通过调整一些几何参数轻松更改图形的形状。更具体地说,我希望 TikZ 图形中的坐标根据参数的值而变化。

三个单线全等等边三角形

我想要改变的两个参数是距离A(以下简称大号)以及b(以下简称Δ) 中。通过选择A作为原点,坐标表达式如下

A( 0 , 0 )
b( cos(60°)*(L + Δ) , sin(60°)*(L + Δ) )
C( bx + cos(60°)*L , by - sin(60°)*L )
d( L - cx , cy )
( L - bx, by )
F( L , 0 )

在哪里繁體经过陣容表示X点坐标bC分别。(坐标对于绘制该图来说并不是必需的。

我尝试了以下方法,但这给出了如下所示的输出,其中只有AF是正确的。如果这个方法有效,我就可以简单地改变和的定义\l\delta重新编译,看看几何形状如何随着大号Δ

\begin{tikzpicture}

\def\cossixty{0.5}
\def\sinsixty{0.866025}

\def\l{6}
\def\delta{2}
\def\ldelta{\l+\delta}
\def\bx{\cossixty*\ldelta}
\def\by{\sinsixty*\ldelta}
\def\cx{\bx+\cossixty*\l}
\def\cy{\by-\sinsixty*\l}
\def\dx{\l-\cx}
\def\ex{\l-\bx}

\coordinate (a) at (0,0);
\coordinate (b) at (\bx,\by);
\coordinate (c) at (\cx,\cy);
\coordinate (d) at (\dx,\cy);
\coordinate (e) at (\ex,\by);
\coordinate (f) at (\l,0);

\begin{scope}[thick]
    \draw (a) -- (b) -- (c) -- (d) -- (e) -- (f) -- (a);
\end{scope}

\end{tikzpicture}

错误输出

所以我的问题是:如何让 TikZ 将上面列出的坐标表达式计算为浮点数并得到正确的输出?

(这只是我在 TikZ 中制作的较大图像的一小部分,因此,当然,我选择以单线绘制图形并使用可调整的参数是有充分理由的。)

答案1

一旦让它pgf帮你计算,你的代码就可以正常工作:

在此处输入图片描述

笔记:

  • \delta是希腊字母,因此最好使用不同的名称。
  • 我还添加了node来标记这两个参数。

代码:

\documentclass{article}
\usepackage{tikz}

\begin{document}
\begin{tikzpicture}

\def\l{4}
\def\MyDelta{2}
\pgfmathsetmacro\ldelta{\l+\MyDelta}
\pgfmathsetmacro\bx{cos(60)*\ldelta}
\pgfmathsetmacro\by{sin(60)*\ldelta}
\pgfmathsetmacro\cx{\bx+cos(60)*\l}
\pgfmathsetmacro\cy{\by-sin(60)*\l}
\pgfmathsetmacro\dx{\l-\cx}
\pgfmathsetmacro\ex{\l-\bx}

\coordinate (a) at (0,0);
\coordinate (b) at (\bx,\by);
\coordinate (c) at (\cx,\cy);
\coordinate (d) at (\dx,\cy);
\coordinate (e) at (\ex,\by);
\coordinate (f) at (\l,0);

\begin{scope}[thick]
    \draw (a) -- (b) -- (c) -- (d) -- (e) -- (f) -- (a)
        node [below, midway] {$l = \l, \Delta = \MyDelta$};
\end{scope}
\end{tikzpicture}
\end{document}

答案2

就是图个好玩儿:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric}
\begin{document}
\begin{tikzpicture}
\def\qadist{3cm}
\def\qbshift{1cm}
\pgfmathsetmacro{\myheight}{\qadist/sin(60)}
\tikzset{equilatri/.style={regular polygon,regular polygon sides=3,
                           draw, anchor=corner 2,minimum height=\myheight
                           }
         }
\node[equilatri] (a) {};
\node[equilatri] at ([shift={(60:\qbshift)}]a.corner 2) (b) {};
\node[equilatri] at ([shift={(120:\qbshift)}]a.corner 2) (c) {};
\end{tikzpicture}
\end{document}

在此处输入图片描述

输出相同,但更紧凑一些

\begin{tikzpicture}
\def\l{3}
\def\d{1}
\draw (0,0) -- (60:\l+\d) -- ++(-60:\l) -- ++({-(\l+\d)},0) -- ++(60:\l) -- ++(-60:\l+\d) -- cycle;
\end{tikzpicture}

答案3

还有其他几种方法可以计算坐标。可以在没有定义变量的情况下进行计算。为了获得最终的图片,我更喜欢避免使用节点,因为如果混合绘图和文本,则很难缩放整个图片。唯一的问题是命名图片中使用的点。

A)第一个想法:我们创建一个宏来构建一个等边三角形。第二个参数用于放置新三角形。它是\Delta一个角度。第一个参数是边的长度。所有坐标都是 a、b 和 c。我过去常常\pgfnodealias重命名坐标。

\documentclass{article}
\usepackage{tikz}

\newcommand\equi[2]{%
     \begin{scope}[shift={(#2)}]  
         \draw (0,0)   coordinate (a)
                    -- (0:#1)  coordinate (b) 
                    -- (60:#1) coordinate (c)--cycle; 
     \end{scope}
} 

\begin{tikzpicture}
\equi{6}{0:0}  \node[below] at (a){a} ; 
\equi{6}{60:2}
\pgfnodealias{e}{a} 
 \node[below right] at (e){e} ;  
\equi{6}{120:2}
\end{tikzpicture}

\end{document} 

B) 它类似于 percusse 的解决方案,但我使用宏。

\documentclass{article}
\usepackage{tikz}

 \newcommand\equilatri[2]{%
    \draw (0,0) -- (60:#1+#2)
                -- ++(-60:#1) 
                -- ++(0:-#1-#2)
                -- ++(60:#1)
                -- ++(-60:#1+#2)  
                --  cycle;
   \node [below] at (0:#1/2) {$l = #1, \Delta = #2$}; 
        } 

\begin{document}
\begin{tikzpicture}

\begin{scope}[thick,red]
\equilatri{4}{2}
\end{scope}
\begin{scope}[thick,xshift=6cm,blue]
\equilatri{6}{1}
\end{scope}
\end{tikzpicture} 

\end{document}

在此处输入图片描述

相关内容