Расчет гауссовой кривизны с точками XYZ - PullRequest
0 голосов
/ 03 мая 2018

У меня есть точки, организованные в трех массивах - X, Y и Z. Я хочу рассчитать гауссову кривизну для этих точек.

Я нашел код , который делает это (ниже), но, похоже, для этого требуется сетка точек. Я знаю, что могу сделать [x,y] = meshgrid(X,Y), чтобы получить два ввода, но как я могу получить z?

function gc = gcurvature(x,y,z)

[xu,xv]     =   gradient(x);
[xuu,xuv]   =   gradient(xu);
[xvu,xvv]   =   gradient(xv);

[yu,yv]     =   gradient(y);
[yuu,yuv]   =   gradient(yu);
[yvu,yvv]   =   gradient(yv);

[zu,zv]     =   gradient(z);
[zuu,zuv]   =   gradient(zu);
[zvu,zvv]   =   gradient(zv);

for i=1:(size(z,1))
    for j=1:(size(z,2))
        Xu          =   [xu(i,j) yu(i,j) zu(i,j)];
        Xv          =   [xv(i,j) yv(i,j) zv(i,j)];
        Xuu         =   [xuu(i,j) yuu(i,j) zuu(i,j)];
        Xuv         =   [xuv(i,j) yuv(i,j) zuv(i,j)];
        Xvv         =   [xvv(i,j) yvv(i,j) zvv(i,j)];
        E           =   dot(Xu,Xu);
        F           =   dot(Xu,Xv);
        G           =   dot(Xv,Xv);
        m           =   cross(Xu,Xv);
        n           =   m/sqrt(sum(m.*m));
        L           =   dot(Xuu,n);
        M           =   dot(Xuv,n);
        N           =   dot(Xvv,n);
        gc(i,j)      =   ((L*N)-M^2)/((E*G)-F^2);
    end
end

1 Ответ

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

Если я правильно понимаю вашу проблему, вы должны использовать другую «перегрузку» (то есть синтаксис) meshgrid, , которая имеет 3 выхода :

[x,y,z] = meshgrid(X,Y,Z);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...