blob: 7e7903aa97ae5582a3128a58c8bccc7f971c98ff [file] [log] [blame]
Adrià Vilanova Martínezce8597a2021-09-21 18:26:59 +02001% 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
10R1 = 2;
11t1 = linspace(0, 2*pi, 361);
12x1 = R1*cos(t1);
13y1 = R1*sin(t1);
14gamma1 = [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
22R2 = 2;
23c2 = 1/3;
24t2 = linspace(-4*pi, 8*pi, 601);
25gamma2 = [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.
40longs1 = arc(gamma1);
41longs2 = 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.
46anggir1 = gir(gamma1);
47anggir2 = 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);
59max(kappa1)
60min(kappa1)
61max(ccurv1(1, :))
62min(ccurv1(1, :))
63max(ccurv1(2, :))
64min(ccurv1(2, :))
65
66[kappa2, ccurv2] = curv_centre(gamma2);
67max(kappa2)
68min(kappa2)
69
70% Aproximem la curvatura contínua de la corba?
71pseudocurvatura1 = anggir1./longs1(1:end-1);
72pseudocurvatura2 = anggir2./longs2(1:end-1);
73
74max(pseudocurvatura1 - 0.5)
75min(pseudocurvatura1 - 0.5)
76max(kappa1 - 0.5)
77min(kappa1 - 0.5)