blob: 7e7903aa97ae5582a3128a58c8bccc7f971c98ff [file] [log] [blame]
% Problema 1.8
% Geometria Diferencial, FME, UPC
% 2021/03/05
% > 1.8. D'una corba gamma: [0, L] --> R^3 en coneixem un núvol de punts
% > gamma(t_1), ..., gamma(t_n), que tenim emmagatzemats en ordre com a columnes
% > d'una matriu C.
% Figura 1: Circumferència de radi R=2
R1 = 2;
t1 = linspace(0, 2*pi, 361);
x1 = R1*cos(t1);
y1 = R1*sin(t1);
gamma1 = [x1; y1];
% Dibuix de verificació
%figure(1)
%p = plot(x1, y1);
%axis equal
% Figura 2: Hèlix amb R=2, c=1/3
R2 = 2;
c2 = 1/3;
t2 = linspace(-4*pi, 8*pi, 601);
gamma2 = [R2*cos(t2); R2*sin(t2); c2*t2];
% Dibuix de verificació
%figure(2)
%plot3(gamma2(1, :), gamma2(2, :), gamma2(3, :));
%axis equal
%xlabel('x')
%ylabel('y')
%zlabel('z')
%waitfor(p)
% > (a) Escriviu una funció |arc| de Matlab que rebi com a argument la matriu C
% > i retorni un vector fila |longs| amb les longituds dels segments de la
% > corba poligonal bar{C} que uneix els punts de C.
longs1 = arc(gamma1);
longs2 = arc(gamma2);
% > (b) Escriviu una funció |gir| de Matlab que calculi l'angle de gir de la
% > corba poligonal bar{C} en cada vèrtex interior, i retorni un vector
% > fila amb aquests angles.
anggir1 = gir(gamma1);
anggir2 = gir(gamma2);
% > (c) Donat un vèrtex interior V, podem considerar com a pla osculador de la
% > poligonal en ell el determinat per les dues arestes de la corba que
% > passen per V, com a centre de curvatura el centre del cercle en aquest
% > pla que passa pels tres extrems de les dues arestes, i com a curvatura
% > l'invers del radi d'aquest cercle. Escriviu una funció de Matlab amb
% > capçalera |[kappa, ccurv] = curv_centre(C)| que rebi la llista de
% > vèrtexs C de la corba poligonal i retorni la llista de valors de la
% > curvatura com a vector fila |kappa|, i els centres de curvatura com a
% > columnes d'una matriu |ccurv|.
[kappa1, ccurv1] = curv_centre(gamma1);
max(kappa1)
min(kappa1)
max(ccurv1(1, :))
min(ccurv1(1, :))
max(ccurv1(2, :))
min(ccurv1(2, :))
[kappa2, ccurv2] = curv_centre(gamma2);
max(kappa2)
min(kappa2)
% Aproximem la curvatura contínua de la corba?
pseudocurvatura1 = anggir1./longs1(1:end-1);
pseudocurvatura2 = anggir2./longs2(1:end-1);
max(pseudocurvatura1 - 0.5)
min(pseudocurvatura1 - 0.5)
max(kappa1 - 0.5)
min(kappa1 - 0.5)