动机:用点阴影表示图表。点具有随机坐标。它们聚集在隐藏的用户输入坐标周围,具体位置或远或远取决于这些输入。
如何使用
\pgfmathsetseed{\pdfuniformdeviate ...}
(或使用不同的代码,如果 for 循环迭代时速度更快)来构造一个\graf{b,x}
返回随机的实数 z同一数量级(参数化 b)作为控制输入的实数 x?
因此,如果 0 ≤ x < b^1,则 0 ≤ z ≤ b^1,如果 b^1 ≤ x < b^2,则 b^1 ≤ z ≤ b^2,... 近似值足够准确。
希望\graf
能够定义成能够\graf{\B,{\X-\Y}}
正确扩展,即使\M{\graf{\B,{\X-\Y}}}
对于某些其他宏\M
,也不会阻止编译或必须编译两次。
答案1
不确定这是否是您所需要的,但我将数字的顺序计算为其底数的对数的下限b
,然后生成 0 和 1 之间的随机数并使用仿射变换重新缩放。
\documentclass{article}
\usepackage{tikz}
\newcommand{\graf}[2]{%
\pgfmathparse{floor(ln(#2)/ln(#1))}%
\pgfmathparse{#1^\pgfmathresult*(1+#1*rnd)}%
}
\newcommand{\showgraf}[2]{% to show
\graf{#1}{#2}\pgfmathresult\par
}
\begin{document}
\ttfamily
\showgraf{3}{23.3}
\showgraf{10}{23.3}
\showgraf{10}{323.3}
\showgraf{10}{2333.3}
\showgraf{1.2}{1}
\showgraf{1.2}{10}
\showgraf{1.2}{100}
\end{document}
这是一个完全可扩展的版本,应该也可用于坐标计算。但它不适用于 XeTeX。
\documentclass{article}
\usepackage{xparse}
\usepackage{luatex85} % if using LuaTeX
\ExplSyntaxOn
\DeclareExpandableDocumentCommand{\graf}{mm}
{
\guido_graf:fnn { \pdfuniformdeviate 1000000 } { #1 } { #2 }
}
\cs_new:Nn \guido_graf:nnn
{
\fp_eval:n
{
(#2**(floor(ln(#3)/ln(#2))))*(1+#2*(#1/1000000))
}
}
\cs_generate_variant:Nn \guido_graf:nnn { f }
\ExplSyntaxOff
\begin{document}
\ttfamily
\graf{3}{23.3}\par
\graf{10}{23.3}\par
\graf{10}{323.3}\par
\graf{10}{2333.3}\par
\graf{1.2}{1}\par
\graf{1.2}{10}\par
\graf{1.2}{100}\par
\end{document}