Adrià Vilanova Martínez | ce8597a | 2021-09-21 18:26:59 +0200 | [diff] [blame] | 1 | % Problema 1.8 |
| 2 | % Geometria Diferencial, FME, UPC |
| 3 | % 2021/03/05 |
| 4 | |
| 5 | % > 1.8. D'una corba gamma: [0, L] --> R^3 en coneixem un núvol de punts |
| 6 | % > gamma(t_1), ..., gamma(t_n), que tenim emmagatzemats en ordre com a columnes |
| 7 | % > d'una matriu C. |
| 8 | |
| 9 | % Figura 1: Circumferència de radi R=2 |
| 10 | R1 = 2; |
| 11 | t1 = linspace(0, 2*pi, 361); |
| 12 | x1 = R1*cos(t1); |
| 13 | y1 = R1*sin(t1); |
| 14 | gamma1 = [x1; y1]; |
| 15 | |
| 16 | % Dibuix de verificació |
| 17 | %figure(1) |
| 18 | %p = plot(x1, y1); |
| 19 | %axis equal |
| 20 | |
| 21 | % Figura 2: Hèlix amb R=2, c=1/3 |
| 22 | R2 = 2; |
| 23 | c2 = 1/3; |
| 24 | t2 = linspace(-4*pi, 8*pi, 601); |
| 25 | gamma2 = [R2*cos(t2); R2*sin(t2); c2*t2]; |
| 26 | |
| 27 | % Dibuix de verificació |
| 28 | %figure(2) |
| 29 | %plot3(gamma2(1, :), gamma2(2, :), gamma2(3, :)); |
| 30 | %axis equal |
| 31 | %xlabel('x') |
| 32 | %ylabel('y') |
| 33 | %zlabel('z') |
| 34 | |
| 35 | %waitfor(p) |
| 36 | |
| 37 | % > (a) Escriviu una funció |arc| de Matlab que rebi com a argument la matriu C |
| 38 | % > i retorni un vector fila |longs| amb les longituds dels segments de la |
| 39 | % > corba poligonal bar{C} que uneix els punts de C. |
| 40 | longs1 = arc(gamma1); |
| 41 | longs2 = arc(gamma2); |
| 42 | |
| 43 | % > (b) Escriviu una funció |gir| de Matlab que calculi l'angle de gir de la |
| 44 | % > corba poligonal bar{C} en cada vèrtex interior, i retorni un vector |
| 45 | % > fila amb aquests angles. |
| 46 | anggir1 = gir(gamma1); |
| 47 | anggir2 = gir(gamma2); |
| 48 | |
| 49 | % > (c) Donat un vèrtex interior V, podem considerar com a pla osculador de la |
| 50 | % > poligonal en ell el determinat per les dues arestes de la corba que |
| 51 | % > passen per V, com a centre de curvatura el centre del cercle en aquest |
| 52 | % > pla que passa pels tres extrems de les dues arestes, i com a curvatura |
| 53 | % > l'invers del radi d'aquest cercle. Escriviu una funció de Matlab amb |
| 54 | % > capçalera |[kappa, ccurv] = curv_centre(C)| que rebi la llista de |
| 55 | % > vèrtexs C de la corba poligonal i retorni la llista de valors de la |
| 56 | % > curvatura com a vector fila |kappa|, i els centres de curvatura com a |
| 57 | % > columnes d'una matriu |ccurv|. |
| 58 | [kappa1, ccurv1] = curv_centre(gamma1); |
| 59 | max(kappa1) |
| 60 | min(kappa1) |
| 61 | max(ccurv1(1, :)) |
| 62 | min(ccurv1(1, :)) |
| 63 | max(ccurv1(2, :)) |
| 64 | min(ccurv1(2, :)) |
| 65 | |
| 66 | [kappa2, ccurv2] = curv_centre(gamma2); |
| 67 | max(kappa2) |
| 68 | min(kappa2) |
| 69 | |
| 70 | % Aproximem la curvatura contínua de la corba? |
| 71 | pseudocurvatura1 = anggir1./longs1(1:end-1); |
| 72 | pseudocurvatura2 = anggir2./longs2(1:end-1); |
| 73 | |
| 74 | max(pseudocurvatura1 - 0.5) |
| 75 | min(pseudocurvatura1 - 0.5) |
| 76 | max(kappa1 - 0.5) |
| 77 | min(kappa1 - 0.5) |