在TikZ中获取圆的任意点

在TikZ中获取圆的任意点

我编写了一个代码,用来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}

相关内容