Advertisement
Guest User

Untitled

a guest
Feb 21st, 2019
225
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 1.74 KB | None | 0 0
  1. function [K,H,Pmax,Pmin] = surfature(X,Y,Z),
  2. % SURFATURE -  COMPUTE GAUSSIAN AND MEAN CURVATURES OF A SURFACE
  3. %   [K,H] = SURFATURE(X,Y,Z), WHERE X,Y,Z ARE 2D ARRAYS OF POINTS ON THE
  4. %   SURFACE.  K AND H ARE THE GAUSSIAN AND MEAN CURVATURES, RESPECTIVELY.
  5. %   SURFATURE RETURNS 2 ADDITIONAL ARGUEMENTS,
  6. %   [K,H,Pmax,Pmin] = SURFATURE(...), WHERE Pmax AND Pmin ARE THE MINIMUM
  7. %   AND MAXIMUM CURVATURES AT EACH POINT, RESPECTIVELY.
  8. % First Derivatives
  9. [Xu,Xv] = gradient(X);
  10. [Yu,Yv] = gradient(Y);
  11. [Zu,Zv] = gradient(Z);
  12. % Second Derivatives
  13. [Xuu,Xuv] = gradient(Xu);
  14. [Yuu,Yuv] = gradient(Yu);
  15. [Zuu,Zuv] = gradient(Zu);
  16. [Xuv,Xvv] = gradient(Xv);
  17. [Yuv,Yvv] = gradient(Yv);
  18. [Zuv,Zvv] = gradient(Zv);
  19. % Reshape 2D Arrays into Vectors
  20. Xu = Xu(:);   Yu = Yu(:);   Zu = Zu(:);
  21. Xv = Xv(:);   Yv = Yv(:);   Zv = Zv(:);
  22. Xuu = Xuu(:); Yuu = Yuu(:); Zuu = Zuu(:);
  23. Xuv = Xuv(:); Yuv = Yuv(:); Zuv = Zuv(:);
  24. Xvv = Xvv(:); Yvv = Yvv(:); Zvv = Zvv(:);
  25. Xu          =   [Xu Yu Zu];
  26. Xv          =   [Xv Yv Zv];
  27. Xuu         =   [Xuu Yuu Zuu];
  28. Xuv         =   [Xuv Yuv Zuv];
  29. Xvv         =   [Xvv Yvv Zvv];
  30. % First fundamental Coeffecients of the surface (E,F,G)
  31. E           =   dot(Xu,Xu,2);
  32. F           =   dot(Xu,Xv,2);
  33. G           =   dot(Xv,Xv,2);
  34. m           =   cross(Xu,Xv,2);
  35. p           =   sqrt(dot(m,m,2));
  36. n           =   m./[p p p];
  37. % Second fundamental Coeffecients of the surface (L,M,N)
  38. L           =   dot(Xuu,n,2);
  39. M           =   dot(Xuv,n,2);
  40. N           =   dot(Xvv,n,2);
  41. [s,t] = size(Z);
  42. % Gaussian Curvature
  43. K = (L.*N - M.^2)./(E.*G - F.^2);
  44. K = reshape(K,s,t);
  45. % Mean Curvature
  46. H = (E.*N + G.*L - 2.*F.*M)./(2*(E.*G - F.^2));
  47. H = reshape(H,s,t);
  48. % Principal Curvatures
  49. Pmax = H + sqrt(H.^2 - K);
  50. Pmin = H - sqrt(H.^2 - K);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement