如何消除TikZ绘图时曲线相交所产生的拼合痕迹?

发布于 2025-02-09 22:49:09

使用TikZ绘制了三条曲线,其中幂函数曲线与椭圆曲线相交的部分能看出有拼合的痕迹,请问有办法消除这种拼合痕迹吗?image.png

整体图像:
image.png

\documentclass[tikz,border=10pt]{standalone}


\begin{document}
      
\begin{tikzpicture}[scale=0.5]
  \draw[domain=0:8, smooth, variable=\x]  plot ({\x}, {1/16*pow(\x, 2)});   
  \draw[domain=0:8, smooth, variable=\x]  plot ({\x}, {-1/16*pow(\x, 2)});
  \draw (8,0) ellipse (0.4cm and 3.9925cm);
\end{tikzpicture}



  
\end{document}

查看更多

关注者
0
被浏览
243
Sagittarius Rover
Sagittarius Rover 2025-02-09
我要成为Typst糕手/(ㄒoㄒ)/~~

有的,考虑line cap=roundline join=round命令(可以texdoc tikz搜索)。

终于找到有人和我一样放大5000%倍pdf欣赏自己的TiKZpicture的了(握手)

\documentclass[tikz,border=10pt]{standalone}
\begin{document}
\begin{tikzpicture}[scale=.5,line cap=round,line join=round]
  \draw[domain=0:8, smooth, variable=\x]  plot ({\x}, {1/16*pow(\x, 2)});   
  \draw[domain=0:8, smooth, variable=\x]  plot ({\x}, {-1/16*pow(\x, 2)});
  \draw (8,0) ellipse (.4cm and 4cm);
\end{tikzpicture}%但我感觉还是差点意思

%如果不是完全追求 精确的函数关系的话
%可以试试控制点(?)
\begin{tikzpicture}[scale=.5,line cap=round,line join=round]
    \draw (0,0) .. controls (4,-.3) and (6,-2.3) .. (7.958,-3.98);
    \draw (0,0) .. controls (4,.3) and (6,2.3) .. (7.958,3.98);
    \draw (8,0) ellipse (.4 and 4);
\end{tikzpicture}

%不过代码似乎也不够优雅...

\end{document}

如果是精确的两条直线分别连接了同一个点的话,前面的round命令可以自动让这一切保持圆滑,但题主的问题中幂函数椭圆方程在数学上似乎本身就是相交的,这也许是导致出现需要微调的原因(?)

2 个回答
Skyrmion
Skyrmion 2025-02-09
Looking forward to my Ph.D. offer...

Edit

或者你可以用 parabola 路径绘制抛物线,然后在同一条路径中绘制椭圆弧,然后再绘制抛物线返回原点,这样效果或许会更好些.

image.png

这个 solution 的方案见最下方代码的上半部分的 tikzpicture 环境


Original Answer

添加 line cap = round,然后根据你画的抛物线 1/16*pow(8, 2),那么切点坐标是 8^2/16 = 4,那么椭圆的半长州值我也给你改了改,拼合痕迹没了.

但是还是会相交一点,这个问题是数学问题,俾人数学能力有限,你可以请教下数学方面的同学(比如改用别的曲线)


\documentclass[tikz, border = 10pt]{standalone}

\begin{document}

\begin{tikzpicture}[scale = .5]
  \draw (8,0) ellipse (.4 and 4);
  \draw [ line join = round ] (0,0) parabola (8,4) arc (90:-90:.4 and 4) parabola bend (0,0) (0,0) -- cycle;
\end{tikzpicture}
      
\begin{tikzpicture}[scale = .5]
  \draw[domain=0:8, smooth, variable=\x, line cap = round]  plot ({\x}, {1/16*pow(\x, 2)});   
  \draw[domain=0:8, smooth, variable=\x, line cap = round]  plot ({\x}, {-1/16*pow(\x, 2)});
  \draw (8,0) ellipse (.4 and 4);
\end{tikzpicture}
  
\end{document}

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览