我正在为单位圆和特殊三角形创建工作表。很容易列出这些角度,然后随机打印其中一个角度,每次打印任意次数。该代码如下。
但这实际上保证了某些角度的重复。如果我想要一个随机排列,使得每个项目都被选择一次,该怎么办?
我在 TeX.StackExchange 上读过一些关于排列的其他帖子,但那里的答案似乎都非常复杂。我希望现在也许有一个更简单的解决方案。:-)
\documentclass{article}
\usepackage{pgf}
\usepackage{pgffor}
\pgfmathdeclarerandomlist{UnitCircleAngles}
{
{0}{90}{180}{270}{360}
{45}{135}{225}{315}
{30}{60}{120}{150}{210}{240}{300}{330}
}
\begin{document}
\section*{Unit Circle Diagrams}
Draw a diagram of the angle in standard position for each of the following.
\foreach \x in {1,...,16}
{\pgfmathrandomitem{\TheAngle}{UnitCircleAngles}%
\xdef\TheAngle{\TheAngle}%
\noindent \TheAngle%
\vspace{0.25cm}%
}
\end{document}
答案1
一个非常粗糙但简洁的 push/pop 模拟器,使用逗号分隔xstring
\documentclass{article}
\usepackage{tikz,xstring}
\def\myshuffle{}
\def\UnitCircleAngles{{0}{90}{180}{270}{360}{45}{135}{225}{315}%
{30}{60}{120}{150}{210}{240}{300}{330}}
\pgfmathdeclarerandomlist{UnitCircleAngles}{\UnitCircleAngles}
\begin{document}
% Shuffle list
\foreach\x in{1,...,17}{
\pgfmathrandomitem{\myang}{UnitCircleAngles} % Pick one from that list
\xdef\myshuffle{\myshuffle\ifnum\x>1,\fi\myang} % place in the new list
\StrSubstitute{\UnitCircleAngles}{{\myang}}{}[\sublist] % Delete that entry
\global\let\UnitCircleAngles\sublist % Update the main list
\pgfmathdeclarerandomlist{UnitCircleAngles}{\UnitCircleAngles} % Redefine the list
}
\myshuffle
\end{document}
答案2
Sagemath,现在计算公式,使用该sagetex
软件包可以轻松实现这一点。作为计算机代数系统,Sage 内置了许多数学命令。它还可以计算答案。
\documentclass{article}
\usepackage{sagetex}
\begin{document}
\begin{sagesilent}
a=Permutations([0,90,180,270,360,45,135,225,315,30,60,120,150,210,240,300,330]).random_element()
\end{sagesilent}
\noindent A random permutation of a set of your set of $\sage{len(a)}$ angles is:\\
$\sage{a}$.\\\\
Question $1$: What is $\sin(\sage{a[0]}^{\circ})$?\\
Question $2$: What is $\cos(\sage{a[1]}^{\circ})$?\\\\
Answer to Question $1$ is $\sage{sin(a[0]*pi/180)}$.\\
Answer to Question $2$ is $\sage{cos(a[1]*pi/180)}$.\\
\end{document}
关于排列的文档是这里。编辑:如果您感兴趣的话,还有更多详细信息。知道 Sage 可以进行排列,我在网站上搜索了排列,找到了上面链接的文档。它告诉我命令 a 并给出了示例输出,类似于 [2,3,1]。这就是 Python 中所谓的列表,在其他语言中基本上是一个数组。如果我将排列命令输入 Sage,您可以尝试使用 Sage Cell Server这里它会返回一个列表。该列表存储在变量 a 中。1 命令是在sagesilent
环境中完成的,因此它在后台。将结果导入 LaTeX 的方法是使用 \sage 表示数字或 \sagestr 表示字符串。命令 \sage{len(a)} 告诉 Sage 确定列表中有多少个元素,由于它是数值数据,因此它排版在美元符号之间。命令 \sage{a} 打印出列表。现在 Python 将 k 个元素的列表称为第 0、1、...(k-1) 个位置。因此 \sage{a[0]} 抓取我的随机排列中的第一个元素,并且 \sage{a1} 抓取第二个元素。最后,我们让 Sage 计算答案,从而将出错的可能性降到最低。这是通过 \sage{sin(a[0]*pi/180)} 完成的,因为 Sage 假设角度以弧度表示。现在 Sage 计算列表中第一个角度的正弦并将其插入到文档中。不需要深入的知识,只需要一些反复出现的基本技能。