航空機胴体の描画

航空機胴体の描画

こんなイメージがあるんですが…

機体

これを LaTeX でも再現したいのですが、ウィンドウの 1 つに寸法も表示したいです。こんな感じです...

描画

画像のように実際の航空機の感触と形状を維持しながら、寸法も追加しながら、TiKZ を使用してこれを実現するにはどうすればよいでしょうか?

「Tikz で航空機を描く」という質問では、この質問に答えられません。

答え1

このようなものを描くのは非常に簡単ですが、面倒です。将来的には、他の人がゼロから始めなくても済むように、少なくとも色を定義し、寸法などを設定するコードを提供していただければ幸いです。

\documentclass[tikz,border=3mm]{standalone}
\definecolor{wt}{RGB}{210,215,219} % frame top
\definecolor{wb}{RGB}{151,154,162} % frame bottom
\definecolor{w}{RGB}{49,66,89}     % window
\definecolor{pt}{RGB}{242,242,242} % plane top
\definecolor{pb}{RGB}{208,209,213} % plane bottom
\definecolor{wf}{RGB}{85,96,110}   % inner frame
\definecolor{blind}{RGB}{115,119,128}      % blind
\begin{document}
\begin{tikzpicture}[>=latex,pics/fuselage/.style={code={
        \tikzset{fuselage/.cd,#1}%
        \def\pv##1{\pgfkeysvalueof{/tikz/fuselage/##1}}%
        \fill[w,rounded corners=\pv{r}-\pv{d}]
            (-\pv{w}/2+\pv{d},-\pv{h}/2+\pv{d}) rectangle (\pv{w}/2-\pv{d},\pv{h}/2-\pv{d});
        \clip [rounded corners=\pv{r}]
            (-\pv{w}/2,-\pv{h}/2) rectangle (\pv{w}/2,\pv{h}/2);    
        \fill[blind] (-\pv{w}/2,\pv{h}/2-\pv{b}) rectangle (\pv{w}/2,\pv{h}/2);
        \fill[wf,xshift=1.3pt,yshift=-1.3pt,even odd rule]
            [rounded corners=\pv{r}]
            (-\pv{w}/2,-\pv{h}/2) rectangle (\pv{w}/2,\pv{h}/2)
            [rounded corners=\pv{r}-\pv{d}]
            (-\pv{w}/2+\pv{d},-\pv{h}/2+\pv{d}) rectangle (\pv{w}/2-\pv{d},\pv{h}/2-\pv{d});            
        \draw[top color=wt,bottom color=wb,even odd rule] 
            [rounded corners=\pv{r}]
            (-\pv{w}/2,-\pv{h}/2) rectangle (\pv{w}/2,\pv{h}/2)
            [rounded corners=\pv{r}-\pv{d}]
            (-\pv{w}/2+\pv{d},-\pv{h}/2+\pv{d}) rectangle (\pv{w}/2-\pv{d},\pv{h}/2-\pv{d});            
}},fuselage/.cd,h/.initial=1.4cm,w/.initial=1cm,
    d/.initial=0.7mm,r/.initial=4mm,b/.initial=2mm]
 \path[top color=pt,bottom color=pb] (-4,-3) rectangle (4,3);
 \path foreach \X in {0,...,3} {(-3+2*\X,0.5) pic{fuselage}};
 \draw[|<->|] (1-0.425,0.5) -- (1+0.425,0.5) node[pos=0.75,above]{$a$};
 \draw[|<->|] (1,0.5-0.625) -- (1,0.5+0.625) node[pos=0.75,left]{$b$};
\end{tikzpicture}
\end{document}

ここに画像の説明を入力してください

付録: リクエストに応じて、乗客付きバージョン。(これらは必ずしも動物ではなく、Tiの中でズリングスには雪だるまと3人の生き物がいます。

\documentclass[tikz,border=3mm]{standalone}
\usepackage{tikzlings}
\definecolor{wt}{RGB}{210,215,219} % frame top
\definecolor{wb}{RGB}{151,154,162} % frame bottom
\definecolor{w}{RGB}{49,66,89}     % window
\definecolor{pt}{RGB}{242,242,242} % plane top
\definecolor{pb}{RGB}{208,209,213} % plane bottom
\definecolor{wf}{RGB}{85,96,110}   % inner frame
\definecolor{blind}{RGB}{115,119,128}      % blind
\begin{document}
\begin{tikzpicture}[>=latex,pics/fuselage/.style={code={
        \tikzset{fuselage/.cd,#1}%
        \def\pv##1{\pgfkeysvalueof{/tikz/fuselage/##1}}%
        \fill[w,rounded corners=\pv{r}-\pv{d}]
            (-\pv{w}/2+\pv{d},-\pv{h}/2+\pv{d}) rectangle (\pv{w}/2-\pv{d},\pv{h}/2-\pv{d});
        \clip [rounded corners=\pv{r}]
            (-\pv{w}/2,-\pv{h}/2) rectangle (\pv{w}/2,\pv{h}/2);    
        \fill[blind] (-\pv{w}/2,\pv{h}/2-\pv{b}) rectangle (\pv{w}/2,\pv{h}/2);
        \tikzling[scale=0.6,yshift=-2cm]    
        \fill[wf,xshift=1.3pt,yshift=-1.3pt,even odd rule]
            [rounded corners=\pv{r}]
            (-\pv{w}/2,-\pv{h}/2) rectangle (\pv{w}/2,\pv{h}/2)
            [rounded corners=\pv{r}-\pv{d}]
            (-\pv{w}/2+\pv{d},-\pv{h}/2+\pv{d}) rectangle (\pv{w}/2-\pv{d},\pv{h}/2-\pv{d});            
        \draw[top color=wt,bottom color=wb,even odd rule] 
            [rounded corners=\pv{r}]
            (-\pv{w}/2,-\pv{h}/2) rectangle (\pv{w}/2,\pv{h}/2)
            [rounded corners=\pv{r}-\pv{d}]
            (-\pv{w}/2+\pv{d},-\pv{h}/2+\pv{d}) rectangle (\pv{w}/2-\pv{d},\pv{h}/2-\pv{d});            
}},fuselage/.cd,h/.initial=1.4cm,w/.initial=1cm,
    d/.initial=0.7mm,r/.initial=4mm,b/.initial=3mm]
 \path[top color=pt,bottom color=pb] (-4,-3) rectangle (4,3);
 \path foreach \X in {0,...,3} {(-3+2*\X,0.5) pic{fuselage}};
\end{tikzpicture}
\end{document}

ここに画像の説明を入力してください

これらはランダムに選択されたTiですZlings では、各コンパイルでランダム セットが取得されます。このランダム性が気に入らない場合は、 を使用します\pgfmathsetseed{<int>}(intは整数)。

関連情報