如何绘制中心有一个点的直角符号(正方形)?

如何绘制中心有一个点的直角符号(正方形)?

我正在尝试重现下面的图片。

直角,中间有点

我已经搜索过了,但是我没有找到以中心点为标记的符号,而且我不得不多次重复这个符号。

编辑:这是我到目前为止得到的

\begin{tikzpicture}
\coordinate (A) at (0,0);
\coordinate (B) at (4,0);
\coordinate (C) at (0,3);
\coordinate (D) at ($(C)!(A)!(B)$);
\draw (A)node[below left]{$A$}--(B)node[below right]{$B$}--(C)node[above left]{$C$}--cycle;
\draw[dashed] (A)--(D)node[above right]{$D$};
%I didn't tried the right angle because of the dot
\end{tikzpicture}

EDIT2:在巴西,我们用这个符号来表示直角,而不是空心矩形

答案1

您可以定义自己的角度\dotMarkRightAngle,如下所示。需要输入四个参数:角度(正方形边)的大小以及三个括号中的顺时针坐标(#2,#3,#4)

\documentclass[tikz,border=2pt]{standalone}
\usetikzlibrary{calc}
\begin{document}

\def\dotMarkRightAngle[size=#1](#2,#3,#4){%
 \draw ($(#3)!#1!(#2)$) -- 
       ($($(#3)!#1!(#2)$)!#1!90:(#2)$) --
       ($(#3)!#1!(#4)$);
 \path (#3) --node[circle,fill,inner sep=.5pt]{} ($($(#3)!#1!(#2)$)!#1!90:(#2)$);
}
\begin{tikzpicture}
\coordinate (A) at (0,0);
\coordinate (B) at (4,0);
\coordinate (C) at (0,3);
\coordinate (D) at ($(C)!(A)!(B)$);
\draw (A)node[below left]{$A$}--(B)node[below right]{$B$}--(C)node[above left]{$C$}--cycle;
\draw[dashed] (A)--(D)node[above right]{$D$};
\dotMarkRightAngle[size=6pt](B,A,C);
\dotMarkRightAngle[size=6pt](A,D,B);
\end{tikzpicture}

\end{document}

在此处输入图片描述

此外,与tkz-euclide和使用\tkzMarkRightAngle\tkzLabelAngle

\documentclass[border=2pt]{standalone}
\usepackage{tkz-euclide}
\usetkzobj{all}
\begin{document}

\begin{tikzpicture}
\coordinate (A) at (0,0);
\coordinate (B) at (4,0);
\coordinate (C) at (0,3);
\coordinate (D) at ($(C)!(A)!(B)$);
\draw (A)node[below left]{$A$}--(B)node[below right]{$B$}--(C)node[above left]{$C$}--cycle;
\draw[dashed,draw=gray] (A)--(D)node[above right]{$D$};

\tkzMarkRightAngle(C,A,B)
\tkzLabelAngle[pos=.15](C,A,B){$\cdot$}

\tkzMarkRightAngle(A,D,B)
\tkzLabelAngle[pos=.15](A,D,B){$\cdot$}

\end{tikzpicture}

\end{document}

在此处输入图片描述

答案2

在此处输入图片描述

纯 tikz:

\documentclass[tikz,
               border=3mm,
               ]{standalone}
\usetikzlibrary{calc, positioning}

\begin{document}
    \begin{tikzpicture}[
dotbox/.style = {draw, minimum size=3mm,
                 inner sep=0pt, outer sep=0pt,
                 anchor=#1,
                 label=center:$\cdot$},
node distance = 0pt
                    ]
\coordinate[label=below  left:$A$] (A) at (0,0);
\coordinate[label=below right:$B$] (B) at (4,0);
\coordinate[label=above  left:$C$] (C) at (0,3);
\coordinate[label=above right:$D$] (D) at ($(C)!(A)!(B)$);
\draw (A) --(B) --(C) -- cycle;
\draw[dashed] (A)--(D);
% angles
\node[dotbox=south west] at (A) {} ;
\path (D) -- node[pos=0,sloped,dotbox=north east] {} (A);
    \end{tikzpicture}
\end{document}

答案3

现在说这个有点晚了 ;-) 但如果有人感兴趣的话,这里有一种用 MetaPost 制作直角符号的方法(里面有所需的点),很大程度上受到了 André Heck 在他的MetaPost 教程,第 47-48 页。

请注意,turningnumber路径的(如果是逆时针则为 1,否则为 -1)确保端点endofaendofb给出的顺序无关紧要:标记将相同。此外,点 D 的坐标没有明确给出,而是由 MetaPost 本身通过两个隐式线性方程计算得出的。

得益于该luamplib软件包,它已包含在 LuaLaTeX 程序中。

\RequirePackage{luatex85}
\documentclass[border=3mm]{standalone}
\usepackage{luamplib}
\begin{document}
\begin{mplibcode}
    vardef mark_right_angle (expr common, endofa, endofb, mark_size) =
        save tn ; tn := turningnumber(common -- endofa -- endofb -- cycle) ;
        save t; transform t; 
        t = identity 
            zscaled (mark_size*unitvector((1+tn)*endofa + (1-tn)*endofb - 2*common)) 
            shifted common;
        z1 = (1, 0); z2 = (1, 1); z3 = (0, 1);
        save rangle; path rangle; 
        rangle = (origin -- z1 -- z2 -- z3 -- cycle) transformed t; 
        draw (z1 -- z2 -- z3) transformed t;
        drawdot center rangle withpen pencircle scaled 2bp;
    enddef ;
    beginfig(1);
        u = cm; pair A, B, C, D;
        mark_size := 2mm;
        A = origin; B = (4u, 0); C = (0, 3u);
        D = whatever[B,C]; (D-A) dotprod (B-C) = 0;
        label.lft(btex $A$ etex, A); label.rt(btex $B$ etex, B);
        label.lft(btex $C$ etex, C); label.urt(btex $D$ etex, D);
        draw A--B--C--cycle; draw A -- D dashed evenly;
        mark_right_angle(D, A, B, mark_size); 
        mark_right_angle(A, B, C, mark_size);
    endfig;
\end{mplibcode}
\end{document}

在此处输入图片描述

答案4

使用 tkz-elements 和 tkz-euclide。对于角度,我使用了德语符号。您的符号不太合逻辑,因为通常的符号已经表明该角度是直角。

% !TEX TS-program = lualatex
\documentclass[border=2pt]{standalone}
\usepackage{tkz-euclide,tkz-elements}
\begin{document}    
\begin{tkzelements}
   z.A      = point : new ( 0 , 0 )
   z.B      = point : new ( 4 , 0 )  
   z.C      = z.A   : north (3)
   L.BC     = line  : new ( z.B , z.C )
   z.D      = L.BC  : projection (z.A)
\end{tkzelements}

\begin{tikzpicture}
\tkzGetNodes
\tkzDrawPolygon(A,B,C)
\tkzDrawSegment[dashed,gray](A,D)
\tkzMarkRightAngle(C,A,B)
\tkzLabelAngle[pos=.15](B,A,C){$\cdot$}
%\tkzMarkRightAngle(A,D,B)
\tkzMarkRightAngle[german](A,D,B)
%\tkzLabelAngle[pos=.15](A,D,B){$\cdot$}
\tkzLabelPoints[below left](A)
\tkzLabelPoints[above left](C)
\tkzLabelPoints[below right](B)
\tkzLabelPoints[above right](D)
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容