TikZ:\pgfmathresult 里面的问题(:\pgfmathresult) 坐标

TikZ:\pgfmathresult 里面的问题(:\pgfmathresult) 坐标

看完之后这个帖子,我正在尝试制作一个命令来创建一个具有两个输入的 TikZ 命令,如下所示:

\documentclass[10pt,a4paper]{article}

\usepackage{tikz}
\usetikzlibrary{calc}

\begin{document}
\centering

\newcommand{\mitsubishi}[2]{
% #1 = radius
% #2 = position x,y
\pgfmathparse{2.966/7}
\pgfmathparse{#1*\pgfmathresult}

\filldraw (#2) circle(#1 cm); % plate

\foreach \angle in {0,120,240}{
\filldraw[white,rotate=\angle] (#2)--++(60:\pgfmathresult)--++(120:\pgfmathresult)--++(-120:\pgfmathresult)--cycle;
}
}

\begin{tikzpicture}
\mitsubishi{2}{0,0}
\end{tikzpicture}
\end{document}

\pgfmathresult但是我对命令中的命令有疑问\filldraw

为什么?

答案1

\pgfmathresult被绘图命令覆盖。您必须将其保存起来:

\pgfmathparse{2.966/7}
\let\myresult\pgfmathresult
\pgfmathparse{#1*\myresult}
\let\myresult\pgfmathresult

\filldraw (#2) circle(#1 cm); % plate

\foreach \angle in {0,120,240}{
\filldraw[white,rotate=\angle] (#2)--++(60:\myresult)--++(120:\myresult)--++(-120:\myresult)--cycle;
}
}

答案2

如果我放置一个不同的中心点,比如说 (1,1),就会出现问题,因为旋转不是围绕该点进行,而是围绕 (0,0) 进行,所以我建议使用这个最终解决方案:

\documentclass[10pt,a4paper]{article}
\usepackage{tikz}
\usetikzlibrary{calc}

\begin{document}

\newcommand{\mitsubishi}[2]{
% #1 = radius
% #2 = position x,y
\pgfmathsetmacro{\mymathresult}{#1*2.966/7}   

\filldraw (#2) circle(#1 cm); 
\foreach \angle in {0,120,240}{
\filldraw[white] (#2)--++(60+\angle:\mymathresult)
                     --++(120+\angle:\mymathresult)
                     --++(240+\angle:\mymathresult)
                     --cycle;
}
}

\begin{tikzpicture}
\draw[help lines,step=.5cm](0,0)grid(4,4);
\draw[<->] (5,0)--(0,0)--(0,5);

\foreach \x in {1,2,3,4}{
         \foreach \y in {1,2,3,4}{
         \mitsubishi{.25}{\x,\y}
         }
}

\end{tikzpicture}

\end{document}

感谢大家让我取得这个成绩!!!

再见

答案3

您还可以使用\pgfmathsetmacro

\documentclass[10pt,a4paper]{article}
\usepackage{tikz}
\usetikzlibrary{calc}

\begin{document}

\newcommand{\mitsubishi}[2]{
% #1 = radius
% #2 = position x,y
\pgfmathsetmacro{\mymathresult}{#1*2.966/7}   

\filldraw (#2) circle(#1 cm); 
\foreach \angle in {0,120,240}{
\filldraw[white,rotate=\angle] (#2)--++(60:\mymathresult)--++(120:\mymathresult)--++(-120:\mymathresult)--cycle;
}
}

\begin{tikzpicture}
\mitsubishi{4}{0,0}
\end{tikzpicture}

\end{document} 

相关内容