动机
我正在学习流体力学课程,我正在制作包含真实流体示例图像的幻灯片。我想画出水撞击障碍物(例如立方体)的流线,但我做不到这一点。
问题
由于不知道如何表示它,我最初询问 ChatGPT 是否可以给我一个可以表示它的代码,但经过几次尝试后(我发誓我试图让他这样做至少 20 次,但他创建了一系列毫无意义的图画)这是它能给我的最好的结果(在我要求它绘制的内容旁边):
我无法修复的 4 个错误是:
- 事实上,我不想要两个独立的向量,而是一条带有更多“^”的实线
- 线路不得穿过障碍物
- 线条不得平行,但必须向上加粗以指示更大的水流量,并且必须在障碍物前后消散
- 我无法让它产生涡流
有人可以帮帮我吗?
作为答案,我还会接受另一个能够生成此类代码的 AI(可能是免费的)(只是为了不在这里打扰你)
我保留 ChatGPT 生成的代码:
\begin{tikzpicture}
\filldraw[gray!40] (2,0) rectangle (6,5);
\foreach \y in {0.5,1,1.5,2,2.5,3,3.5,4,4.5,5} {
\draw[->] (0,\y) .. controls (2,\y+0.8) and (4,\y+1.2) .. (6,\y);
\draw[->] (6,\y) .. controls (7,\y+0.2) and (7.5,\y-0.2) .. (8,\y);
}
\end{tikzpicture}
答案1
以下是一种方法:
- 在手绘草图中引入一些坐标
- 画出第一幅非常粗略的图画
- 第二步,引入一些改进
从你的绘图来看:
第一和第二个结果:
代码:
- 装饰是从以前的解决方案中复制而来的,因此可能有点过度或不平衡
- 你会明白的
- 直线被曲线取代,使用
out
和in
角度
\documentclass[10pt,border=3mm,tikz]{standalone}
\usetikzlibrary{decorations.markings}
\begin{document}
% === 1st sketch from your manual drawing ===
\begin{tikzpicture}
\node at (0,3.5) {1st sketch};
\draw[help lines] (-3,0) grid (3,3);;
% ~~~ box ~~~~~~~~~~~~~~~~
\draw (-1,0) rectangle (1,1.7);
% ~~~ flow lines ~~~~~~~~~~~~
\draw (-3,3) -- (3,3); % A
\draw (-3,2.5) -- (0,2.8) -- (3,2.5); % B
\draw (-3,1.8) -- (0,2.5) -- (3,1.8); % C
\draw (-3,.7) -- (0,2) -- (3,.7); % D
% ~~~ vortices ~~~~~~~~~~~~~~~
\draw (-2.8, 0) -- (-1.5,.6) -- (-1.8, 1) -- (-1.8,.5);
\draw (-1.5, 0) -- (-1.3,.4) -- (-1.5,.5) -- (-1.4,.4);
\draw (1.5,1.1) -- ( 1.8,.5) -- ( 1.3,.3) -- ( 1.5,.5);
\end{tikzpicture}
% ~~~ 2nd: refinements ~~~
\begin{tikzpicture}
[decoration={
markings,
mark=between positions 0.06 and .5 step 5.3mm with {\arrow{stealth}} ,
mark=between positions 0.6 and .8 step 6mm with {\arrow{stealth}} ,
mark=between positions 0.835 and 1 step 6mm with {\arrow{stealth}}
}]
\draw[help lines] (-3,0) grid (3,3);
\node at (0,3.5) {2nd: refinements};
% ~~~ box ~~~~~~~~~~~~~~~~
\draw[fill=gray!30] (-1,0) rectangle (1,1.7);
% ~~~ flow lines ~~~~~~~~~~~~
\draw[postaction={decorate}] (-3,3) -- (3,3); % A
\draw[postaction={decorate}] (-3,2.5) to[out=7,in=180]
( 0,2.8) to[out=0,in=173] (3,2.5); % B
\draw[postaction={decorate}] (-3,1.8) to[out=15,in=180]
( 0,2.5) to[out=0,in=165] (3,1.8); % C
\draw[postaction={decorate}] (-3,.7) to[out=20,in=180]
( 0,2) to[out=0,in=160] (3,.7); % D
% ~~~ vortices ~~~~~~~~~~~~~~~
\draw[postaction={decorate}] (-2.8, 0) to[out=20,in=220]
(-1.5,.6) to[out=60,in=50]
(-1.8, 1) to[out=230,in=210] (-1.8,.5);
\draw[postaction={decorate}] (-2.1, 0) to[out=10,in=0]
(-1.3,.4) -- (-1.4,.4);
\draw[postaction={decorate}] (1.5,1.1) to[out=-40,in=90]
( 1.8,.5) to[out=270,in=-65]
( 1.3,.3) to[out=115,in=100] ( 1.5,.5);
\end{tikzpicture}
% to[out=,in=]
% ~~~ drawn by Artificial Incompetence ~~~~~~~~~~~~~~~
\begin{tikzpicture}
\node at (4,6.5) {coded via Artificial Incompetence:};
\filldraw[gray!40] (2,0) rectangle (6,5);
\foreach \y in {0.5,1,1.5,2,2.5,3,3.5,4,4.5,5} {
\draw[->] (0,\y) .. controls (2,\y+0.8) and (4,\y+1.2) .. (6,\y);
\draw[->] (6,\y) .. controls (7,\y+0.2) and (7.5,\y-0.2) .. (8,\y);
}
\end{tikzpicture}
\end{document}