У меня есть 2 разных набора трехмерных точек, через которые я подгоняю плоскость и поверхность.Эти две поверхности пересекаются при визуализации с помощью функции Matlab plot()
.Однако, когда я пытаюсь сгенерировать те же самые графики с подобранными функциями, я замечаю, что они не пересекаются.
Используя функции contours()
Matlab и interp2()
, я попытался извлечь линию пересечения извстроенные функции.Тем не менее, я не получаю никаких результатов, так как две поверхности не пересекаются с созданными поверхностными графиками, полученными из функции meshgrid()
.
clc; clear; close all;
Xs = [18.5, 18, 17.5
18.5, 18, 16.5
19.5, 18, 17.5
19.5, 18, 16.5
17.5, 18, 18.5
16.5, 18, 18.5];
Xn = [18.5, 18.5, 18
18.5, 19.5, 18
19.5, 18.5, 18
19.5, 19, 17.5
19.5, 19.5, 17
18, 18.5, 18.5
18, 19.5, 18.5];
% fit plane
[sfp,gofp,obj] = fit([Xs(:,1), Xs(:,3)],Xs(:,2), 'poly11');
plot(sfp,[Xs(:,1), Xs(:,3)],Xs(:,2))
hold on;
% fit surface
[sfs,gofs,obj] = fit([Xn(:,1), Xn(:,3)],Xn(:,2), 'poly22');
plot(sfs,[Xn(:,1), Xn(:,3)],Xn(:,2))
% generate grid
[x, z] = meshgrid(linspace(-20, 20));
% expressions for both surfaces as derived from curve fitting
Yp = sfp.p10*x + sfp.p01*z + sfp.p00;
Ys = sfs.p20*(x^2) + sfs.p02*(z^2) + sfs.p10*x + sfs.p01*z + sfs.p11*x*z + sfs.p00
% Plots the surfaces from the fitted plane equations
surface(x, y, yp, 'FaceColor', [0.5 1.0 0.5], 'EdgeColor', 'none');
surface(x, y, ys, 'FaceColor', [1.0 0.5 0.0], 'EdgeColor', 'none');
view(3); camlight; axis vis3d
% Obtain the eq. of intersection
ydiff = ys - yp;
C = contours(x, z, ydiff, [0 0]);
% Extract the x- and y-coords from the contour matrix.
xcoord = C(1, 2:end);
zcoord = C(2, 2:end);
% Interpolate on the first surface to find z-coords for the intersection
% line.
ycoord = interp2(x, z, yp, xcoord, zcoord);
% Visualize the line.
line(xcoord, ycoord, zcoord, 'Color', 'b', 'LineWidth', 5);
Я не знаю, какими могут быть ожидаемые результаты, но в отличие отрезультаты из contours()
, я уверен, что поверхности пересекаются, и поэтому я ожидаю некоторый результат.