需要对当前 tikz 图像进行微调

需要对当前 tikz 图像进行微调

我当时正在网上复制一张图片(某种程度上),最后在 TikZ 中得到了一个看起来不太酷的图片版本。而且,由于我是一名业余 tikz 爱好者,所以我依赖于重新整理一些旧代码,而不是从头开始。最终产品并不像前面提到的那么好。所以,我想请你帮我改进(和扩展)我拥有的图片。我将在下面发布代码。

\documentclass[tikz, border=5]{standalone}
\usetikzlibrary{shapes,shadows,calc,arrows.meta}
\tikzset{%
  cube join/.style={
    thick, -{Stealth}, 
  },
  cube face/.style={
    minimum size=1cm, outer sep=0pt,
    draw=white, thick, line join=round,
    shading=ball, ball color=red,
    text=white, font=\bfseries
  },    
  pics/cube/.style args={#1 with #2}{
  code={
    \node [cube face] (-front) {};
    \node [cube face] (-top)  at (-front.north west) [anchor=south west, xslant=1, yscale=1/3] {};
    \node [cube face] (-side) at (-front.south east) [anchor=south west, yslant=1, xscale=1/3] {};
   }}
}

%-----ABoxes
%-----#1 height, #2 width, #3 aspect, #4 name of the node, #5
%-----coordinate, #6 label

\def\aboxr[#1,#2,#3,#4,#5]#6{%
  \node[draw, cylinder, alias=cyl, shape border rotate=90, aspect=#3, %
  minimum height=#1, minimum width=#2, outer sep=-0.5\pgflinewidth, %
  color=white, left color=blue!50!green, right color=blue!60!green, middle
  color=white] (#4) at #5 {};%
  \node at #5 {#6};%
  \fill [blue!60!green!30] let \p1 = ($(cyl.before top)!0.5!(cyl.after top)$), \p2 =
  (cyl.top), \p3 = (cyl.before top), \n1={veclen(\x3-\x1,\y3-\y1)},
  \n2={veclen(\x2-\x1,\y2-\y1)} in (\p1) ellipse (\n1 and \n2); }


% Datacentre

\usetikzlibrary{backgrounds,calc,shadings,shapes.arrows,shapes.symbols,shadows}
\definecolor{switch}{HTML}{006996}

\makeatletter
\pgfkeys{/pgf/.cd,
  parallelepiped offset x/.initial=2mm,
  parallelepiped offset y/.initial=2mm
}
\pgfdeclareshape{parallelepiped}
{
  \inheritsavedanchors[from=rectangle] % this is nearly a rectangle
  \inheritanchorborder[from=rectangle]
  \inheritanchor[from=rectangle]{north}
  \inheritanchor[from=rectangle]{north west}
  \inheritanchor[from=rectangle]{north east}
  \inheritanchor[from=rectangle]{center}
  \inheritanchor[from=rectangle]{west}
  \inheritanchor[from=rectangle]{east}
  \inheritanchor[from=rectangle]{mid}
  \inheritanchor[from=rectangle]{mid west}
  \inheritanchor[from=rectangle]{mid east}
  \inheritanchor[from=rectangle]{base}
  \inheritanchor[from=rectangle]{base west}
  \inheritanchor[from=rectangle]{base east}
  \inheritanchor[from=rectangle]{south}
  \inheritanchor[from=rectangle]{south west}
  \inheritanchor[from=rectangle]{south east}
  \backgroundpath{
    % store lower right in xa/ya and upper right in xb/yb
    \southwest \pgf@xa=\pgf@x \pgf@ya=\pgf@y
    \northeast \pgf@xb=\pgf@x \pgf@yb=\pgf@y
    \pgfmathsetlength\pgfutil@tempdima{\pgfkeysvalueof{/pgf/parallelepiped
      offset x}}
    \pgfmathsetlength\pgfutil@tempdimb{\pgfkeysvalueof{/pgf/parallelepiped
      offset y}}
    \def\ppd@offset{\pgfpoint{\pgfutil@tempdima}{\pgfutil@tempdimb}}
    \pgfpathmoveto{\pgfqpoint{\pgf@xa}{\pgf@ya}}
    \pgfpathlineto{\pgfqpoint{\pgf@xb}{\pgf@ya}}
    \pgfpathlineto{\pgfqpoint{\pgf@xb}{\pgf@yb}}
    \pgfpathlineto{\pgfqpoint{\pgf@xa}{\pgf@yb}}
    \pgfpathclose
    \pgfpathmoveto{\pgfqpoint{\pgf@xb}{\pgf@ya}}
    \pgfpathlineto{\pgfpointadd{\pgfpoint{\pgf@xb}{\pgf@ya}}{\ppd@offset}}
    \pgfpathlineto{\pgfpointadd{\pgfpoint{\pgf@xb}{\pgf@yb}}{\ppd@offset}}
    \pgfpathlineto{\pgfpointadd{\pgfpoint{\pgf@xa}{\pgf@yb}}{\ppd@offset}}
    \pgfpathlineto{\pgfqpoint{\pgf@xa}{\pgf@yb}}
    \pgfpathmoveto{\pgfqpoint{\pgf@xb}{\pgf@yb}}
    \pgfpathlineto{\pgfpointadd{\pgfpoint{\pgf@xb}{\pgf@yb}}{\ppd@offset}}
  }
}
\makeatother

\tikzset{l3 switch/.style={
    parallelepiped,fill=switch, draw=white,
    minimum width=0.75cm,
    minimum height=0.75cm,
    parallelepiped offset x=1.75mm,
    parallelepiped offset y=1.25mm,
    path picture={
      \node[fill=white,
        circle,
        minimum size=6pt,
        inner sep=0pt,
        append after command={
          \pgfextra{
            \foreach \angle in {0,45,...,360}
            \draw[-latex,fill=white] (\tikzlastnode.\angle)--++(\angle:2.25mm);
          }
        }
      ] 
       at ([xshift=-0.75mm,yshift=-0.5mm]path picture bounding box.center){};
    }
  },
  ports/.style={
    line width=0.3pt,
    top color=gray!20,
    bottom color=gray!80
  },
  rack switch/.style={
    parallelepiped,fill=white, draw,
    minimum width=1.25cm,
    minimum height=0.25cm,
    parallelepiped offset x=2mm,
    parallelepiped offset y=1.25mm,
    xscale=-1,
    path picture={
      \draw[top color=gray!5,bottom color=gray!40]
      (path picture bounding box.south west) rectangle 
      (path picture bounding box.north east);
      \coordinate (A-west) at ([xshift=-0.2cm]path picture bounding box.west);
      \coordinate (A-center) at ($(path picture bounding box.center)!0!(path
        picture bounding box.south)$);
      \foreach \x in {0.275,0.525,0.775}{
        \draw[ports]([yshift=-0.05cm]$(A-west)!\x!(A-center)$)
          rectangle +(0.1,0.05);
        \draw[ports]([yshift=-0.125cm]$(A-west)!\x!(A-center)$)
          rectangle +(0.1,0.05);
       } 
      \coordinate (A-east) at (path picture bounding box.east);
      \foreach \x in {0.085,0.21,0.335,0.455,0.635,0.755,0.875,1}{
        \draw[ports]([yshift=-0.1125cm]$(A-east)!\x!(A-center)$)
          rectangle +(0.05,0.1);       
      }
    }
  },
  server/.style={
    parallelepiped,
    fill=white, draw,
    minimum width=0.35cm,
    minimum height=0.75cm,
    parallelepiped offset x=3mm,
    parallelepiped offset y=2mm,
    xscale=-1,
    path picture={
      \draw[top color=gray!5,bottom color=gray!40]
      (path picture bounding box.south west) rectangle 
      (path picture bounding box.north east);
      \coordinate (A-center) at ($(path picture bounding box.center)!0!(path
        picture bounding box.south)$);
      \coordinate (A-west) at ([xshift=-0.575cm]path picture bounding box.west);
      \draw[ports]([yshift=0.1cm]$(A-west)!0!(A-center)$)
        rectangle +(0.2,0.065);
      \draw[ports]([yshift=0.01cm]$(A-west)!0.085!(A-center)$)
        rectangle +(0.15,0.05);
      \fill[black]([yshift=-0.35cm]$(A-west)!-0.1!(A-center)$)
        rectangle +(0.235,0.0175);
      \fill[black]([yshift=-0.385cm]$(A-west)!-0.1!(A-center)$)
        rectangle +(0.235,0.0175);
      \fill[black]([yshift=-0.42cm]$(A-west)!-0.1!(A-center)$)
        rectangle +(0.235,0.0175);
    }  
  },
}

% Datacentre

\tikzset{%
  interface/.style={draw, rectangle, rounded corners, font=\LARGE\sffamily},
  ethernet/.style={interface, fill=yellow!50},% ethernet interface
  serial/.style={interface, fill=green!70},% serial interface
  speed/.style={sloped, anchor=south, font=\large\sffamily},% line speed at edge
  route/.style={draw, shape=single arrow, single arrow head extend=4mm,
    minimum height=1.7cm, minimum width=3mm, white, fill=switch!20,
    drop shadow={opacity=.8, fill=switch}, font=\tiny}% inroute/outroute arrows
}
\newcommand*{\shift}{1.3cm}% For placing the arrows later

% The router icon
\newcommand*{\router}[1]{
\begin{tikzpicture}[scale = 0.23]   
  \coordinate (ll) at (-3,0.5);
  \coordinate (lr) at (3,0.5);
  \coordinate (ul) at (-3,2);
  \coordinate (ur) at (3,2);
  \shade [shading angle=90, left color=switch, right color=white] (ll)
    arc (-180:-60:3cm and .75cm) -- +(0,1.5) arc (-60:-180:3cm and .75cm)
    -- cycle;
  \shade [shading angle=270,right color=switch, left color=white!50] (lr)
    arc (0:-60:3cm and .75cm) -- +(0,1.5) arc (-60:0:3cm and .75cm) -- cycle;
  \draw [thick, color = white] (ll) arc (-180:0:3cm and .75cm)
    -- (ur) arc (0:-180:3cm and .75cm) -- cycle;
  \draw [thick, shade,  color = white, upper left=switch, lower left=switch,
    upper right=switch, lower right=white] (ul)
    arc (-180:180:3cm and .75cm);
  \node at (0,0.5){\color{blue!60!black}\Huge #1};% The name of the router
  % The four arrows, symbols for incoming and outgoing routes:
  \begin{scope}[yshift=2cm, yscale=0.28, transform shape]
    \node[route, rotate=45, xshift=\shift] {\strut};
    \node[route, rotate=-45, xshift=-\shift] {\strut};
    \node[route, rotate=-135, xshift=\shift] {\strut};
    \node[route, rotate=135, xshift=-\shift] {\strut};
  \end{scope}
\end{tikzpicture}}

% Router


\definecolor{navyblue}{RGB}{238,223,204}


\begin{document}




\begin{tikzpicture}

%%%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~%%%
%%%~~~~~~~~~~~~ Plane containing (N_s,L_s) ~~~~~~~~~~~~%%%
%%%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~%%%

\draw[fill=navyblue!50, draw=none, opacity=1] (7,7) -- (25,7) -- (21,1) -- (1,1) -- cycle;

%%%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~%%%
%%%~~~~~~~~~~~~~~~~~~~ TAP ---- R_s ~~~~~~~~~~~~~~~~~~~%%%
%%%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~%%%

\draw (9.0,3.40) .. controls (7.0,2.5) and (7.0,2.5) .. (4.5,2.3);
\draw (9.0,3.55) .. controls (6.0,3.0) and (6.0,3.0) .. (5.6,3.1);
\draw (9.0,3.70) .. controls (8.0,3.7) and (8.0,3.7) .. (6.4,3.8);
\draw (9.8,5.00) .. controls (9.0,5.0) and (9.0,5.0) .. (7.2,5.5);
\draw (9.8,4.80) .. controls (8.5,4.5) and (8.5,4.3) .. (6.5,4.6);

%%%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~%%%
%%%~~~~~~~~~~~~~~~~~~~ R_s ---- R_s ~~~~~~~~~~~~~~~~~~~%%%
%%%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~%%%

\draw (9.5,3.40) .. controls (9.9,5) and (10.5,5) .. (11,5);
\draw (10.1,3.2) .. controls (11.5,2.7) and (11.5,2.7) .. (13.5,2.8);
\draw (16.2,2.40) .. controls (14,2.5) and (14,2.5) .. (13.5,2.8);
\draw (16.4,2.15) .. controls (20,3.7) and (20,3.7) .. (20,6.1);
\draw (16.1,6.00) .. controls (17.5,6.3) and (17.5,6.3) .. (19.9,6);
\draw (16.1,5.75) .. controls (14.5,6.0) and (14.5,6.0) .. (10,5.1);

%%%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~%%%
%%%~~~~~~~~~~~~~~~~~~~ R_s ---- N_s ~~~~~~~~~~~~~~~~~~~%%%
%%%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~%%%

\draw (10.8,6.5) .. controls (9.9,5) and (10.5,5) .. (11,5);
\draw (11,1.70) .. controls (13,2.5) and (13,2.5) .. (13.5,2.8);
\draw (16.4,2.15) .. controls (18,2.5) and (18,2.5) .. (20,2.50);
\draw (23,6.75) .. controls (21,6.5) and (21,6.5) .. (20,6);
\draw (15,4.50) .. controls (15,6.5) and (15,6.5) .. (15.5,6);



%%%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~%%%
%%%~~~~~~~~~~~~~~~ Aggregation Points T ~~~~~~~~~~~~~~~%%%
%%%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~%%%

\begin{scope}[xshift = 5.2cm, yshift = 3.6cm]
\pic  (one)   at (+2.00, +2.00) {cube=1  with $A$};
\pic  (two)   at (+1.25, +1.25) {cube=2  with $A$};
\pic  (three) at (+0.50, +0.50) {cube=3  with $C$}; 
\pic  (four)  at (-0.25, -0.25) {cube=4  with $D$};
\pic  (five)  at (-1.00, -1.00) {cube=5  with $B$};
\end{scope}

%%%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~%%%
%%%~~~~~~~~~~~~~~~ Compute/Storage Nodes ~~~~~~~~~~~~~~%%%
%%%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~%%%

\begin{scope}
  \aboxr[40,50,1.4,C1,(11,6.50)] {};
  \aboxr[40,50,1.4,C2,(23,6.75)] {};  
  \aboxr[40,50,1.4,C3,(11,1.70)] {};
  \aboxr[40,50,1.4,C4,(20,2.50)] {};  
  \aboxr[40,50,1.4,C5,(15,4.50)] {};
\end{scope} 

%%%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~%%%
%%%~~~~~~~~~~~~~~~~~ Networking Nodes ~~~~~~~~~~~~~~~~~%%%
%%%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~%%%

\node [xshift=09.5cm,yshift=3.5cm](R1) {\router{}};
\node [xshift=10.5cm,yshift=5.0cm](R2) {\router{}};
\node [xshift=16.5cm,yshift=2.5cm](R3) {\router{}};
\node [xshift=13.5cm,yshift=2.7cm](R4) {\router{}};
\node [xshift=15.5cm,yshift=6.0cm](R5) {\router{}};
\node [xshift=20.0cm,yshift=6.0cm](R6) {\router{}};

%%%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~%%%
%%%~~~~~~~~~~~~ Virtual Network Functions ~~~~~~~~~~~~~%%%
%%%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~%%%

\begin{scope}[xshift = 9cm, yshift = 1cm]
    \node [xshift=6.50cm, yshift = 8cm,server][scale=1.5] (S1){};
    \node [xshift=5.45cm, yshift = 8cm,server][scale=1.5] (S3){};          
    \node [xshift=5.95cm, yshift = 7cm,server][scale=1.5] (S2){};      
    \node [xshift=7.00cm, yshift = 7cm,server][scale=1.5] (S4){}; 
\end{scope}

%%%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~%%%
%%%~~~~~~~~~~~~~~~~~~~ Rack Switches ~~~~~~~~~~~~~~~~~~%%%
%%%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~%%%

%\node[rack switch, xshift=0.1cm,yshift=0.3cm](rack switch 1-a){};

%%%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~%%%
%%%~~~~~~~~~~~~~~~~~~ Layer 3 Switch ~~~~~~~~~~~~~~~~~~%%%
%%%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~%%%

%\node[l3 switch, xshift=1.5cm,yshift=0.5cm](l3 switch 1-a){};



\end{tikzpicture}
\end{document}

我想要的图像与此类似但不完全相同

http://1.bp.blogspot.com/-HoFcr0Z5XQo/VloKBQWk63I/AAAAAAAAHPs/OAFDUErquy4/s1600/NGMN_5GSlices.jpg

答案1

我刚刚添加了一个箭头、齿轮、一个人、一辆车和一些注释。您可能能够用这个完成您的项目,因为您的 MWE 已经展示了您的技能。您需要付出更多努力才能得到您想要的东西(从您的问题和评论中看得并不那么清楚)。

\documentclass[tikz, border=5]{standalone}
\usetikzlibrary{shapes,shadows,calc,arrows.meta}


% BEGIN NEW
\usepackage{tikzpeople}

% http://tex.stackexchange.com/a/58735/128553
% #1 number of teeths
% #2 radius intern
% #3 radius extern
% #4 angle from start to end of the first arc
% #5 angle to decale the second arc from the first
% #6 inner radius to cut off

\newcommand{\gear}[6]{%
  (0:#2) 
  \foreach \i [evaluate=\i as \n using {\i-1)*360/#1}] in {1,...,#1}{%
    arc (\n:\n+#4:#2) {[rounded corners=1.5pt] -- (\n+#4+#5:#3)
    arc (\n+#4+#5:\n+360/#1-#5:#3)} --  (\n+360/#1:#2) 
  } %
  (0,0) circle[radius=#6] 
} 

%http://tex.stackexchange.com/a/235538/128553
\newcommand{\car}{
 \shade[top color=red, bottom color=white, shading angle={135}]
        [draw=black,fill=red!20,rounded corners=1.2ex,very thick] (1.5,.5) -- ++(0,1) -- ++(1,0.3) --  ++(3,0) -- ++(1,0) -- ++(0,-1.3) -- (1.5,.5) -- cycle;
    \draw[very thick, rounded corners=0.5ex,fill=black!20!blue!20!white,thick]  (2.5,1.8) -- ++(1,0.7) -- ++(1.6,0) -- ++(0.6,-0.7) -- (2.5,1.8);
    \draw[thick]  (4.2,1.8) -- (4.2,2.5);
    \draw[draw=black,fill=gray!50,thick] (2.75,.5) circle (.5);
    \draw[draw=black,fill=gray!50,thick] (5.5,.5) circle (.5);
    \draw[draw=black,fill=gray!80,semithick] (2.75,.5) circle (.4);
    \draw[draw=black,fill=gray!80,semithick] (5.5,.5) circle (.4);
}


% END NEW

\tikzset{%
  cube join/.style={
    thick, -{Stealth}, 
  },
  cube face/.style={
    minimum size=1cm, outer sep=0pt,
    draw=white, thick, line join=round,
    shading=ball, ball color=red,
    text=white, font=\bfseries
  },    
  pics/cube/.style args={#1 with #2}{
  code={
    \node [cube face] (-front) {};
    \node [cube face] (-top)  at (-front.north west) [anchor=south west, xslant=1, yscale=1/3] {};
    \node [cube face] (-side) at (-front.south east) [anchor=south west, yslant=1, xscale=1/3] {};
   }}
}

%-----ABoxes
%-----#1 height, #2 width, #3 aspect, #4 name of the node, #5
%-----coordinate, #6 label

\def\aboxr[#1,#2,#3,#4,#5]#6{%
  \node[draw, cylinder, alias=cyl, shape border rotate=90, aspect=#3, %
  minimum height=#1, minimum width=#2, outer sep=-0.5\pgflinewidth, %
  color=white, left color=blue!50!green, right color=blue!60!green, middle
  color=white] (#4) at #5 {};%
  \node at #5 {#6};%
  \fill [blue!60!green!30] let \p1 = ($(cyl.before top)!0.5!(cyl.after top)$), \p2 =
  (cyl.top), \p3 = (cyl.before top), \n1={veclen(\x3-\x1,\y3-\y1)},
  \n2={veclen(\x2-\x1,\y2-\y1)} in (\p1) ellipse (\n1 and \n2); }


% Datacentre

\usetikzlibrary{backgrounds,calc,shadings,shapes.arrows,shapes.symbols,shadows}
\definecolor{switch}{HTML}{006996}

\makeatletter
\pgfkeys{/pgf/.cd,
  parallelepiped offset x/.initial=2mm,
  parallelepiped offset y/.initial=2mm
}
\pgfdeclareshape{parallelepiped}
{
  \inheritsavedanchors[from=rectangle] % this is nearly a rectangle
  \inheritanchorborder[from=rectangle]
  \inheritanchor[from=rectangle]{north}
  \inheritanchor[from=rectangle]{north west}
  \inheritanchor[from=rectangle]{north east}
  \inheritanchor[from=rectangle]{center}
  \inheritanchor[from=rectangle]{west}
  \inheritanchor[from=rectangle]{east}
  \inheritanchor[from=rectangle]{mid}
  \inheritanchor[from=rectangle]{mid west}
  \inheritanchor[from=rectangle]{mid east}
  \inheritanchor[from=rectangle]{base}
  \inheritanchor[from=rectangle]{base west}
  \inheritanchor[from=rectangle]{base east}
  \inheritanchor[from=rectangle]{south}
  \inheritanchor[from=rectangle]{south west}
  \inheritanchor[from=rectangle]{south east}
  \backgroundpath{
    % store lower right in xa/ya and upper right in xb/yb
    \southwest \pgf@xa=\pgf@x \pgf@ya=\pgf@y
    \northeast \pgf@xb=\pgf@x \pgf@yb=\pgf@y
    \pgfmathsetlength\pgfutil@tempdima{\pgfkeysvalueof{/pgf/parallelepiped
      offset x}}
    \pgfmathsetlength\pgfutil@tempdimb{\pgfkeysvalueof{/pgf/parallelepiped
      offset y}}
    \def\ppd@offset{\pgfpoint{\pgfutil@tempdima}{\pgfutil@tempdimb}}
    \pgfpathmoveto{\pgfqpoint{\pgf@xa}{\pgf@ya}}
    \pgfpathlineto{\pgfqpoint{\pgf@xb}{\pgf@ya}}
    \pgfpathlineto{\pgfqpoint{\pgf@xb}{\pgf@yb}}
    \pgfpathlineto{\pgfqpoint{\pgf@xa}{\pgf@yb}}
    \pgfpathclose
    \pgfpathmoveto{\pgfqpoint{\pgf@xb}{\pgf@ya}}
    \pgfpathlineto{\pgfpointadd{\pgfpoint{\pgf@xb}{\pgf@ya}}{\ppd@offset}}
    \pgfpathlineto{\pgfpointadd{\pgfpoint{\pgf@xb}{\pgf@yb}}{\ppd@offset}}
    \pgfpathlineto{\pgfpointadd{\pgfpoint{\pgf@xa}{\pgf@yb}}{\ppd@offset}}
    \pgfpathlineto{\pgfqpoint{\pgf@xa}{\pgf@yb}}
    \pgfpathmoveto{\pgfqpoint{\pgf@xb}{\pgf@yb}}
    \pgfpathlineto{\pgfpointadd{\pgfpoint{\pgf@xb}{\pgf@yb}}{\ppd@offset}}
  }
}
\makeatother

\tikzset{l3 switch/.style={
    parallelepiped,fill=switch, draw=white,
    minimum width=0.75cm,
    minimum height=0.75cm,
    parallelepiped offset x=1.75mm,
    parallelepiped offset y=1.25mm,
    path picture={
      \node[fill=white,
        circle,
        minimum size=6pt,
        inner sep=0pt,
        append after command={
          \pgfextra{
            \foreach \angle in {0,45,...,360}
            \draw[-latex,fill=white] (\tikzlastnode.\angle)--++(\angle:2.25mm);
          }
        }
      ] 
       at ([xshift=-0.75mm,yshift=-0.5mm]path picture bounding box.center){};
    }
  },
  ports/.style={
    line width=0.3pt,
    top color=gray!20,
    bottom color=gray!80
  },
  rack switch/.style={
    parallelepiped,fill=white, draw,
    minimum width=1.25cm,
    minimum height=0.25cm,
    parallelepiped offset x=2mm,
    parallelepiped offset y=1.25mm,
    xscale=-1,
    path picture={
      \draw[top color=gray!5,bottom color=gray!40]
      (path picture bounding box.south west) rectangle 
      (path picture bounding box.north east);
      \coordinate (A-west) at ([xshift=-0.2cm]path picture bounding box.west);
      \coordinate (A-center) at ($(path picture bounding box.center)!0!(path
        picture bounding box.south)$);
      \foreach \x in {0.275,0.525,0.775}{
        \draw[ports]([yshift=-0.05cm]$(A-west)!\x!(A-center)$)
          rectangle +(0.1,0.05);
        \draw[ports]([yshift=-0.125cm]$(A-west)!\x!(A-center)$)
          rectangle +(0.1,0.05);
       } 
      \coordinate (A-east) at (path picture bounding box.east);
      \foreach \x in {0.085,0.21,0.335,0.455,0.635,0.755,0.875,1}{
        \draw[ports]([yshift=-0.1125cm]$(A-east)!\x!(A-center)$)
          rectangle +(0.05,0.1);       
      }
    }
  },
  server/.style={
    parallelepiped,
    fill=white, draw,
    minimum width=0.35cm,
    minimum height=0.75cm,
    parallelepiped offset x=3mm,
    parallelepiped offset y=2mm,
    xscale=-1,
    path picture={
      \draw[top color=gray!5,bottom color=gray!40]
      (path picture bounding box.south west) rectangle 
      (path picture bounding box.north east);
      \coordinate (A-center) at ($(path picture bounding box.center)!0!(path
        picture bounding box.south)$);
      \coordinate (A-west) at ([xshift=-0.575cm]path picture bounding box.west);
      \draw[ports]([yshift=0.1cm]$(A-west)!0!(A-center)$)
        rectangle +(0.2,0.065);
      \draw[ports]([yshift=0.01cm]$(A-west)!0.085!(A-center)$)
        rectangle +(0.15,0.05);
      \fill[black]([yshift=-0.35cm]$(A-west)!-0.1!(A-center)$)
        rectangle +(0.235,0.0175);
      \fill[black]([yshift=-0.385cm]$(A-west)!-0.1!(A-center)$)
        rectangle +(0.235,0.0175);
      \fill[black]([yshift=-0.42cm]$(A-west)!-0.1!(A-center)$)
        rectangle +(0.235,0.0175);
    }  
  },
}

% Datacentre

\tikzset{%
  interface/.style={draw, rectangle, rounded corners, font=\LARGE\sffamily},
  ethernet/.style={interface, fill=yellow!50},% ethernet interface
  serial/.style={interface, fill=green!70},% serial interface
  speed/.style={sloped, anchor=south, font=\large\sffamily},% line speed at edge
  route/.style={draw, shape=single arrow, single arrow head extend=4mm,
    minimum height=1.7cm, minimum width=3mm, white, fill=switch!20,
    drop shadow={opacity=.8, fill=switch}, font=\tiny}% inroute/outroute arrows
}
\newcommand*{\shift}{1.3cm}% For placing the arrows later

% The router icon
\newcommand*{\router}[1]{
\begin{tikzpicture}[scale = 0.23]   
  \coordinate (ll) at (-3,0.5);
  \coordinate (lr) at (3,0.5);
  \coordinate (ul) at (-3,2);
  \coordinate (ur) at (3,2);
  \shade [shading angle=90, left color=switch, right color=white] (ll)
    arc (-180:-60:3cm and .75cm) -- +(0,1.5) arc (-60:-180:3cm and .75cm)
    -- cycle;
  \shade [shading angle=270,right color=switch, left color=white!50] (lr)
    arc (0:-60:3cm and .75cm) -- +(0,1.5) arc (-60:0:3cm and .75cm) -- cycle;
  \draw [thick, color = white] (ll) arc (-180:0:3cm and .75cm)
    -- (ur) arc (0:-180:3cm and .75cm) -- cycle;
  \draw [thick, shade,  color = white, upper left=switch, lower left=switch,
    upper right=switch, lower right=white] (ul)
    arc (-180:180:3cm and .75cm);
  \node at (0,0.5){\color{blue!60!black}\Huge #1};% The name of the router
  % The four arrows, symbols for incoming and outgoing routes:
  \begin{scope}[yshift=2cm, yscale=0.28, transform shape]
    \node[route, rotate=45, xshift=\shift] {\strut};
    \node[route, rotate=-45, xshift=-\shift] {\strut};
    \node[route, rotate=-135, xshift=\shift] {\strut};
    \node[route, rotate=135, xshift=-\shift] {\strut};
  \end{scope}
\end{tikzpicture}}

% Router


\definecolor{navyblue}{RGB}{238,223,204}


\begin{document}




\begin{tikzpicture}

%%%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~%%%
%%%~~~~~~~~~~~~ Plane containing (N_s,L_s) ~~~~~~~~~~~~%%%
%%%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~%%%


\draw[fill=navyblue!50, draw=none, opacity=1] (7,7) -- (25,7) -- (21,1) -- (1,1) -- cycle;



%%%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~%%%
%%%~~~~~~~~~~~~~~~~~~~ TAP ---- R_s ~~~~~~~~~~~~~~~~~~~%%%
%%%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~%%%

\draw (9.0,3.40) .. controls (7.0,2.5) and (7.0,2.5) .. (4.5,2.3);
\draw (9.0,3.55) .. controls (6.0,3.0) and (6.0,3.0) .. (5.6,3.1);
\draw (9.0,3.70) .. controls (8.0,3.7) and (8.0,3.7) .. (6.4,3.8);
\draw (9.8,5.00) .. controls (9.0,5.0) and (9.0,5.0) .. (7.2,5.5);
\draw (9.8,4.80) .. controls (8.5,4.5) and (8.5,4.3) .. (6.5,4.6);

%%%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~%%%
%%%~~~~~~~~~~~~~~~~~~~ R_s ---- R_s ~~~~~~~~~~~~~~~~~~~%%%
%%%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~%%%

\draw (9.5,3.40) .. controls (9.9,5) and (10.5,5) .. (11,5);
\draw (10.1,3.2) .. controls (11.5,2.7) and (11.5,2.7) .. (13.5,2.8);
\draw (16.2,2.40) .. controls (14,2.5) and (14,2.5) .. (13.5,2.8);
\draw (16.4,2.15) .. controls (20,3.7) and (20,3.7) .. (20,6.1);
\draw (16.1,6.00) .. controls (17.5,6.3) and (17.5,6.3) .. (19.9,6);
\draw (16.1,5.75) .. controls (14.5,6.0) and (14.5,6.0) .. (10,5.1);

%%%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~%%%
%%%~~~~~~~~~~~~~~~~~~~ R_s ---- N_s ~~~~~~~~~~~~~~~~~~~%%%
%%%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~%%%

\draw (10.8,6.5) .. controls (9.9,5) and (10.5,5) .. (11,5);
\draw (11,1.70) .. controls (13,2.5) and (13,2.5) .. (13.5,2.8);
\draw (16.4,2.15) .. controls (18,2.5) and (18,2.5) .. (20,2.50);
\draw (23,6.75) .. controls (21,6.5) and (21,6.5) .. (20,6);
\draw (15,4.50) .. controls (15,6.5) and (15,6.5) .. (15.5,6);



%%%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~%%%
%%%~~~~~~~~~~~~~~~ Aggregation Points T ~~~~~~~~~~~~~~~%%%
%%%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~%%%

\begin{scope}[xshift = 5.2cm, yshift = 3.6cm]
\pic  (one)   at (+2.00, +2.00) {cube=1  with $A$};
\pic  (two)   at (+1.25, +1.25) {cube=2  with $A$};
\pic  (three) at (+0.50, +0.50) {cube=3  with $C$}; 
\pic  (four)  at (-0.25, -0.25) {cube=4  with $D$};
\pic  (five)  at (-1.00, -1.00) {cube=5  with $B$};
\end{scope}

%%%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~%%%
%%%~~~~~~~~~~~~~~~ Compute/Storage Nodes ~~~~~~~~~~~~~~%%%
%%%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~%%%

\begin{scope}
  \aboxr[40,50,1.4,C1,(11,6.50)] {};
  \aboxr[40,50,1.4,C2,(23,6.75)] {};  
  \aboxr[40,50,1.4,C3,(11,1.70)] {};
  \aboxr[40,50,1.4,C4,(20,2.50)] {};  
  \aboxr[40,50,1.4,C5,(15,4.50)] {};
\end{scope} 

%%%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~%%%
%%%~~~~~~~~~~~~~~~~~ Networking Nodes ~~~~~~~~~~~~~~~~~%%%
%%%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~%%%

\node [xshift=09.5cm,yshift=3.5cm](R1) {\router{}};
\node [xshift=10.5cm,yshift=5.0cm](R2) {\router{}};
\node [xshift=16.5cm,yshift=2.5cm](R3) {\router{}};
\node [xshift=13.5cm,yshift=2.7cm](R4) {\router{}};
\node [xshift=15.5cm,yshift=6.0cm](R5) {\router{}};
\node [xshift=20.0cm,yshift=6.0cm](R6) {\router{}};

%%%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~%%%
%%%~~~~~~~~~~~~ Virtual Network Functions ~~~~~~~~~~~~~%%%
%%%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~%%%

\begin{scope}[xshift = 9cm, yshift = 1cm]
    \node [xshift=6.50cm, yshift = 8cm,server][scale=1.5] (S1){};
    \node [xshift=5.45cm, yshift = 8cm,server][scale=1.5] (S3){};          
    \node [xshift=5.95cm, yshift = 7cm,server][scale=1.5] (S2){};      
    \node [xshift=7.00cm, yshift = 7cm,server][scale=1.5] (S4){}; 
\end{scope}

%%%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~%%%
%%%~~~~~~~~~~~~~~~~~~~ Rack Switches ~~~~~~~~~~~~~~~~~~%%%
%%%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~%%%

%\node[rack switch, xshift=0.1cm,yshift=0.3cm](rack switch 1-a){};

%%%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~%%%
%%%~~~~~~~~~~~~~~~~~~ Layer 3 Switch ~~~~~~~~~~~~~~~~~~%%%
%%%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~%%%

%\node[l3 switch, xshift=1.5cm,yshift=0.5cm](l3 switch 1-a){};


% BEGIN NEW

\node[fill=green!50,tape, draw, tape bend top=none] at (-3, 8) {\sffamily CP/UP};
\node[fill=green!50,tape, draw, tape bend top=none] at (-3.1, 7.9) {\sffamily CP/UP};


\node at (-1,4) [fill=blue!50!., double arrow, draw, minimum height=200, minimum width=60] {};
\shade [shading angle=270,right color=gray!50, left color=gray,xshift=-20,yshift=140] \gear{12}{1}{1.2}{20}{0}{0};
\shade [shading angle=270,right color=gray!50, left color=gray,xshift=-40,yshift=85,rotate=14] \gear{12}{0.8}{1.0}{20}{0}{0};
\node[xshift=-20,yshift=140] at (0,0) {\sffamily RAT1};
\node[xshift=-40,yshift=85] at (0,0) {\sffamily RAT2};

\begin{scope}[scale=0.3, every node/.style={transform shape}, xshift=-1000, yshift=500]
\car
\end{scope}


\node[alice,minimum size=1cm] (B) at (-10,3) {Alice};

% END NEW
\end{tikzpicture}
\end{document}

一层

相关内容