我tikz
想画一个顶部和底部渐变的狭长矩形。这应该代表激光束。
我定义了一个tikz
淡入淡出效果,只要光束是水平的,它就可以正常工作。当我旋转矩形时,淡入淡出效果不会像以前一样产生光束。我尝试使用淡入淡出变换选项来旋转淡入淡出光束,但没有成功。因为我想在一张图片中绘制几个具有不同旋转的光束,所以我认为我应该避免使用画布变换。
这是我的示例代码:
\documentclass{minimal}
\usepackage{tikz}
\begin{document}
\usetikzlibrary{fadings}
\tikzfading[name=middle,
top color=transparent!100,
bottom color=transparent!100,
middle color=transparent!20]
\begin{tikzpicture}
\fill[path fading=middle, red] (0,0) rectangle (4,0.2);
\fill[rotate=-20, path fading=middle, red] (0,0) rectangle (4,0.2);
\fill[rotate=20, path fading=middle, fading transform={rotate=20}, red] (0,0) rectangle (4,0.2);
\end{tikzpicture}
\end{document}
如何才能获得旋转光束的正确衰落?
答案1
应用画布变换:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{fadings}
\tikzfading[name=middle,
top color=transparent!100,
bottom color=transparent!100,
middle color=transparent!20]
\begin{document}
\begin{tikzpicture}
\fill[path fading=middle, red] (0,0) rectangle (4,0.2);
\foreach \angle in {20,40,...,340}
\fill[transform canvas={rotate=-\angle},path fading=middle, red] (0,0) rectangle (4,0.2);
\end{tikzpicture}
\end{document}
作为保罗·加博利在评论中提到,画布变换需要非常小心;以下引述取自手册pgf
:
同样重要的是,当您使用画布变换时,
pgf
会丢失节点位置和图片大小的轨迹,因为它在计算节点坐标时没有考虑画布变换的影响(但是,您不依赖于此;它可能会在未来发生变化)。
答案2
淡入淡出效果将应用于路径的边界框。使用简单的rotate
,边界框始终与原始画布对齐。使用canvas transform
,您可以旋转路径和但您会失去边界框的自动计算。因此您必须使用两个操作:
简单地
rotate
使用您的路径而无需绘图来更新边界框。旋转
canvas transform
并淡入淡出绘制路径。
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{fadings}
\tikzfading[name=middle,
top color=transparent!100,
bottom color=transparent!100,
middle color=transparent!20]
\begin{document}
\begin{tikzpicture}
\fill[path fading=middle, red] (0,0) rectangle (4,0.2);
% update bounding box
\begin{scope}[rotate=45]
\path (0,-2) rectangle ++(4,.2);
\end{scope}
% draw with (canvas) rotated fading
\begin{scope}[transform canvas={rotate=45}]
\fill[path fading=middle,orange] (0,-2) rectangle ++(4,.2);
\end{scope}
\end{tikzpicture}
\end{document}