TikZ 좌표 변환으로 인해 노드 위치가 잘못 계산됨

TikZ 좌표 변환으로 인해 노드 위치가 잘못 계산됨

다음 예에서 좌표 변환으로 인해 위치가 잘못 계산되는 이유는 무엇입니까 E?

\documentclass[border=4pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}
\usepackage{tkz-euclide}
\usetkzobj{all}
\begin{document}

\begin{tikzpicture}[x=0.5in, y=0.5in]%% <-- calculation of "E" is incorrect
%%\begin{tikzpicture}%% <-- calculation of "E" is correct

  \coordinate (Q) at (0,0);
  \coordinate (A) at (-170:1);
  \coordinate (B) at (-70:1);
  \coordinate (C) at (-20:1);
  \coordinate (D) at (50:1);

  \tkzInterLL(A,C)(B,D) 
  \tkzGetPoint{E}

  \draw (A) --  (C);
  \draw (B) --  (D);

  \node[circle,fill,inner sep=1pt]  at (E) {};

\end{tikzpicture}

\end{document}

답변1

이는 작성자가 tkz-euclide단위 벡터가 각각 이라고 가정하기 때문에 발생합니다 1cm. ( ... 휴! 에 저장된 교차점을 반환하는 데 \tkz@InterLL사용되는 개인 매크로 ) 의 정의를 보면 무슨 일이 일어나고 있는지 알 수 있습니다 .\tkzInterLLcoordinate E\tkzGetPoint{E}

여기있어:

\def\tkz@InterLL(#1,#2)(#3,#4)#5{%
%\path (intersection of #1--#2 and #3--#4) coordinate(#5);%
\pgfextractx{\pgf@x}{\pgfpointanchor{#1}{center}}
\pgfextracty{\pgf@y}{\pgfpointanchor{#1}{center}} 
\tkz@ax\pgf@x %
\tkz@ay\pgf@y %
\pgfextractx{\pgf@x}{\pgfpointanchor{#2}{center}}
\pgfextracty{\pgf@y}{\pgfpointanchor{#2}{center}} 
\tkz@bx\pgf@x %
\tkz@by\pgf@y %
\pgfextractx{\pgf@x}{\pgfpointanchor{#3}{center}}
\pgfextracty{\pgf@y}{\pgfpointanchor{#3}{center}} 
\tkz@cx\pgf@x %
\tkz@cy\pgf@y %
\pgfextractx{\pgf@x}{\pgfpointanchor{#4}{center}}
\pgfextracty{\pgf@y}{\pgfpointanchor{#4}{center}} 
\tkz@dx\pgf@x %
\tkz@dy\pgf@y %
\FPeval\tkz@deltax{\pgf@sys@tonumber{\tkz@ax}-\pgf@sys@tonumber{\tkz@bx}}
\FPdiv\tkz@deltax{\tkz@deltax}{28.45274}
\FPeval\tkz@deltaxx{\pgf@sys@tonumber{\tkz@cx}-\pgf@sys@tonumber{\tkz@dx}}
\FPdiv\tkz@deltaxx{\tkz@deltaxx}{28.45274}
\FPeval\tkz@deltay{\pgf@sys@tonumber{\tkz@ay}-\pgf@sys@tonumber{\tkz@by}}
\FPdiv\tkz@deltay{\tkz@deltay}{28.45274}
\FPeval\tkz@deltayy{\pgf@sys@tonumber{\tkz@cy}-\pgf@sys@tonumber{\tkz@dy}}
\FPdiv\tkz@deltayy{\tkz@deltayy}{28.45274}
\FPeval\tkz@deltaxy{(\pgf@sys@tonumber{\tkz@ax}*\pgf@sys@tonumber{\tkz@by})-(\pgf@sys@tonumber{\tkz@ay}*\pgf@sys@tonumber{\tkz@bx})}
\FPdiv\tkz@deltaxy{\tkz@deltaxy}{28.45274}
\FPdiv\tkz@deltaxy{\tkz@deltaxy}{28.45274}
\FPeval\tkz@deltaxxyy{(\pgf@sys@tonumber{\tkz@cx}*\pgf@sys@tonumber{\tkz@dy})-(\pgf@sys@tonumber{\tkz@cy}*\pgf@sys@tonumber{\tkz@dx})}
\FPdiv\tkz@deltaxxyy{\tkz@deltaxxyy}{28.45274}
\FPdiv\tkz@deltaxxyy{\tkz@deltaxxyy}{28.45274}
\FPeval\tkz@div{(\tkz@deltax*\tkz@deltayy)-(\tkz@deltay*\tkz@deltaxx)}
\FPeval\tkz@numx{(\tkz@deltaxy*\tkz@deltaxx)-(\tkz@deltax*\tkz@deltaxxyy)}
\FPeval\tkz@numy{(\tkz@deltaxy*\tkz@deltayy)-(\tkz@deltay*\tkz@deltaxxyy)}
\FPdiv\tkz@xs{\tkz@numx}{\tkz@div}
\FPdiv\tkz@ys{\tkz@numy}{\tkz@div}
\FPround\tkz@xs{\tkz@xs}{5}
\FPround\tkz@ys{\tkz@ys}{5}
\path[coordinate](\tkz@xs,\tkz@ys) coordinate (#5);
}

28.45274가운데에 있는 것들이 모두 보이나요 ? 이는 가정된 단위 벡터 길이를 나중에 반올림하고 사용하기 위해 1cm단위로 변환하는 것입니다.pt

in따라서 테스트로서 다음과 동등하다는 관점에서 척도를 정의해 보겠습니다 1cm.

\documentclass[border=4pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}
\usepackage{tkz-euclide}
\usetkzobj{all}
\begin{document}

\begin{tikzpicture}[x=0.3937in, y=0.3937in] % works
%\begin{tikzpicture}[x=0.3937in, y=1cm]      % works
%\begin{tikzpicture}[x=1cm, y=0.3937in]      % works
%\begin{tikzpicture}[x=1cm, y=1cm]           % works
%\begin{tikzpicture}                         % works

  \coordinate (Q) at (0,0);
  \coordinate (A) at (-170:1);
  \coordinate (B) at (-70:1);
  \coordinate (C) at (-20:1);
  \coordinate (D) at (50:1);

  \tkzInterLL(A,C)(B,D) 
  \tkzGetPoint{E}

  \draw (A) --  (C);
  \draw (B) --  (D);

  \node[circle,fill,inner sep=1pt]  at (E) {};

\end{tikzpicture}

\end{document}

여기에 이미지 설명을 입력하세요

각 줄은 올바른 결과를 제공합니다. 하지만 x=0.5in또는 을 수행하면 y=2cm축 중 하나에서 점이 잘못 정렬됩니다. 그리고 두 단위 벡터가 모두 변경되면 점이 두 축에서 잘못 정렬됩니다.

TL;DR를 사용할 때 tkz-euclide와 동일하다면 원하는 단위 벡터를 사용할 수 있습니다 x=1cm, y=1cm.

관련 정보