如何根据点绘制圆的一部分

如何根据点绘制圆的一部分

给定三个点 $v_1, v_2, v_3$ 和一个以 $v_1$ 为中心且 $v_2, v_3$ 位于其边界上的圆,我想删除不在 $v_2$ 和 $v_3$ 之间的圆的部分。如果知道相应的角度,我知道如何做到这一点(例如,在下面的代码中,我想获取圆在角度 0 和 90 之间的部分)。但我不知道如何计算非矩形设置。

\documentclass{article}
\usepackage{graphicx}
\usepackage{tikz}
\usetikzlibrary{calc}
\usetikzlibrary{arrows}
\usetikzlibrary{positioning}
\begin{document}
\begin{tikzpicture}
\path 
(0,0) coordinate (v1) node[below]{$v_1$}
(1,0) coordinate (v2) node[below]{$v_2$}
(0,1) coordinate (v3) node[below]{$v_3$};

\draw (v1)--(v2) (v1)--(v3);
    
\draw (v1) circle(1);
    
\foreach \p in {v1,v2,v3}
\fill (\p) circle(2pt);
\end{tikzpicture}
\end{document}

答案1

如果您知道角度,则可以使用arc命令:

\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\fill (0,0) coordinate[label=below:$v_1$] (v1) circle(2pt);
\fill (30:2cm) coordinate[label=right:$v_2$] (v2) circle(2pt);
\fill (95:2cm) coordinate[label=$v_3$] (v3) circle(2pt);

\draw (v3)--(v1)--(v2) arc[start angle=30, end angle=95, radius=2];
    
\end{tikzpicture}

\end{document}

在此处输入图片描述

如果您不知道角度,calc图书馆可以提供帮助:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}

\begin{document}
\foreach \i in {1,2,3}{
\begin{tikzpicture}
\fill (0,0) coordinate[label=below:$v_1$] (v1) circle(2pt);
\fill (360*rand:2cm) coordinate[label=right:$v_2$] (v2) circle(2pt);
\fill (360*rand:2cm) coordinate[label=$v_3$] (v3) circle(2pt);

\draw let \p1=($(v2)-(v1)$), \p2=($(v3)-(v1)$), \n1={veclen(\x1,\y1)}, \n2={atan2(\y1,\x1)},
\n3={atan2(\y2,\x2)} in (v3)--(v1)--(v2) arc[start angle=\n2, end angle=\n3, radius=\n1];
    
\end{tikzpicture}}

\end{document}

在此处输入图片描述

答案2

在您的特定情况下,从笛卡尔坐标到极坐标的变换非常简单。根据初等几何,我们知道:

(0,1) --> (90:1)
(1,0) --> (0:1)

考虑到上面的arc命令定义起来很简单。因此,您的 MWE 可以更改为:

\documentclass[margin=3mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{arrows.meta,
                calc,
                positioning}

\begin{document}
    \begin{tikzpicture}[
dot/.style = {circle, fill, inner sep=1pt,
              label=#1, node contents={}},
every label/.append style = {inner sep=2pt, font=\footnotesize}
                        ] 
\draw   (0,0) node[dot=below:$v_1$] -- 
        (0,1) node[dot=above:$v_2$] arc(90:0:1)
              node[dot=below:$v_3$] -- cycle;
    \end{tikzpicture}
\end{document}

在此处输入图片描述

在更一般的笛卡尔坐标系下,需要先用反三角函数计算起始角t和终止角。例如:

\alpha = acos{\frac{x}{x^2 + y^2}

其中xy是$x,y$平面上某一点的笛卡尔坐标。

答案3

您可以使用 来完成此操作\clip,尽管对于短弧(蓝色)来说比长弧(红色)要容易得多。

\documentclass{standalone}
\usepackage{graphicx}
\usepackage{tikz}
\usetikzlibrary{calc}
\usetikzlibrary{arrows}
\usetikzlibrary{positioning}
\begin{document}
\begin{tikzpicture}
\path 
(0,0) coordinate (v1) node[below]{$v_1$}
(1,0) coordinate (v2) node[below]{$v_2$}
(0,1) coordinate (v3) node[below]{$v_3$};

\draw (v1)--(v2) (v1)--(v3);

\begin{scope}
\clip (v2) rectangle (v3);
\draw[blue] (v1) circle(1);
\end{scope}

\begin{scope}[local bounding box=Bob]
\path (v1) circle(1);
\clip (Bob.north west)--(v3)--(v1)--(v2)--(Bob.south east)--
  (Bob.south west)--cycle;
\draw[red] (v1) circle(1);
\end{scope}
    
\foreach \p in {v1,v2,v3}
\fill (\p) circle(2pt);
\end{tikzpicture}
\end{document}

演示

相关内容