| % 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) |