tikz \绘制顶点颜色或用相对角度坐标突出显示,并转换为直角坐标

tikz \绘制顶点颜色或用相对角度坐标突出显示,并转换为直角坐标

下面就是一个很好的例子。假设我想画一个类似 SSD 的盒子。八个点,不是通过网格坐标来识别,而是通过相对角度来识别。

\documentclass[border=3mm,12pt]{standalone}

\usepackage{tikz}
\usetikzlibrary{calc}

\begin{document}

\begin{tikzpicture}

  \draw[black, thick, fill=gray] (6.5em,7em) -- ++(30:3em) -- ++(-90:0.5em) -- ++(90:0.5em) -- ++(-30:2em)  --
  ++(-90:0.5em) -- ++(90:0.5em) -- ++(-150:3em)  -- ++(-90:0.5em) -- ++(90:0.5em)-- ++(150:2em) --
  ++(-90:0.5em) -- ++(30:3em) -- ++(-30:2em) -- ++(-150:3em) -- ++(150:2em) -- cycle;

  \draw[black] (7.2em,6.2em) -- ++(90:0.2em) -- ++(-30:0.4em) -- ++(-90:0.2em) -- cycle;

\end{tikzpicture}

\end{document}

在此处输入图片描述

现在我试图突出显示其中一个顶点,用红色表示,以提醒哪个是哪个,以帮助我将其形象化。对于这个简单的线框,这很容易。如果我有 100 个点,那就很难了。

这就是我想要的:

\draw (6.5,7em) -- ++(30:3em) -- ++[red](-90:0.5em) -- ++(90:0.5em);

我想智能解决的问题是 (1) 两个未着色的三角形,以及 (2) 隐藏的射线。所以我认为我需要将其重新编码为直角坐标。我希望我不必覆盖网格并从中读取点。tikz 可以输出其计算出的坐标吗,还是我需要编写程序?或者更好的是,还可以输出线的交叉点?

通用性比巧妙的专门解决方案更好。我之所以问这个问题,是因为我有几个这样的问题。非常感谢您的建议。

问候,

/iaw

答案1

我的解决方案是:

\documentclass[border=3mm,12pt]{standalone}
\usepackage{tikz}

\begin{document}

\begin{tikzpicture}
    \begin{scope}[black, thick, fill=gray, join=bevel]
        \path (6.5em,7em) coordinate (start);
        \filldraw (start) -- ++(30:3em) -- ++(90:0.5em) -- ++(-150:3em) -- cycle;
        \filldraw (start) -- ++(150:2em)  -- ++(90:0.5em) -- ++(-30:2em) -- cycle;
        \filldraw (start) ++(90:0.5em) --  ++(30:3em) -- ++(150:2em) 
            --  ++(-150:3em) -- cycle;
        \draw[black] (start) ++(150:1.2em) ++ (90:0.15em) -- ++(90:0.2em) 
            -- ++(-30:0.4em) -- ++(-90:0.2em) -- cycle;
    \end{scope}
\end{tikzpicture}

\end{document}

我通过逐个绘制表面来处理隐藏线。现在,只需更改一个点的起始坐标,图形即可移动。

代码片段的输出

像@JMP 注释中那样添加节点可以处理红点,而使用命名顶点coordinate(name)可以让您在需要时绘制细的隐藏线。

\documentclass[border=3mm,12pt]{standalone}
\usepackage{tikz}

\begin{document}

\begin{tikzpicture}
    \begin{scope}[black, thick, fill=gray, join=bevel]
        \path (6.5em,7em) coordinate (start);
        \filldraw (start) -- ++(30:3em) coordinate(a) -- ++(90:0.5em) -- ++(-150:3em) -- cycle;
        \filldraw (start) -- ++(150:2em) coordinate (b)  -- ++(90:0.5em) -- ++(-30:2em) -- cycle;
        \filldraw (start) ++(90:0.5em) --  ++(30:3em) -- ++(150:2em) coordinate(c) 
            --  ++(-150:3em) -- cycle;
        \draw[black] (start) ++(150:1.2em) ++ (90:0.15em) -- ++(90:0.2em) 
            -- ++(-30:0.4em) -- ++(-90:0.2em) -- cycle;
        %% hiddens 
        \draw [ultra thin] (c) -- ++(-90:0.5em) coordinate(d);
        \draw [ultra thin] (a) -- (d) (b) -- (d);
    \end{scope}
\end{tikzpicture}

\end{document}

隐藏边框

最后,添加

 \path (start) node [shape=circle, fill=red, minimum size=2pt, inner sep=0pt]{};

\end{scope}在突出显示起点之前:

以红色作为起点

相关内容