나는 다음 코드를 작성했습니다.
\documentclass[tikz,border=10pt]{standalone}
\usepackage{tikz}
\begin{document}
\pagestyle{empty}
\begin{tikzpicture}
% Sprung mass
\shade[top color=gray, bottom color=white, shading angle={135}]
[draw=black,fill=gray!20,rounded corners=1.2ex,very thick] (1.5,.5) rectangle (6.5,2.5);
\draw (10,1.5) node {Sprung mass};
\draw (4,1.5) node {$M$};
\draw[->,very thick] (1.5,1.5) -- (0,1.5) -- (0,0);
\draw (0,-0.5) node {$Z$};
% Suspension
\draw[-,very thick] (2.5,.5) -- (3,0.25) -- (2.5,0) -- (3,-.25) -- (2.5,-.5) -- (3,-.75) -- (2.5,-1) -- (3,-1.25) -- (2.5,-1.5) -- (3,-1.75);
\draw (2,-0.5) node {$K_s$};
\draw[-,very thick] (5,.5) -- (5,-.3);
\draw[draw=black,fill=black,very thick] (4.7,-.3) rectangle (5.3,-.5);
\draw[-,very thick] (4.5,-.3) -- (4.5,-.7) -- (5.5,-.7) -- (5.5,-.3);
\draw[-,very thick] (5,-.7) -- (5,-1.75);
\draw (6,-0.5) node {$C_s$};
\draw (10,-0.5) node {Suspension};
% Unsprung mass
\shade[top color=gray, bottom color=white, shading angle={135}]
[draw=black,fill=gray!20,rounded corners=1.2ex,very thick] (2,-1.75) rectangle (6,-2.75);
\draw (10,-2.25) node {Unsprung mass};
\draw (4,-2.25) node {$m$};
\draw[->,very thick] (2,-2.25) -- (0,-2.25) -- (0,-3.75);
\draw (0,-4.25) node {$Z_u$};
% Tire
\draw[-,very thick] (3.75,-2.75) -- (4.25,-3) -- (3.75,-3.25) -- (4.25,-3.5) -- (3.75,-3.75) -- (4.25,-4) -- (3.75,-4.25) -- (4.25,-4.5) -- (3.75,-4.75) -- (4.25,-5);
\draw (3.25,-4) node {$K_t$};
\draw (10,-4) node {Tire};
% Road
\draw[-,thick] (0.5,-5) -- (0.0,-5.5);
\draw[-,thick] (1.0,-5) -- (0.5,-5.5);
\draw[-,thick] (1.5,-5) -- (1.0,-5.5);
\draw[-,thick] (2.0,-5) -- (1.5,-5.5);
\draw[-,thick] (2.5,-5) -- (2.0,-5.5);
\draw[-,thick] (3.0,-5) -- (2.5,-5.5);
\draw[-,thick] (3.5,-5) -- (3.0,-5.5);
\draw[-,thick] (4.0,-5) -- (3.5,-5.5);
\draw[-,thick] (4.5,-5) -- (4.0,-5.5);
\draw[-,thick] (5.0,-5) -- (4.5,-5.5);
\draw[-,thick] (5.5,-5) -- (5.0,-5.5);
\draw[-,thick] (6.0,-5) -- (5.5,-5.5);
\draw[-,thick] (6.5,-5) -- (6.0,-5.5);
\draw[-,thick] (7.0,-5) -- (6.5,-5.5);
\draw[-,thick] (7.5,-5) -- (7.0,-5.5);
\draw[-,thick] (8.0,-5) -- (7.5,-5.5);
\draw[-,thick] (8.5,-5) -- (8.0,-5.5);
\draw[->,very thick] (8.5,-5) -- (0,-5) -- (0,-6.5);
\draw (0,-7) node {$Z_r$};
\end{tikzpicture}
\end{document}
결과는 다음과 같습니다.
질문은 그렇지 않습니다.어떻게이 모델을 그려보세요. 하지만 저보다 더 간단한 코드로 그리는 더 좋고 짧은 방법이 있다면요.
답변1
이것은 Tikz를 사용해 본 것입니다. 꽤 힘든 작업이었지만 코드는 훨씬 더 짧고 이해하기 쉬워야 합니다.
변경 사항 및 구현:
foreach
작은 대각선을 그리는 명령을 사용했습니다 . 당신이 작성해야 했던 모든 것 대신에 한 줄.- 커넥터 모양을 만들기 위해 비틀었습니다.제이크의 솔루션두께 등을 고정합니다.
- . 내부에서 노드 속성을 설정합니다
\tikzset
. 이렇게 하면 여러 옵션을 활성화하려면 하나의 키워드만 입력하면 됩니다. 결과: 공간 절약. - 조직 목적을 위해 노드를 먼저 만들고 경로를 나중에 만들었습니다. 오른쪽 노드는 원래 라벨로 만든 것인데, 노드를 이용해서 쓰는 게 위치 지정이 더 쉬웠어요.
- 지그재그 선은 장식을 사용하여 만들어졌으며
midway
위치에 노드를 배치했습니다. 모두 내부의 속성을 사용하므로snake arrow
여기서 편집하면 이 키를 사용하는 모든 경로가 수정됩니다. - 위치 지정, 계산, 화살표, 장식은 모두 Tikz 라이브러리를 사용하여 수행되었습니다. 서문을 확인하세요. 이것은 미래에 당신에게 도움이 될 수 있습니다.
산출
암호
\documentclass[tikz,border=10pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{arrows, calc,decorations.pathmorphing,positioning,decorations.markings}
\tikzset{
shadedrec/.style={
rectangle,
draw=black,
top color=gray,
bottom color=white,
shading angle={135},
text width=3cm,
inner sep=1em,
rounded corners=1.2ex,
very thick,
text centered},
snake arrow/.style={
decorate,
decoration={zigzag,amplitude=3mm,segment length=5mm,post length=0mm}},
damper/.style={
very thick,
decoration={markings,
mark connection node=dmp,
mark=at position 0.5 with
{
\node (dmp) [very thick,transform shape,text width=.3cm,rotate=-90,minimum height=3pt,draw=none, fill=black,outer xsep=2pt, outer ysep=1pt] {};
\draw [very thick] ($(dmp.north east)+(-.6pt,0)$) -- ($(dmp.south east)+(-.6pt,0)$) -- ($(dmp.south west)+(-.6pt,0)$) -- ($(dmp.north west)+(-.6pt,0)$);
\draw [very thick,rotate=-90] ($(dmp.north)+(0,-5pt)$) -- ($(dmp.north)+(0,5pt)$);
}
}, decorate}
}
\begin{document}
\pagestyle{empty}
\begin{tikzpicture}
% Shapes
\node[shadedrec, anchor=center] (S1) at (4,3) {$M$};
\node[shadedrec, anchor=center, below=2 of S1] (S2) {$m$};
%Nodes side
\node[anchor=center,text centered,right=2cm of S1.east] (sm) {Sprung mass};
\node[below=of sm] (susp) {Suspension};
\node[below=of susp] (usm) {Unsprung mass};
\node[below=of usm] {Tire};
% Paths
%side arrows
\draw[->,very thick] (S1.west) -- ++ (-1.5,0) -- ++ (0,-1.5) node[below] {$Z$};
\draw[->,very thick] (S2.west) -- ++ (-1.5,0) -- ++ (0,-1.5) node[below] {$Z_u$};
%zigzag lines
\draw[very thick, snake arrow] ($(S1.south west)!.5!(S1.south)$) -- ++ (0,-2) node[left,midway,xshift=-1em] {$K_s$};
\draw[very thick, snake arrow] (S2.south) -- ++ (0,-2)
node[left,midway,xshift=-1em] {$K_t$};
%Connector shape
\draw[damper] ($(S2.north east)!.5!(S2.north)$) -- ($(S1.south east)!.5!(S1.south)$) node[right,midway,xshift=1em] {$C_s$};
% Road
\coordinate (A) at ($(S2.west)+(5.5,-2.45)$);
\draw[->,very thick] (A) -- ++(-7,0) -- ++ (0,-1.5) node[below] {$Z_r$};
\begin{scope}[shift={($(S2.west)+(-1.5,-2.45)$)}]
\foreach \x in {0.5,1,...,7} { %This one draws the little diagonal lines
\draw (\x,0) -- ({\x-.5},-.5);
}
\end{scope}
\end{tikzpicture}
\end{document}
답변2
다음의 루프 구성을 활용할 수 있습니다 tikz
.
\foreach \k in {0.5,1.0,...,8.5} {
\draw[-,thick] (\k,-5) -- (\k-0.5,-5.5);
}