Но, видимо, здесь все не так просто, раз ни одна из известных мне программ не может выполнить построение в сферических координатах по точкам.
Как я понял, поверхность в начальном сообщении задана координатами точек в сферической системе координат (с.с.к.), а получить нужно рисунок поверхности в прямоугольной декартовой системе координат (п.д.с.к.). Особенностью большинства пакетов является необходимость задать координаты в виде прямоугольных матриц, в частности, так обстоят дела в Mathcad.
1. Предположим результаты измерений (расчетов) можно представить в виде следующей матрицы: вдоль строки меняются значения угла
, вдоль столбца — значения угла
, а значения — величина радиуса
. (Можно, конечно, чтобы вдоль столбца менялись значение
, а вдоль строки —
). В этом простейшем случае даже Mathcad легко справится с построением рисунка, если поверхность достаточно «плавная». Зная значения
,
и
, рассчитываются матрицы значений координат
X,
Y,
Z. В приводимом ниже рисунке для простоты рассмотрен случай сферы. Mathcad 15.
Вложение:
mathcad.PNG [ 98.16 Кб | Просмотров: 0 ]
2. Более трудный случай — это когда результаты измерений (расчетов) не могут быть представлены в виде матрицы. (В самом крайнем случае значения двух координат, например углов, могут быть случайными числами. Такой вариант часто демонстрируется в примерах.) В этом случае для получения прямоугольных матриц в пакетах часто предусматривают функции выполняющие перерасчет при помощи интерполяции. В matlab (по крайней мере, в старых версиях) нужно явно воспользоваться функцией
griddata. Однако во многих пакетах (например, в matlab, по крайней мере, в старых версиях) такая интерполяция работает, если поверхность является графиком функции двух независимых переменных. Если поверхность не испытывает быстрых изменений высоты, то такая интерполяция позволяет удовлетворительно построить поверхность. См. примеры использования Matlab на
оф. сайте. Однако, если функция меняется быстро, то результат не очень. Пример с верхней полусферой, Octave 4.4
n = 50;
phi = 2*pi*rand(1, n) ;
theta = pi/2*rand(1, n);
rho = 1;
# Запись в файл коорд. точек поверхности в с.с.к. для получения рисунка в gnuplot
fid = fopen('sphere_1.txt', 'wt');
for i=1:n
fprintf(fid, '%17.15f %17.15f %17.15f \n', phi(i), theta(i), rho);
end
fclose(fid);
# Конец записи в ф. координат точек поверхности в с.с.к.
X = rho*cos(phi).*sin(theta);
Y = rho*sin(phi).*sin(theta);
Z = rho*cos(theta);
# Запись в файл коорд. точек поверхности в п.д.с.к. для получения рисунка в gnuplot
fid = fopen('sphere_2.txt', 'wt');
for i=1:n
fprintf(fid, '%20.15f %20.15f %20.15f \n', X(i), Y(i), Z(i))
end
fclose(fid);
# Конец записи в ф. коорд. точек поверхности в п.д.с.к.
[Xi,Yi] = meshgrid (linspace (-rho, rho, 100));
[Xi, Yi, Zi] = griddata(X, Y, Z, Xi, Yi);
surf(Xi, Yi, Zi);
Вложение:
griddata.PNG [ 99.39 Кб | Просмотров: 0 ]
gnuplot позволяет построить рисунок поверхности по данным в файле в виде таблицы или по списку точек линий. Данные для разных линий отделяются пустой строкой. Если линии не должны формировать единую поверхность, то — двумя пустыми строками. Не добавляя пустые строки, попробуем построить рисунки поверхности. Версия 5.0.0 gnuplot.
# Рисунок полусферы по точкам с координатами в сферической системе;
# файл c координатами - sphere_1.txt
set xrange [-1:1]
set yrange [-1:1]
set zrange [ 0:1]
set mapping spherical
set hidden3d
set terminal png
set output "sphere_1.png"
splot 'sphere_1.txt' with pm3d
Вложение:
sphere_1.png [ 15.36 Кб | Просмотров: 0 ]
В случае координат, заданных в п.д.с.к., использование стиля pm3d привело к предупреждению
Код:
Warning: Single isoline (scan) is not enough for a pm3d plot.
Hint: Missing blank lines in the data file? See 'help pm3d' and FAQ.
Получить хоть какой-то рисунок получилось с with lines
# Рисунок полусферы по точкам с координатами в п.д.с.к.;
# файл c координатами - sphere_2.txt
set xrange [-1:1]
set yrange [-1:1]
set zrange [ 0:1]
set hidden3d
set terminal png
set output "sphere_2.png"
splot 'sphere_2.txt' with lines
Вложение:
sphere_2.png [ 7.56 Кб | Просмотров: 2400 ]
В общем, с ходу у меня в gnuplot что-то не очень получилось.
Golden Software Surfer 11 с настройками по умолчанию смог построить поверхность по данным shpere_2.txt (но очень лихо экстраполировал данные).
Вложение:
sphere_SurfaceMap_GSS.png [ 269.28 Кб | Просмотров: 0 ]
(Surfer предназначен для получения по нерегулярным данным регулярных сеток; возможности достаточно большие.)