半圆函数的半圆有间隙

Semicircles from semicircle functions have gaps

我有这个代码

reset
set terminal svg enhanced fname 'Times New Roman' rounded dashed standalone
set size ratio 1.0
set style line 1 linecolor rgb '#0060ad' linetype 1 linewidth 1  # blue
set style line 2 linecolor rgb '#dd181f' linetype 1 linewidth 1  # red
set xrange[-10:10]
set yrange[-10:10]
set xzeroaxis linetype 2 linewidth 1
set yzeroaxis linetype 2 linewidth 1
set grid x,y front
#set tics scale 0.75
set xtics 1
set ytics 1
set label at 1,3 point pt 7 ps 0.4
f(x) = -sqrt(25-(x-1)**2)+3
g(x) = sqrt(25-(x-1)**2)+3
plot f(x) with lines ls 1, \
     g(x) with lines ls 2

产生

不确定为什么它没有完成整个半圆,即为什么有间隙?这只是一个解析几何尝试创建一个以 (1,3) 为中心的半径为 5 的圆。欢迎使用其他方法,但我更喜欢直接使用这些函数。

Gnuplot 通过在当前 x 范围内以固定数量的 x 值采样来绘制函数。默认值为 samples=100。您的 x 范围是 [-10:10],这意味着每个函数沿 x 以 0.1 的间隔进行采样。

实际上比这更糟糕,因为 100 个样本包括端点,所以样本实际上是在 20./99 的倍数处采集的,这意味着没有样本恰好在曲线的 +/-4.00000会见面。您可以通过 set samples 101 解决该问题。然后曲线会相交,但不会产生平滑的圆,因为上弧和下弧将在连接处倾斜而不是垂直。

解决这个问题的更好方法是 围绕圆 而不是沿 x 轴取样本,特别是因为大多数沿 x 轴的样本甚至没有贡献。在 gnuplot 中执行此操作的语法是:

set angle degrees
plot sample [t=0:360] '+' using (1+5*cos(t)):(3+5*sin(t)) with lines

分别绘制上弧和下弧

plot sample [t=0:180] '+' using (1+5*cos(t)):(3+5*sin(t)) with lines, \
            [t=180:360] '+' using (1+5*cos(t)):(3+5*sin(t)) with lines