Полукруги из функций полукруга имеют пробелы

#gnuplot

Вопрос:

У меня есть этот код

 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  

который производит введите описание изображения здесь

Не уверен, почему он не завершил весь полукруг, то есть, почему пробелы? Это просто попытка аналитической геометрии создать круг радиусом 5 с центром в точке (1,3). Приветствуются другие подходы, но я бы предпочел использовать непосредственно эти функции.

Ответ №1:

Gnuplot рисует функцию путем выборки с фиксированным числом значений x в текущем диапазоне x. Значение по умолчанию равно samples=100 . Ваш диапазон x равен [-10:10], так что это означает, что каждая функция отбирается с интервалами 0,1 вдоль x.

На самом деле это хуже, чем это, потому что 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  

Комментарии:

1. Да, Гнуплот «глубокие знания». Где я тоже могу почерпнуть эти глубокие знания? Все, что я нашел (по крайней мере, в сети), кажется одноразовым.

2. Руководство пользователя довольно глубокое, но, по общему признанию, трудно найти подходящее место для погружения, если вы еще не знаете, что ищете. Домашняя страница проекта по адресу gnuplot.info содержит ссылки на две книги и онлайн-коллекцию проработанных демо-версий.