Нарисуйте 3D модель более чем одной кривой в Matlab с векторами - PullRequest
0 голосов
/ 23 мая 2018

Я делаю проект, который включает в себя создание 3D-модели роговицы в Matlab.У меня есть 6 plot3 на том же графике, чтобы нарисовать одну роговицу

enter image description here

, но теперь я хочу поверхностный график.

enter image description here

Не обращайте внимания на кривую ориентацию.Обратите внимание, что все plot3 имеют x, y и z, которые являются векторами

Заранее спасибо

1 Ответ

0 голосов
/ 23 мая 2018

На вашем месте я бы использовал команду Surf doku surf .Используется для отображения [x, y, z] данных.Поскольку у вас не так много наборов данных (всего 6), вам придется интерполировать все остальные значения.Поэтому я бы использовал рассеянную интерполяционную функцию Доку рассеянный интерполант .

!!!!!!!!!!!!!! Позаботьтесь обо всем, что это псевдокод !!!!!!!!!!!!!!!!

F = scatteredInterpolant(x_existing,y_existing,z_existing);

создает рассеянный интерполированный объект.Вы уже добавили туда свои уже существующие данные.После этого вы генерируете точки, в которых вы хотите интерполировать:

%generates samples from -4 t0 4 in 0.05 steps
   [x_sample,y_sample] = meshgrid(-4:0.05:4,-4:0.05:4);

Теперь вы вычисляете подобранные значения z, используя разбросанный интерполант obj

z_interpolated=F(x_sample,y_sample) %interpolates
surf(x_sample,y_sample,z_interpolated) %plots with surf between -4 and 4

!!!!!!!!!!!!!!! Отсюда рабочий код !!!!!!!!!!!!!!!!!!!!!

   %serialiasation of data (special for this usecase)
x_data=[h0(30:632,6);(a30(28:408,3))+0.527;(a60(276:632,3));(a90(26:575,3))+3.417;(a120(188:586,3))-0.6625;(a150(16:380,3))+1.173];
y_data=[(h0(30:632,5));((a30(28:408,2))-0.9128);(a60(276:632,2));(a90(26:575,2));(a120(188:586,2))-0.3825;((a150(16:380,2))+2.032)];
z_data=[yA0;yA30+0.162;yA60;yA90+0.837;yA120+0.135;yA150+0.135];

% cleaning the data of nan values
x_data=x_data(~isnan(z_data));
y_data=y_data(~isnan(z_data));
z_data=z_data(~isnan(z_data));%random for the looks


%interpolating
F=scatteredInterpolant(x_data,y_data,z_data);
%read yourself what this does
F.Method = 'natural';
F.ExtrapolationMethod = 'none';

%choosing sample points
[x_sample,y_sample] = meshgrid(-6:0.05:6,-6:0.05:6);

%interpolation
z_interpolated=F(x_sample,y_sample);
%plot
surf(x_sample,y_sample,z_interpolated)

Надеюсь, я смог вам помочь.Если вы попробуете это, и это сработает, было бы очень приятно, чтобы вы опубликовали здесь рабочий код, чтобы в будущем здесь было работающее решение.

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