如何在具有角度约束的线上创建点?

如何在具有角度约束的线上创建点?

我想D在线上定义一个点 (节点) AC,使得 angleABC等于 angle CDE。如何使用 PSTricks 最简单的技巧来实现这一点?

\documentclass[pstricks,border=1cm]{standalone}
\usepackage{pst-eucl}

\begin{document}
\begin{pspicture}(8,-6)
    \pstTriangle(0,-6){B}(8,-6){A}(2,0){C}
    \pstMarkAngle{A}{B}{C}{}
    \pstGeonode[PosAngle=180]([nodesep=4]{B}C){E}
\end{pspicture}
\end{document}

在此处输入图片描述

答案1

直线 ED 与水平线之间的角度是 beta-alpha,这就是我们知道直线斜率的原因。

\documentclass[pstricks,border=1cm]{standalone}
\usepackage{pst-eucl}

\begin{document}
\begin{pspicture}(8,-6)
    \pstTriangle(0,-6){B}(8,-6){A}(2,0){C}
    \pstMarkAngle{A}{B}{C}{}
    \pstGeonode[PosAngle=180]([nodesep=4]{B}C){E}%
     (! \psGetNodeCenter{A} \psGetNodeCenter{B} 
      \psGetNodeCenter{C} \psGetNodeCenter{E}
      C.y A.y sub A.x C.x sub atan /Alpha ED
      C.y B.y sub C.x B.x sub atan /Beta ED
      Beta Alpha sub abs Tan E.y add E.x 1 add exch ){D'}
    \pstInterLL{C}{A}{E}{D'}{D}
    \pstLineAB[linecolor=red]{D}{E}
    \pstMarkAngle[linecolor=red]{C}{D}{E}{}
\end{pspicture}
\end{document}

在此处输入图片描述

答案2

不确定这是否是最简单的。但它确实有效。

\documentclass[pstricks,border=1cm]{standalone}
\usepackage{pst-eucl}

\begin{document}
\begin{pspicture}(8,-6)
    \pstTriangle(0,-6){B}(8,-6){A}(2,0){C}
    \pstMarkAngle{A}{B}{C}{}
    \pstGeonode[PosAngle=180]([nodesep=4]{B}C){E}
    \pstInterLC[PointSymbol=none,PointName=none]{C}{A}{C}{E}{G}{F}
    \pstTranslation[PointSymbol=none,PointName=none]{A}{B}{F}
    \pstInterLL[PointSymbol=none,PointName=none]{C}{B}{F}{F'}{D'}
    \pstInterLC{C}{A}{C}{D'}{G'}{D}
    \pstLineAB{D}{E}
    \pstMarkAngle{C}{D}{E}{}
    %\pstArcOAB[linecolor=blue]{C}{E}{A}
    %\pstLineAB{F}{F'}
    %\pstArcOAB[linecolor=blue]{C}{D'}{A}
\end{pspicture}
\end{document}

角度

要查看构造,只需删除三个[PointSymbol=none,PointName=none]并取消注释 中的最后三行pspicture

答案3

仅供比较,任何与pst-eucl语法和文档搏斗的人,可能都想尝试这种类型的东西元帖子,使用线性变量的优雅隐式定义。

在此处输入图片描述

\documentclass[border=5mm]{standalone}
\usepackage{luatex85}
\usepackage{luamplib}
\begin{document}
\mplibtextextlabel{enable}
\begin{mplibcode}

vardef angle_mark(expr a, b, c, r) = 
    fullcircle scaled 2r 
               rotated angle (a-b)
               shifted b 
               cutafter (b--c)
enddef;

beginfig(1);
    pair A, B, C, D, E;

    A = 6 right scaled 1cm;
    B = 2 left scaled 1cm;
    C = 6 up scaled 1cm;

    E = 1/5[B,C]; % or wherever you like along B--C....

    numeric a, b, d, e;
    a = abs(B-C);
    b = abs(C-A);
    d = abs(C-E);
    a/b = e/d;  % implicitly define "e"

    D = (e/b)[C,A]; % D is then e/b along C--A...

    label.ulft("$a$", 1/2[B,C]) withcolor 2/3 blue;
    label.urt ("$b$", 1/2[A,C]) withcolor 2/3 blue;
    label.lrt ("$d$", 1/2[C,E]) withcolor 2/3 blue;
    label.llft("$e$", 1/2[C,D]) withcolor 2/3 blue;

    draw angle_mark(A, B, C, 12) withcolor 2/3 red;
    draw angle_mark(C, D, E, 12) withcolor 2/3 red;

    draw A--B--C--cycle;
    draw D--E;

    dotlabel.lrt ("$A$", A);
    dotlabel.llft("$B$", B);
    dotlabel.top ("$C$", C);
    dotlabel.urt ("$D$", D);
    dotlabel.ulft("$E$", E);

endfig;
\end{mplibcode}
\end{document}

答案4

只是为了好玩:一个 TiZ 解决方案。请注意,tkz-euclide 包提供了与这些 pstricks 代码非常相似的语法。然而,这个答案的重点只是说在 TiZ 有 calc 语法,诚然,第一次看到它时会有点奇怪。但是,我想说的是,一旦熟悉了它,它就会比市场上的其他助手更强大、更通用。无需为每种目的定义一个新的复杂宏,calc允许以通用的方式处理所有这些事情。

\documentclass[tikz,border=3.14mm]{standalone}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\draw (0,-6) coordinate (B) -- (8,-6) coordinate (A) -- (2,0) coordinate (C)
-- cycle;
\draw let \p1=($(C)-(B)$),\p2=($(A)-(B)$),\n1={(atan2(\y1,\x1)+atan2(\y2,\x2))/2}
in (B)  ++ ({\n1}:4) coordinate (D)
(B) --  (intersection cs:first line={(A)--(C)}, second line={(B)--(D)});
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容