我正在尝试生成下图:
我发现很难按照图示的方式放置围绕中心圆的所有三角形。目前,我可以通过指定左、右等来放置 8 个三角形中的 4 个,但我不知道如何放置倾斜的三角形。我该如何完成此图?
答案1
这里有一些tikz
与您想要的类似的东西。
\documentclass{article}
\usepackage{tikz}
\pagestyle{empty}
\begin{document}
\begin{tikzpicture}[x=0.5cm,y=0.5cm]
\draw (5,0)
arc (0:360:5);
\foreach \angle in { 0,45,...,360 }{
\draw [rotate around={\angle:(0,0)}]
(5.5,0)
-- +(0,-1.5)
-- +(3,0)
-- +(0,1.5)
-- cycle;
}
\end{tikzpicture}
\end{document}
考虑到@Qrrbrbirlbel 的评论并添加颜色和加粗线条,你可以写:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\pagestyle{empty}
\begin{document}
\begin{tikzpicture}[x=0.5cm,y=0.5cm,line width=4pt,draw=yellow]
\draw (1,0) node[draw,circle,minimum size=5cm] (TheSun) {};
\foreach \angle in { 0,45,...,359 }
{
\draw [rotate around={\angle:(TheSun.center)}]
($(TheSun.center) + (5.5,0)$)
-- +(0,-1.5)
-- +(3,0)
-- +(0,1.5)
-- cycle;
}
\end{tikzpicture}
\end{document}
为你带来:
最后一种方法的好处是,你可以通过重写来轻松改变太阳的位置
\draw (1,0)
任意你想要的值,比如
\draw (3,-4)
其余一切都会随之而来。不过,如果您只绘制太阳,则此功能不会产生明显效果。
样式
您可以修改太阳各部分的样式,并且tikz
有一个非常漂亮的界面允许您执行此操作,例如以有意义的方式命名样式。在此示例中,我创建了两种样式:一种用于火焰,一种用于太阳主体。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\usetikzlibrary{shapes.geometric}
\tikzset{
sunflames/.style={
line width=1pt,
draw=red,
fill=yellow,
regular polygon,
regular polygon sides=3,
inner sep=0.35cm
},
sunbody/.style={
line width=2pt,
draw=red,
fill=yellow,
circle,
minimum size=5cm
}
}
\pagestyle{empty}
\begin{document}
\begin{tikzpicture}[x=0.5cm,y=0.5cm]
\draw (1,0) node[sunbody] (TheSun) {};
\foreach \angle in { 0,45,...,359 }
{
\draw [rotate around={\angle:(TheSun.center)}]
($(TheSun.center) + (7,0)$)
node[shape border rotate=\angle-90,sunflames] {};
}
\end{tikzpicture}
\end{document}
答案2
\documentclass[pstricks,border=12pt]{standalone}
\usepackage{multido}
\SpecialCoor
\begin{document}
\begin{pspicture}(-3,-3)(3,3)
\pscircle(0,0){2}
\multido{\i=0+45}{8}{\uput{5pt}[\i]{\i}(2;\i){\pspolygon(0,0.5)(0,-0.5)(1,0)}}
\end{pspicture}
\end{document}
如果你不喜欢\uput
,请\rput
按如下方式使用,
\documentclass[pstricks,border=12pt]{standalone}
\usepackage{multido}
\SpecialCoor
\begin{document}
\begin{pspicture}(-3,-3)(3,3)
\pscircle(0,0){2}
\multido{\i=0+45}{8}{\rput{\i}(!2 5 72.27 div 2.54 mul add \i\space PtoC){\pspolygon(0,0.5)(0,-0.5)(1,0)}}
\end{pspicture}
\end{document}
如果你不喜欢\pspolygon
,请\pstriangle
按如下方式使用,
\documentclass[pstricks,border=12pt]{standalone}
\usepackage{multido}
\SpecialCoor
\begin{document}
\begin{pspicture}(-3,-3)(3,3)
\pscircle(0,0){2}
\multido{\i=90+45}{8}{\rput{!\i\space 90 sub}(!2 5 72.27 div 2.54 mul add \i\space PtoC){\pstriangle[dimen=middle](0,0)(1,1)}}
\end{pspicture}
\end{document}
如果你只喜欢\pstriangle
和\uput
,请按如下方式使用它们,
\documentclass[pstricks,border=12pt]{standalone}
\usepackage{multido}
\SpecialCoor
\begin{document}
\begin{pspicture}(-3,-3)(3,3)
\pscircle(0,0){2}
\multido{\i=90+45}{8}{\uput{5pt}[\i]{!\i\space 90 sub}(2;\i){\pstriangle[dimen=middle](0,0)(1,1)}}
\end{pspicture}
\end{document}
笔记默认设置 (可更改),而 则设置\pstriangle
(不可更改)。遗憾的是,您无法更改,因此我将 更改为与相同。dimen=outer
\pspolygon
dimen=middle
dimen
\pspolygon
\pstriangle
dimen
middle
\pspolygon
dimen
您可以通过编译以下内容并交替查看来证明我上面的所有变体都会产生相同的输出。
\documentclass[pstricks,border=12pt,multi]{standalone}
\usepackage{multido}
\SpecialCoor
\psset{dimen=middle}
\begin{document}
\begin{pspicture}(-3,-3)(3,3)
\pscircle(0,0){2}
\multido{\i=0+45}{8}{\uput{5pt}[\i]{\i}(2;\i){\pspolygon(0,0.5)(0,-0.5)(1,0)}}
\end{pspicture}
\begin{pspicture}(-3,-3)(3,3)
\pscircle(0,0){2}
\multido{\i=90+45}{8}{\uput{5pt}[\i]{!\i\space 90 sub}(2;\i){\pstriangle(0,0)(1,1)}}
\end{pspicture}
\begin{pspicture}(-3,-3)(3,3)
\pscircle(0,0){2}
\multido{\i=0+45}{8}{\rput{\i}(!2 5 72.27 div 2.54 mul add \i\space PtoC){\pspolygon(0,0.5)(0,-0.5)(1,0)}}
\end{pspicture}
\begin{pspicture}(-3,-3)(3,3)
\pscircle(0,0){2}
\multido{\i=90+45}{8}{\rput{!\i\space 90 sub}(!2 5 72.27 div 2.54 mul add \i\space PtoC){\pstriangle(0,0)(1,1)}}
\end{pspicture}
\end{document}
动画版:
\documentclass[pstricks,border=15pt,multi]{standalone}
\usepackage{multido}
\SpecialCoor
\psset{linecolor=orange}
\begin{document}
\multido{\n=0.0+0.1}{6}{%
\begin{pspicture}(-3,-3)(3,3)
\pscircle*(0,0){1}
\multido{\i=0+45}{8}{\uput{5pt}[\i]{\i}(!1 \n\space 1.5 mul add \i\space PtoC){\pspolygon*(!0 0.25 \n\space add)(!0 -0.25 \n\space sub)(!0.5 \n\space2 mul add 0)}}
\end{pspicture}}
\end{document}