Нахождение линии пересечения между плоскостью и поверхностью - PullRequest
0 голосов
/ 21 декабря 2018

У меня есть 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(), я уверен, что поверхности пересекаются, и поэтому я ожидаю некоторый результат.

...