Я хочу построить двумерную функцию полярных координат r
и theta
в трехмерных декартовых координатах. У меня есть, что (извините о плохой математике форматирования, LaTeX не совместимы, кажется)Как построить двумерную функцию в трехмерном пространстве с MATLAB?
f(r,theta) = r/2 * (cos(theta - pi/4) + sqrt(1 + 1/2 * cos(2*theta)))
Преобразование r
и theta
в декартовых координатах
x = r * cos(theta), y = r * sin(theta)
Далее, домен -1<r<1
и 0<theta<2 * pi
, которые я определяю по
r = -1:2/50:1;
и
theta = 0:2*pi/50:2*pi;
Дает мне два вектора одинаковых размеров.
я могу определить x
и y
значения, используемые для построения графиков в виде векторов строк по
x = r. * cos(theta);
и
y = r. * sin(theta);
Так что теперь мне нужно определить z
значения, которые будут зависеть от значений от x
и y
. Я думал, что должен сделать 101x101, где каждый элемент матрицы содержит точку данных конечной поверхности. Но как мне это сделать? Я думал об использовании двойных for
цикла:
for i=1:numel(r)
for j=1:numel(theta)
z(i,j) = r(i)/2 .* cos(theta(j) - pi/4) + r(i).*sqrt(1 + 1/2 * cos(2.*theta(j)));
end
end
Тогда просто surf(z)
Хотя это, безусловно, дает мне поверхность, это дает мне неправильную поверхность! Я не знаю, что здесь происходит. Неправильная поверхность приведена на рисунке 1, а правильная приведена на рисунке 2. Может ли кто-нибудь помочь мне? Для справки, правильный поверхность была построена с GeoGebra, используя
A = Function[<expression 1>, <Expresison 2>, <Expression 3>, <var 1>, <start>, <stop>, <var 2>, <start>, <stop>]
Рисунок 1. Неправильная поверхность.
Рисунок 2. Правильная поверхность.
Вы пытаетесь конвертировать из полярной (сферической) в декартовых? Или от цилиндрической до декартовой? – toshiomagic
Постарайтесь выяснить, помогает ли [это] (https://www.mathworks.com/matlabcentral/fileexchange/13200-3d-polar-plot). Мне удалось запечатлеть только верхнюю половину поверхности. – EBH