TikZ 坐标计算精度

TikZ 坐标计算精度

考虑以下 MWE:

\documentclass[border=5pt,tikz]{standalone}

\usepackage{tikz}
\usetikzlibrary{calc}

\begin{document}

\begin{tikzpicture}[join=bevel]
   \draw (0,0) coordinate (B) -- (6,0) coordinate (C)  
        -- (6,4.5) coordinate (A) -- cycle;
   \coordinate (F) at ($(A)!(C)!(B)$);
   \draw (C) -- (B) -- (0,8) coordinate (D)  -- cycle;
   \draw[fill=gray] (D) -- (A) -- (F) -- cycle;
\end{tikzpicture}

\end{document}

它产生 在此处输入图片描述

但是,灰色三角形的角应该正好位于从左上角到右下角的线上。(这可以通过 GeoGebra 或计算轻松验证。)

为什么会发生这种情况?

答案1

正如 Mark Wibrow 在这个答案\pgfpointnormalised可以修正的定义以获得更好的精度。

\documentclass[border=5pt,tikz]{standalone}

\usepackage{tikz}
\usetikzlibrary{calc, spy}

% use the Mark Wibrow's correction
\makeatletter
\def\pgfpointnormalised#1{%
  \pgf@process{#1}%
  \pgfmathatantwo{\the\pgf@y}{\the\pgf@x}%
  \let\pgf@tmp=\pgfmathresult%
  \pgfmathcos@{\pgf@tmp}\pgf@x=\pgfmathresult pt\relax%
  \pgfmathsin@{\pgf@tmp}\pgf@y=\pgfmathresult pt\relax%
}
\makeatother

\begin{document}

\begin{tikzpicture}[join=bevel, spy using outlines={circle, magnification=7, size=17mm, connect spies}]
   \draw (0,0) coordinate (B) -- (6,0) coordinate (C)
        -- (6,4.5) coordinate (A) -- cycle;
   \coordinate (F) at ($(A)!(C)!(B)$);
   \draw (C) -- (B) -- (0,8) coordinate (D)  -- cycle;
   \draw[fill=gray] (D) -- (A) -- (F) -- cycle;

   \spy[red] on (F) in node at (1,2);
\end{tikzpicture}

\end{document}

在此处输入图片描述

笔记 :这是这个答案

相关内容