MATLAB для преобразования графика xy в массив xyz - PullRequest
1 голос
/ 23 июня 2019

У меня есть серия кривых, построенных в формате x против y в MATLAB. Я хочу описать форму, которую они создают на своем пересечении в формате XYZ (2D-массив).

В MATLAB не существует простой функции для преобразования, поэтому мне интересно, есть ли у кого-нибудь быстрый обходной путь.

Вот простой пример. Я создаю сетку по умолчанию:

nx = 100;   % Number of grid points
X = 1;      % Default total grid size (cm)
dx = X/nx;  % Default grid step size (cm)

Я создаю набор парабол и линий, используя свою сетку и масштабированную сетку:

x1 = (-nx/2:1:nx/2-1)*dx;   % grid 1 (cm)
x2 = (-nx/2:1:nx/2-1)*dx*2; % grid 2 (cm)
y1 = x1.^2;                 % parabola 1 
y2 = -x2.^2 + 2;            % parabola 2 
y3 = -1.5*x2-.5;            % line 1
y4 = 1.5*x2-.5;             % line 2

Наконец, я могу построить форму, которую хочу описать:

figure(1)
plot(x1,y1)
hold on;
plot(x2,y2)
hold on;
plot(x2,y3)
hold on
plot(x2,y4)
xlabel('x coordinate (cm)')
ylabel('y coordinate (cm)')

Обратите внимание, что мои координаты x и y указаны в сантиметрах. Я хочу создать 2D матрицу, в которой 1 появляются внутри области "глаз", а 0 появляются снаружи:

https://imgur.com/Zhysy1p

Figure 1

1 Ответ

4 голосов
/ 24 июня 2019

Я бы определил сетку и оценил логическое выражение, соответствующее каждой из четырех функций.Тогда я просто вычисляю их пересечение.

Я не думаю, что это будет работать на разных сетках x1 и x2, потому что вам нужно оценивать функции на одинаковых значениях x.

Примерно так:

nx = 100;   % Number of grid points
X = 1;      % Default total grid size (cm)
dx = X/nx;  % Default grid step size (cm)

xq = (-nx/2:1:nx/2-1)*dx*2;   % grid x (cm)
yq = (-nx/2:1:nx/2-1)*dx*4;   % grid y (cm)


[XX, YY] = meshgrid(xq, yq);

ZZ_1 = (YY > XX.^2); % upper range of function 1
ZZ_2 = (YY < -XX.^2 + 2); % bottom range of function 2
ZZ_3 = (YY > -1.5*XX - 0.5); % upper range of function 3
ZZ_4 = (YY > 1.5*XX - 0.5); % upper range of function 4

ZZ = int8(ZZ_1 & ZZ_2 & ZZ_3 & ZZ_4); % the intersection of all functions

figure;
surf(XX, YY, ZZ);

Intersection of the four logical arrays

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...