尝试制作矢量螺旋(旋转箭头作为 x 位置的函数)时,我偶然发现了 tikz 可以制作正确的循环。关于其他循环解决方案,我在将更复杂的函数应用于循环参数来计算矢量的角度时遇到了问题(下面的示例仅使用sin
和,cos
但我使用的是atan
等)。在下一步中,我想根据参数为箭头着色。我的中间解决方案来自这里。我实际上想要的是使用循环参数的一些复杂函数来定义 rgb-color。作为一个不起作用的示例,如下所示
%NON WORKING "WISHLIST"
\foreach \x in {-15,...,15} {
\pgfmathsetmacro\myRed{\x + 0.5*sin(\x)}
\pgfmathsetmacro\myGreen{\x - 0.5*cos(\x)}
\pgfmathsetmacro\myBlue{\x - 0.5*atan(\x)}
\newrgbcolor{varCol}{\myRed \myGreen \myBlue}
\psline[linecolor=varCol]{->}(\xx,0)(0,\xx)
}
我研究了更复杂的例子,例如这个,但我不知道如何将其应用于我的问题。有没有办法实现上述不起作用的代码的想法,以便在下面的工作示例中运行?
(MikTeX 2.9(32 位)便携版,Win7 64 位)
%NOT SATISFYING WORKAROUND FOR THE MOMENT
\documentclass[]{scrartcl}%{article}
%\usepackage[usenames]{color}
\usepackage{xcolor}
\usepackage{tikz}
\usepackage{pstricks}
\pagestyle{empty}
\begin{document}
\begin{center}
\begin{pspicture}(-8,0)(8.0,10)
\foreach \x in {-15,...,15} {
\pgfmathsetmacro\angle{\x*\x*\x/125 * 25.01}
\pgfmathsetmacro\xx{\x + 0.5*sin(\angle)}
\pgfmathsetmacro\XX{\x - 0.5*sin(\angle)}
\pgfmathsetmacro\yy{6+0.5*cos(\angle)}
\pgfmathsetmacro\YY{6-0.5*cos(\angle)}
%\pgfmathsetmacro\myRed{0.5-0.1*cos(\angle)}
%\newrgbcolor{rgb}{varCol}{0,.5,0}
%\newrgbcolor{varCol}{.1 \myRed 0}
%\definecolor{\abcdefg}{rgb}{.2,.3,.4}
\pgfmathsetmacro\myMix{50-50*sin(\angle)}
\psline[linecolor={red!\myMix!green}, linewidth=2pt]{->}(\xx,\yy)(\XX,\YY)
}
\end{pspicture}
\end{center}
\end{document}
答案1
使用 PSTricks 中的坐标代数选项:
\documentclass[pstricks]{standalone}
\usepackage{pstricks}
\begin{document}
\begin{pspicture}(-16,5)(8.0,7)
\pgfforeach \x in {-15,...,15} {%
\pgfmathsetmacro\angle{\x*\x*\x/125 * 25.01}
\pgfmathsetmacro\myMix{50-50*sin(\angle)}
\psline[linecolor={red!\myMix!green}, linewidth=2pt]{->}%
(+{\x+sin(\angle)/2, 6+cos(\angle)/2})%
(+{\x-sin(\angle)/2, 6-cos(\angle)/2})
}
\end{pspicture}
\end{document}
答案2
感谢 Herbert 的回答,我对这个问题进行了更多的思考。由于他在 PSTricks 的代数选项中使用了括号,我在颜色定义中尝试了这些括号。现在这个方法有效了。
\documentclass[]{scrartcl}
\usepackage{xcolor}
\usepackage{tikz}
\usepackage{pstricks}
\pagestyle{empty}
\begin{document}
\begin{center}
\begin{pspicture}(-8,0)(8.0,10)
\foreach \x in {-9,...,9} {
\pgfmathsetmacro\angle{\x*\x*\x/125 * 25.01}
\pgfmathsetmacro\xx{.8*\x + 0.5*sin(\angle)}
\pgfmathsetmacro\XX{.8*\x - 0.5*sin(\angle)}
\pgfmathsetmacro\yy{6+0.5*cos(\angle)}
\pgfmathsetmacro\YY{6-0.5*cos(\angle)}
\pgfmathsetmacro\myRed{ (1 - cos(\angle/2-45 )^2 )^2 }
\pgfmathsetmacro\myGreen{ (1 - cos(\angle/2+45 )^2 )^2 }
\pgfmathsetmacro\myBlue{ (cos(\angle/2 )^2 )^2 }
\newrgbcolor{varCol}{{\myRed} {\myGreen} {\myBlue}}
\psline[linecolor=varCol, linewidth=2pt]{->}(\xx,\yy)(\XX,\YY)
}
\end{pspicture}
\end{center}
\end{document}
提供此输出
因此,唯一的技巧就是在里面的颜色名称上使用括号\newrgbcolor
。
还请注意,我在这里没有使用 PSTricks 中的代数坐标选项。当我尝试在相应的 PSTricks 函数的位置参数中计算坐标时,它首先给出了不同的结果。我认为,原因是 中的三角函数tikz
以度为单位,而 PSTricks 中代数坐标选项中的三角函数以辐射角为单位。当然,这是一个简单的改变,但我太懒了。