Октава: переместить контурную линию в 3d? - PullRequest
0 голосов
/ 11 декабря 2018

в октаве. Я хочу создать контурную линию функции в 3D, а затем переместить ее в пространство:

x1=-4:0.1:4;

[X,Y]=meshgrid(x1,x1);

Z= X.^2+2*Y.^2;

hx=contour(X,Y,Z,[4 4]);

Итак, я получаю контур.Как переместить это?

Я хотел бы перевести это, добавив вектор [a, b, c].

РЕДАКТИРОВАТЬ:

См.вот например.Переместите синий эллипс в положение желтого.

an ellipse moved

Спасибо

Карл

Ответы [ 3 ]

0 голосов
/ 13 декабря 2018

Теперь, когда вы уточнили, что вам нужно, мы можем предложить решение.
Сначала нам нужно восстановить координаты выбранного счетчика (Z = 4) с помощью countourc

x1=-4:0.1:4; 
[X,Y]=meshgrid(x1,x1);
Z= X.^2+2*Y.^2;
C=contourc(X,Y,Z,[4 4]);

Там137 (x, y) точек в контуре

size (C)
ans =

     2   138

C(:,1:4)
ans =

     4.000000    -0.280000    -0.200000    -0.100000
   137.000000    -1.400000    -1.406897    -1.412069

C (1,1) - это высота Z, а C (2,1) - количество пар, поэтому мы можем извлечь исходную позициюконтура с;

CX=C(1,2:end);
CY=C(2,2:end);
CZ=repmat([4],1,C(2,1));

, а затем с помощью графика в исходной позиции пространства и с Z = 0, то есть проекцией на плоскость XY

plot3(CX,CY,CZ,"color","yellow");
hold on;
plot3(CX,CY,CZ-4,"color","blue");
print -djpg figure3.jpg

3D contour and projection

0 голосов
/ 14 декабря 2018

извините за путаницу с контуром и контуром3.Теперь я нашел решение, используя contour3, как @andy предложил:

x1=-4:0.1:4;
[X,Y]=meshgrid(x1,x1);
Z= X.^2+2*Y.^2;
contour3(X,Y,Z,[2 2]);
hold on
[hx,c]=contour3(X+1,Y+2,Z,[2 2]);
set(c,"zlevelmode","manual","zlevel",3)

Это дает: enter image description here

0 голосов
/ 11 декабря 2018

Как упоминал Энди, контур - это двухмерное изображение, поскольку оно представляет собой проекцию пересечения трехмерной кривой с заданными плоскостями, параллельными плоскости XY.Например, кривые высоты на географических картах - это контуры, а карта - 2D.

Чтобы объяснить разницу между 3D и 2D контуром, я нанес трехмерную поверхность ваших данных и 3 нескольких счетчика.Вместо вашего значения высоты 4 я использую 0,5,10..50, чтобы иметь кратные контуры для различных значений Z

x1=-4:0.1:4; 
[X,Y]=meshgrid(x1,x1);
Z= X.^2+2*Y.^2;
subplot(2,2,1)
surf(X,Y,Z);
subplot(2,2,2)
contour(X,Y,Z,0:5:50);
subplot(2,2,3)
contour(X+2,Y+2,Z,0:5:50);
subplot(2,2,4)
contour(X,Y,Z+4,0:5:50);
print -djpg figure2.jpg

Octave multiplot

Как вы можете видеть, участок 1 (верхний, левый) - это трехмерная поверхность, а участок 2 (верхний, правый) - это двухмерное изображение, отображающее все проекции для Z от 5 до 50 шаг 5. Контур для Z = 0это просто точка и не нанесена на график.

На вспомогательном участке 3 (внизу слева) мы перемещаем фигуру в направлении XY для X, Y = 2,2. Формы контура не изменяются;диапазоны X, Y вместо -4: 4 теперь равны -2: 6.

На вспомогательном участке 4 (внизу, справа) мы перемещаем фигуру в направлении Z для значения 4. Формы контура отличаютсяпоскольку пересечение с плоскостями, параллельными плоскости XY, различно.

...