下面的几何计算缺少什么?

下面的几何计算缺少什么?

目标是将标签的基线与角平分线对齐。我想总结以下 4 种可能的技巧。如果还有其他超出我考虑范围的技巧,请告诉我。

第一招:

在这里我使用\rput{(B)}(0,0){\mylabel}并且目标完成得很好。

在此处输入图片描述

\documentclass[pstricks,border=3pt,multi,12pt]{standalone}
\usepackage{pst-eucl}
\psset
{
    saveNodeCoors,
    CurveType=polyline,
    PointName=none,
    PointSymbol=none,
    MarkAngleRadius=1.6,
    LabelSep=1,
}

\newcommand{\mylabel}{$\scriptscriptstyle180^\circ-\theta$}

\begin{document}

\begin{pspicture}(6,6)
    \pstGeonode(1,1){A}(5,5){B}(4,1){C}
    \pstMarkAngle{A}{B}{C}{\rput{(B)}(0,0){\mylabel}}
    \rput(3,5.5){\tiny rput\{(B)\}}
\end{pspicture}

\end{document}

第二招:

我使用\rput{!\psGetNodeCenter{B} B.y B.x atan}(0,0){\mylabel}并且目的也做得很好。

在此处输入图片描述

\documentclass[pstricks,border=3pt,multi,12pt]{standalone}
\usepackage{pst-eucl}
\psset
{
    saveNodeCoors,
    CurveType=polyline,
    PointName=none,
    PointSymbol=none,
    MarkAngleRadius=1.6,
    LabelSep=1,
}

\newcommand{\mylabel}{$\scriptscriptstyle180^\circ-\theta$}

\begin{document}

\begin{pspicture}(6,6)
    \pstGeonode(1,1){A}(5,5){B}(4,1){C}
    \pstMarkAngle{A}{B}{C}{\rput{!\psGetNodeCenter{B} B.y B.x atan}(0,0){\mylabel}}
    \rput(3,5.5){\tiny rput\{!psGetNodeCenter\{B\} B.y B.x atan\}}
\end{pspicture}

\end{document}

第三招:

我使用节点的数值文字B\rput{!5 5 atan}(0,0){\mylabel}但失败了。

在此处输入图片描述

\documentclass[pstricks,border=3pt,multi,12pt]{standalone}
\usepackage{pst-eucl}
\psset
{
    saveNodeCoors,
    CurveType=polyline,
    PointName=none,
    PointSymbol=none,
    MarkAngleRadius=1.6,
    LabelSep=1,
}

\newcommand{\mylabel}{$\scriptscriptstyle180^\circ-\theta$}

\begin{document}

\begin{pspicture}(6,6)
    \pstGeonode(1,1){A}(5,5){B}(4,1){C}
    \pstMarkAngle{A}{B}{C}{\rput{!5 5 atan}(0,0){\mylabel}}
    \rput(3,5.5){\tiny rput\{!5 5 atan\}}
\end{pspicture}

\end{document}

第四招:

我使用已保存的节点坐标B\rput{!N-B.y N-B.x atan}(0,0){\mylabel}但失败了。

在此处输入图片描述

\documentclass[pstricks,border=3pt,multi,12pt]{standalone}
\usepackage{pst-eucl}
\psset
{
    saveNodeCoors,
    CurveType=polyline,
    PointName=none,
    PointSymbol=none,
    MarkAngleRadius=1.6,
    LabelSep=1,
}

\newcommand{\mylabel}{$\scriptscriptstyle180^\circ-\theta$}

\begin{document}

\begin{pspicture}(6,6)
    \pstGeonode(1,1){A}(5,5){B}(4,1){C}
    \pstMarkAngle{A}{B}{C}{\rput{!N-B.y N-B.x atan}(0,0){\mylabel}}
    \rput(3,5.5){\tiny rput\{!N-B.y N-B.x atan\}}
\end{pspicture}

\end{document}

问题:

\rput赫伯特曾说过,在处理和时,我必须考虑逆变换\psGetNodeCenter。我忘记了确切的说法和链接。

简而言之,对于第 3 和第 4 个技巧,我的 PostScript 表达缺少什么?

答案1

(0,0)在这两种情况下,您仅计算相对于B(或)的角度(5,5)为 45 度。这就是角度标记与 45 度线段 AB 一起亮起的原因。以下是正确实施选项 #3 和 #4 的方法:

第三招:

在此处输入图片描述

\documentclass[pstricks,border=3pt,multi,12pt]{standalone}
\usepackage{pst-eucl}% http://ctan.org/pkg/pst-eucl
\psset
{
    saveNodeCoors,
    CurveType=polyline,
    PointName=none,
    PointSymbol=none,
    MarkAngleRadius=1.6,
    LabelSep=1,
}

\newcommand{\mylabel}{$\scriptscriptstyle180^\circ-\theta$}

\begin{document}

\begin{pspicture}(6,6)
    \pstGeonode(1,1){A}(5,5){B}(4,1){C}
    \pstMarkAngle{A}{B}{C}{\rput{!5 5 atan 5 1 sub 5 4 sub atan add 2 div}(0,0){\mylabel}}
    \rput(3,5.5){\tiny rput\{!5 5 atan\}}
\end{pspicture}

\end{document}

第四招:

在此处输入图片描述

\documentclass[pstricks,border=3pt,multi,12pt]{standalone}
\usepackage{pst-eucl}% http://ctan.org/pkg/pst-eucl
\psset
{
    saveNodeCoors,
    CurveType=polyline,
    PointName=none,
    PointSymbol=none,
    MarkAngleRadius=1.6,
    LabelSep=1,
}

\newcommand{\mylabel}{$\scriptscriptstyle180^\circ-\theta$}

\begin{document}

\begin{pspicture}(6,6)
    \pstGeonode(1,1){A}(5,5){B}(4,1){C}
    \pstMarkAngle{A}{B}{C}{\rput{!N-B.y N-B.x atan N-B.y N-C.y sub N-B.x N-C.x sub atan add 2 div}(0,0){\mylabel}}
    \rput(3,5.5){\tiny rput\{!N-B.y N-B.x atan\}}
\end{pspicture}

\end{document}

本质上,这两种方法都是计算两条线段 AB 和 CB 之间的平均角度:

  • 线段 AB (相对于原点(0,0))的夹角为 45 度(或5 5 atan);
  • 线段 BC (相对于原点(0,0))的角为 arctan (5-1)/(5-4) = arctan 4/1 (或4 1 arctan)。

方法四采用更符号化的方法,即保存节点坐标。 两种方法 和 都是用线段AB和BC之间的两个角度的平均值,因此使用add 2 div

相关内容