我编写了一个代码,用来tkz-euclide
随机选择一个圆上的一个点并从那里开始工作,正如你在我的问题中看到的那样如何控制 tikz-euclide 中的标签位置我已经看到了几个关于随机选择点的问题,TikZ
例如从圆外一点到圆的切线(tikz)和提取 TikZ 中任意点的 x,y 坐标。我知道这并不容易。但我们该如何只用 来做到这一点TikZ
?
编辑如果我的问题不太清楚,我很抱歉。我正在寻找一种使用常用TikZ
命令(可能结合一些 TeX/LaTeX 宏)编写的解决方案,它可以像下面这样随机选择圆上的一个点\tkzGetRandPointOn
。
答案1
这是一个非常简单的答案。
\documentclass[margin=5mm]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\coordinate (center) at (1,2);
\def\radius{2.5cm}
% a circle
\draw (center) circle[radius=\radius];
% a random point of the circle
\fill[red] (center) ++(rand*180:\radius) circle[radius=2pt];
\end{tikzpicture}
\end{document}
更详细地阐述同样的想法:
\documentclass[margin=5mm]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
% choose a seed for pseudo-random generator
\pgfmathsetseed{\pdfuniformdeviate 10000000}
% define a circle (center=O and \radius)
\coordinate (O) at (1,2);
\def\radius{2.5cm}
% draw this circle and its center
\draw (O) circle[radius=\radius];
\fill (O) circle[radius=2pt] node[below left] {O};
% define a random point (A) on this circle
\pgfmathsetmacro{\angleA}{rand*180}
\path (O) ++(\angleA:\radius) coordinate (A);
% draw (A) with a label
\fill[red] (A) circle[radius=2pt] ++(\angleA:1em) node {A};
\end{tikzpicture}
\end{document}
要生成 -180 到 180 之间的伪随机数,可以使用以下表达式之一:
rand*180
(我的解决方案)rdn*360-180
(源自 Andrew Stacey 的评论)random(-180,180)
(仅限整数值!)
伪随机数生成器的默认种子是\time
× \year
。因此,它每分钟都会变化。要选择更频繁变化的种子,请使用以下命令:
\pgfmathsetseed{\pdfuniformdeviate 10000000}
答案2
请注意,这不是 TikZ 解决方案,并且不能保证没有重复的点。
案例 1(三个固定,一个随机)
\documentclass[pstricks,border=15pt]{standalone}
\usepackage{pst-eucl}
\pstVerb
{
/randval {rand 36000 mod 100 div} def % random number from 0.00 to 359.99
}
\begin{document}
\psLoop{30}{%
\begin{pspicture}[showgrid=false](-2,-2)(2,2)
\pnode(0,0){O}
\pstGeonode[CurveType=polygon,linejoin=2]
(2,0){A}
(2;30){B}
(2;70){C}
(!2 randval PtoC){D}
\pstCircleOA{O}{A}
\end{pspicture}}
\end{document}
案例 2(全部随机)
\documentclass[pstricks,border=15pt]{standalone}
\usepackage{pst-eucl}
\pstVerb
{
/randval {rand 36000 mod 100 div} def % random number from 0.00 to 359.99
}
\begin{document}
\psLoop{30}{%
\begin{pspicture}[showgrid=false](-2,-2)(2,2)
\pnode(0,0){O}
\pstGeonode[CurveType=polygon,linejoin=2]
(!2 randval PtoC){A}
(!2 randval PtoC){B}
(!2 randval PtoC){C}
(!2 randval PtoC){D}
\pstCircleOA{O}{A}
\end{pspicture}}
\end{document}