Нахождение кривых Monkey Saddle - PullRequest
0 голосов
/ 31 октября 2018
  veclength = @(vec) sqrt(dot(vec, vec));
normalvector = @(surf, u, v) simplify(cross(diff(surf, u), diff(surf, v)));
tangentplane = @(surf, u, v, x, y, z) dot([x, y, z] - ...
    surf, normalvector(surf, u, v)== 0);
unitnorm = @(surf, u, v) normalvector(surf, u, v)/... 
    veclength(normalvector(surf, u, v));

E = @(surf, u, v) dot(diff(surf, u), diff(surf, u));
F = @(surf, u, v) dot(diff(surf, u), diff(surf, v));
G = @(surf, u, v) dot(diff(surf, v), diff(surf, v));
e = @(surf, u, v) dot(unitnorm(surf, u, v), diff(surf, u, 2));
f = @(surf, u, v) dot(unitnorm(surf, u, v), diff(surf, u, v));
g = @(surf, u, v) dot(unitnorm(surf, u, v), diff(surf, v, 2));

shapeoperator = @(surf, u, v) ((E(surf,u,v)*G(surf,u,v)-F(surf,u,v)^2)^(-1)) ...
   *[[e(surf,u,v)*G(surf,u,v)-f(surf,u,v)*F(surf,u,v), f(surf,u,v)*E(surf,u,v) - e(surf,u,v)*F(surf,u,v)]; ...
   [f(surf,u,v)*G(surf,u,v) - g(surf,u,v)*F(surf,u,v), g(surf,u,v)*E(surf,u,v) - f(surf,u,v)*F(surf,u,v)]];

principalcurves = @(surf, u, v) eig(shapeoperator(surf, u, v));
gausscurv = @(surf, u, v) det(shapeoperator(surf, u, v));
meancurv = @(surf, u, v) (1/2)*trace(shapeoperator(surf, u, v));     
syms u v real; monkey = [u^3 - 3*u*v^2, [-2 2 -2 2]];
    principalcurves(monkey, u, v)
    simplify(ans, 'Steps', 30)

    gausscurv(monkey, u, v)
    simplify(ans, 'Steps', 30)

    meancurv(monkey, u, v)
    simplify(ans, 'Steps', 30)

Я получил эту ошибку в строке с надписью "Principalcurves (monkey, u, v)":

    Error using symengine
Division by zero.

Error in sym/privBinaryOp (line 991)
            Csym = mupadmex(op,args{1}.s, args{2}.s, varargin{:});

Error in  ^  (line 322)
        B = privBinaryOp(A, p, 'symobj::mpower');

Error in Untitled>@(surf,u,v)((E(surf,u,v)*G(surf,u,v)-F(surf,u,v)^2)^(-1))*[[e(surf,u,v)*G(surf,u,v)-f(surf,u,v)*F(surf,u,v),f(surf,u,v)*E(surf,u,v)-e(surf,u,v)*F(surf,u,v)];[f(surf,u,v)*G(surf,u,v)-g(surf,u,v)*F(surf,u,v),g(surf,u,v)*E(surf,u,v)-f(surf,u,v)*F(surf,u,v)]]

Error in Untitled>@(surf,u,v)eig(shapeoperator(surf,u,v))

У меня не было проблем с поиском основных кривых других кривых. Однако эта форма седла обезьяны по какой-то причине приводит к сообщению об ошибке.

...