我正在尝试制作3D数字(伟大的十二面体,小星形十二面体),直到现在我才使用乳胶中的tikz包。使用\coordinate
和\draw
函数,我设法为这些模型生成精确的模板。
现在我没有制作多面体,而是只使用tikz为它添加花卉图案,因为我不擅长素描。
即将jpg图像(带有花卉图案)导入到使用tikz绘制的三角形中,以便为多面体制作模板,例如:
我知道如何在乳胶中导入图形以及如何使用tikz制作几何图案,但不知道如何" crop" jpg文件为三角形或其坐标在tikz中指定的任何其他多边形。
例如,以下是我用来制作一个包含10个三角形的表面的代码。
\documentclass{article}
\usepackage[usenames,dvipsnames]{xcolor}
\usepackage{tikz,ifthen}
\usetikzlibrary{calc,intersections,patterns}
\usepackage[paper=a4paper,dvips,top=.7cm,left=1.5cm,right=1.5cm, foot=1.2cm,bottom=1cm]{geometry}
\begin{document}
\pagestyle{empty}
\begin{tikzpicture}[scale=0.95,thin,rotate=0]
\coordinate (O) at (0cm,0cm);
\coordinate (A) at ($(O) + (36:3cm)$);
\coordinate (B) at ($(A) + (-36:3cm)$);
\coordinate (C) at ($(O) + (-36:3cm)$);
\coordinate (X) at ($(O) + (4.78mm,1.56mm)$);
\coordinate (Y) at ($(A) + (0mm,-1.9mm)$);
\coordinate (Z) at ($(B) + (-4.78mm,1.56mm)$);
\coordinate (X1) at ($(O) + (4.78mm,-1.56mm)$);
\coordinate (Y1) at ($(O) + (-36:3cm) + (0mm,1.9mm)$);
\coordinate (Z1) at ($(B) + (-4.78mm,-1.56mm)$);
\foreach \i in {0,72,...,360}{
\draw[gray, thin] let \p0=(O), \p1=(A), \p2=(B), \p3=(C) in
[rotate around={\i:(O)}] (\p2)--(\p1)--(\p0)--(\p2)--(\p3);
\draw[gray,thin,dashed] let \p1=(X), \p2=(Y), \p3=(Z) in
[rotate around={\i:(O)}] (\p1)--(\p2)--(\p3)--cycle;
\draw[gray,thin,dashed] let \p1=(X1), \p2=(Y1), \p3=(Z1) in
[rotate around={\i:(O)}] (\p1)--(\p2)--(\p3)--cycle;
}
\foreach \density in {20,30,...,160}{
\foreach \i in {0,72,...,360}{
\draw[fill=Magenta!\density] let \p1=(X), \p2=(Y), \p3=(Z) in
[rotate around={\i:(O)}] (\p1)--(\p2)--(\p3)--cycle;
}
\path
(X) coordinate (X1)
-- (Y) coordinate[pos=.15](X)
-- (Z) coordinate[pos=.15](Y)
-- (X1) coordinate[pos=.15](Z);
}
\end{tikzpicture}
\end{document}
问题在于图像中的图案也是由tex生成的,我想要的是任何花卉/非花卉图案(我选择)可以在三角形内部裁剪(三角形位于某个特定位置) tex图)。
非常感谢任何帮助。
感谢。
答案 0 :(得分:0)
阅读PGF Manual的第1062-1072页,我写了以下测试代码:
\documentclass[tikz,border=2mm]{standalone}
\begin{document}
\begin{tikzpicture}
\filldraw [red] (0,0) rectangle (4,2);
\pgftext {\pgfimage[interpolate=true,width=1cm,height=1cm]{sample}}
\pgftext[at=\pgfpoint{28mm}{0.8cm},left,base] {\pgfimage[interpolate=true,width=1cm,height=1cm]{sample}}
\end{tikzpicture}
\end{document}
在我使用上述代码保存.tex
文件的同一文件夹中,我还将this picture保存为sample.png
。这是tex编译输出的屏幕截图:
它显示了使用带有或不带属性\pgftext
和\pgfpoint
的{{1}}和28mm
命令定位png图形的效果。
请在评论中添加您的反馈,以便我们可以更深入地了解它。此外,将代码添加到问题中将有助于更精确!
<强>附录强>
以下是我将上述代码中的想法应用到您添加到问题中的代码的方法:
0.8cm
要包含外部文件中的图形,我选择了一个\documentclass{article}
\usepackage[usenames,dvipsnames]{xcolor}
\usepackage{tikz,ifthen}
\usetikzlibrary{calc,intersections,patterns}
\usepackage[paper=a4paper,dvips,top=.7cm,left=1.5cm,right=1.5cm, foot=1.2cm,bottom=1cm]{geometry}
\begin{document}
\pagestyle{empty}
\begin{tikzpicture}[scale=0.95,thin,rotate=0]
\coordinate (O) at (0cm,0cm);
\coordinate (A) at ($(O) + (36:3cm)$);
\coordinate (B) at ($(A) + (-36:3cm)$);
\coordinate (C) at ($(O) + (-36:3cm)$);
\coordinate (X) at ($(O) + (4.78mm,1.56mm)$);
\coordinate (Y) at ($(A) + (0mm,-1.9mm)$);
\coordinate (Z) at ($(B) + (-4.78mm,1.56mm)$);
\coordinate (X1) at ($(O) + (4.78mm,-1.56mm)$);
\coordinate (Y1) at ($(O) + (-36:3cm) + (0mm,1.9mm)$);
\coordinate (Z1) at ($(B) + (-4.78mm,-1.56mm)$);
\foreach \i in {0,72,...,360}{
\draw[gray, thin] let \p0=(O), \p1=(A), \p2=(B), \p3=(C) in
[rotate around={\i:(O)}] (\p2)--(\p1)--(\p0)--(\p2)--(\p3);
\draw[gray,thin,dashed] let \p1=(X), \p2=(Y), \p3=(Z) in
[rotate around={\i:(O)}] (\p1)--(\p2)--(\p3)--cycle;
\draw[gray,thin,dashed] let \p1=(X1), \p2=(Y1), \p3=(Z1) in
[rotate around={\i:(O)}] (\p1)--(\p2)--(\p3)--cycle;
}
\foreach \density in {20,30,...,160}{
\path
(X) coordinate (X1)
-- (Y) coordinate[pos=.15](X)
-- (Z) coordinate[pos=.15](Y)
-- (X1) coordinate[pos=.15](Z);
}
% including graphics from external file:
\foreach \i in {0,72,...,360}{
\pgftext[at=\pgfpoint{2cm*cos(\i)}{2cm*sin(\i)},left,base,rotate=\i]
{\pgfimage[interpolate=true,width=1cm,height=1cm]{sample}}
}
\end{tikzpicture}
\end{document}
循环,但仅仅是为了使用相同图像的五倍。关键点是该行:
\foreach
应该允许您使用\pgftext[at=\pgfpoint{2cm*cos(\i)}{2cm*sin(\i)},left,base,rotate=\i]
{\pgfimage[interpolate=true,width=1cm,height=1cm]{sample}}
,2cm*cos(\i)
,2cm*sin(\i)
,left
和base
属性定位外部图片。
您可以避免rotate=\i
循环并使用一个
\foreach
每个外部文件的。如果您可以为三角形图形生成透明背景图像,则可以享受此解决方案。
我的输出: