
비행기를 그려보려고 합니다. 조종석의 창문을 그릴 때 투영된 점을 사용하여 직각을 얻었습니다. 하지만 일은 예상대로 진행되지 않습니다. 누구든지 내가 잘못하고 있는 것에 대한 조언을 줄 수 있습니까?
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\pagestyle{empty}
\begin{document}
\def\aeBodyRadius{0.25cm}
\def\aeBodyNoseDistance{0.21cm}
\begin{tikzpicture}[x=5cm,y=5cm,scale=3,every node={transform shape}]
\coordinate (TAIL) at (0,0);
\coordinate (NOSE) at ($(TAIL)+(30:1)$);
\coordinate (MID) at ($(TAIL)!0.75!(NOSE)$);
\coordinate (MID/TOP) at ($(MID)!\aeBodyRadius!90:(NOSE)$);
\coordinate (MID/BOT) at ($(MID)!\aeBodyRadius!-90:(NOSE)$);
\coordinate (NOSE/TIP) at ($(NOSE)!\aeBodyNoseDistance!90:(MID)$);
\coordinate (HIND/TOP) at ($(TAIL)!\aeBodyRadius!90:(NOSE)$);
\coordinate (HIND/BOT) at ($(TAIL)!\aeBodyRadius!-90:(NOSE)$);
\node[fill,circle,inner sep=1pt] at (MID/TOP) {};
\node[fill,circle,inner sep=1pt] at (MID/BOT) {};
\node[fill,circle,inner sep=1pt] at (HIND/TOP) {};
\node[fill,circle,inner sep=1pt] at (HIND/BOT) {};
\draw[rounded corners=10pt]
(HIND/TOP) --
(MID/TOP) --
node [pos=0.25] (WINDOW/TOP/N) {}
node [pos=0.50] (WINDOW/BOT/N) {}
(NOSE/TIP) --
(MID/BOT) --
(HIND/BOT);
\coordinate (WINDOW/TOP) at (WINDOW/TOP/N.center);
\coordinate (WINDOW/BOT) at (WINDOW/BOT/N.center);
\coordinate (WINDOW/RIG/T) at ($(TAIL)!(WINDOW/TOP)!(NOSE)$);
\coordinate (WINDOW/RIG) at ($(WINDOW/TOP)!(WINDOW/BOT)!(WINDOW/RIG/T)$);
\draw (WINDOW/TOP) -- (WINDOW/RIG) -- (WINDOW/BOT);
\draw[red] (TAIL) -- (NOSE);
\end{tikzpicture}
\end{document}
비행기 중앙을 따라 이어지는 "빨간색" 선은 내가 어떻게 했는지 명확하게 보여줍니다.수직그렇게 되어서는 안 됩니다.
업데이트
무슨 것 같아?~ 아니다작동하려면 다음 코드 조각이 필요합니다.
\coordinate (WINDOW/RIG/T) at ($(TAIL)!(WINDOW/TOP)!(NOSE)$);
\coordinate (WINDOW/RIG) at ($(WINDOW/TOP)!(WINDOW/BOT)!(WINDOW/RIG/T)$);
투영된 점은 적절한 수직선에 있지 않은 것 같습니다. 특히 은
(WINDOW/RIG)
선이 통과하므로 빨간색 선 위에 있어야 하며 (WINDOW/TOP)
및 를 (WINDOW/RIG/T)
통과하는 빨간색 선에 수직이어야 합니다 (TAIL)
.(NOSE)
답변1
에서 언급했듯이A.엘렛, 오류는 로 인해 발생합니다 \pgfpointnormalised
. 더 나은 정밀도를 얻기 위한 솔루션이 여기에 제공됩니다.답변.
MWE에 적용됨:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\pagestyle{empty}
% 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}
\def\aeBodyRadius{0.25cm}
\def\aeBodyNoseDistance{0.21cm}
\begin{tikzpicture}[x=5cm,y=5cm,scale=3,every node={transform shape}]
\coordinate (TAIL) at (0,0);
\coordinate (NOSE) at ($(TAIL)+(30:1)$);
\coordinate (MID) at ($(TAIL)!0.75!(NOSE)$);
\coordinate (MID/TOP) at ($(MID)!\aeBodyRadius!90:(NOSE)$);
\coordinate (MID/BOT) at ($(MID)!\aeBodyRadius!-90:(NOSE)$);
\coordinate (NOSE/TIP) at ($(NOSE)!\aeBodyNoseDistance!90:(MID)$);
\coordinate (HIND/TOP) at ($(TAIL)!\aeBodyRadius!90:(NOSE)$);
\coordinate (HIND/BOT) at ($(TAIL)!\aeBodyRadius!-90:(NOSE)$);
\node[fill,circle,inner sep=1pt] at (MID/TOP) {};
\node[fill,circle,inner sep=1pt] at (MID/BOT) {};
\node[fill,circle,inner sep=1pt] at (HIND/TOP) {};
\node[fill,circle,inner sep=1pt] at (HIND/BOT) {};
\draw[rounded corners=10pt]
(HIND/TOP) --
(MID/TOP) --
node [pos=0.25] (WINDOW/TOP/N) {}
node [pos=0.50] (WINDOW/BOT/N) {}
(NOSE/TIP) --
(MID/BOT) --
(HIND/BOT);
\coordinate (WINDOW/TOP) at (WINDOW/TOP/N.center);
\coordinate (WINDOW/BOT) at (WINDOW/BOT/N.center);
\coordinate (WINDOW/RIG/T) at ($(TAIL)!(WINDOW/TOP)!(NOSE)$);
\coordinate (WINDOW/RIG) at ($(WINDOW/TOP)!(WINDOW/BOT)!(WINDOW/RIG/T)$);
\draw (WINDOW/TOP) -- (WINDOW/RIG) -- (WINDOW/BOT);
\draw[red] (TAIL) -- (NOSE);
\end{tikzpicture}
\end{document}
답변2
주축을 따라 WINDOW/RIG/T를 배치하려고 했을 수도 있지만 이것이 효과가 있었습니다. (깨지지 않았다면...)
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\pagestyle{empty}
\begin{document}
\def\aeBodyRadius{0.25cm}
\def\aeBodyNoseDistance{0.21cm}
\begin{tikzpicture}[x=5cm,y=5cm,scale=3,every node={transform shape}]
\coordinate (TAIL) at (0,0);
\coordinate (NOSE) at ($(TAIL)+(30:1)$);
\coordinate (MID) at ($(TAIL)!0.75!(NOSE)$);
\coordinate (MID/TOP) at ($(MID)!\aeBodyRadius!90:(NOSE)$);
\coordinate (MID/BOT) at ($(MID)!\aeBodyRadius!-90:(NOSE)$);
\coordinate (NOSE/TIP) at ($(NOSE)!\aeBodyNoseDistance!90:(MID)$);
\coordinate (HIND/TOP) at ($(TAIL)!\aeBodyRadius!90:(NOSE)$);
\coordinate (HIND/BOT) at ($(TAIL)!\aeBodyRadius!-90:(NOSE)$);
\node[fill,circle,inner sep=1pt] at (MID/TOP) {};
\node[fill,circle,inner sep=1pt] at (MID/BOT) {};
\node[fill,circle,inner sep=1pt] at (HIND/TOP) {};
\node[fill,circle,inner sep=1pt] at (HIND/BOT) {};
\draw[rounded corners=10pt]
(HIND/TOP) --
(MID/TOP) --
node [pos=0.25] (WINDOW/TOP/N) {}
node [pos=0.50] (WINDOW/BOT/N) {}
(NOSE/TIP) --
(MID/BOT) --
(HIND/BOT);
\coordinate (WINDOW/TOP) at (WINDOW/TOP/N.center);
\coordinate (WINDOW/BOT) at (WINDOW/BOT/N.center);
%start of modifications
\coordinate (WINDOW/RIG/T) at ($(TAIL)!(WINDOW/TOP)!90:(NOSE)$);
\coordinate (WINDOW/RIG) at ($(WINDOW/TOP)!(WINDOW/BOT)!90:(WINDOW/RIG/T)$);
\node[fill,circle,inner sep=1pt] at (WINDOW/RIG/T) {};% way down near the tail
\draw[blue] (WINDOW/TOP) -- (WINDOW/RIG) -- (WINDOW/BOT);
%end of modifications
\draw[red] (TAIL) -- (NOSE);
\end{tikzpicture}
\end{document}
답변3
평평하게 그리고 회전시켜서 의미하는 바를 보여주기 위해:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\pagestyle{empty}
\newlength{\myx}
\newlength{\myy}
\begin{document}
\def\aeBodyRadius{0.25cm}
\def\aeBodyNoseDistance{0.21cm}
\begin{tikzpicture}[x=5cm,y=5cm,scale=3,every node={transform shape},rotate=30]% changed here
\coordinate (TAIL) at (0,0);
\coordinate (NOSE) at ($(TAIL)+(1,0)$);% changed here
\coordinate (MID) at ($(TAIL)!0.75!(NOSE)$);
\coordinate (MID/TOP) at ($(MID)!\aeBodyRadius!90:(NOSE)$);
\coordinate (MID/BOT) at ($(MID)!\aeBodyRadius!-90:(NOSE)$);
\coordinate (NOSE/TIP) at ($(NOSE)!\aeBodyNoseDistance!90:(MID)$);
\coordinate (HIND/TOP) at ($(TAIL)!\aeBodyRadius!90:(NOSE)$);
\coordinate (HIND/BOT) at ($(TAIL)!\aeBodyRadius!-90:(NOSE)$);
\node[fill,circle,inner sep=1pt] at (MID/TOP) {};
\node[fill,circle,inner sep=1pt] at (MID/BOT) {};
\node[fill,circle,inner sep=1pt] at (HIND/TOP) {};
\node[fill,circle,inner sep=1pt] at (HIND/BOT) {};
\draw[rounded corners=10pt]
(HIND/TOP) --
(MID/TOP) --
node [pos=0.25] (WINDOW/TOP/N) {}
node [pos=0.50] (WINDOW/BOT/N) {}
(NOSE/TIP) --
(MID/BOT) --
(HIND/BOT);
\coordinate (WINDOW/TOP) at (WINDOW/TOP/N.center);
\coordinate (WINDOW/BOT) at (WINDOW/BOT/N.center);
\node[fill,circle,inner sep=1pt] at (NOSE) {};
\node[fill,circle,inner sep=1pt] at (TAIL) {};
\coordinate (WINDOW/RIG/T) at ($(TAIL)!(WINDOW/TOP)!(NOSE)$);
\coordinate (WINDOW/RIG) at ($(WINDOW/TOP)!(WINDOW/BOT)!(WINDOW/RIG/T)$);
\node[fill,circle,inner sep=1pt] at (WINDOW/RIG/T) {};
\draw[blue] (WINDOW/TOP) -- (WINDOW/RIG) -- (WINDOW/BOT);
\draw[red] (TAIL) -- (NOSE);
\end{tikzpicture}
\end{document}