GT_MM_1718_T1_Tutorial_1_3D

700 days ago by GT_MM_1718

Trigonometría esférica

Cambio de unidades

Las siguientes funciones pasan de grados a radianes y viceversa.

#auto def rad_to_deg(arad): arad=arad*180/pi # Pasamos a grados signo=sign(arad) # Guardamos el signo arad=abs(arad) # Quitamos el signo para trabajar siempre con cantidades positivas grados=floor(arad) # Grados if floor(arad+10^-13)>floor(arad): grados=floor(arad+10^-13) # Si estamos muy cerca de una cifra exacta, la usamos minutos=floor((arad-grados)*60) # Minutos if floor((arad-grados)*60+10^-12)>floor((arad-grados)*60): minutos=floor((arad-grados)*60+10^-12) # Si estamos muy cerca de una cifra exacta segundos=((((arad-grados)*60)-minutos)*60).n() # Segundos if abs(segundos)<10^-9: segundos=0 return signo*grados,minutos,segundos.n() def deg_to_rad(grados,minutos=0,segundos=0): return (sign(grados)*(abs(grados)+minutos/60+segundos/60/60)*pi/180).n() 
       

Vamos a probar las funciones pasando 1 radian a grados

rad_to_deg(1) 
       
(57, 17, 44.8062470963632)
(57, 17, 44.8062470963632)
rad_to_deg(-1) 
       
(-57, 17, 44.8062470963632)
(-57, 17, 44.8062470963632)

Es decir, 1 radian es 57 grados, 17 minutos y 44.8 segundos, aproximadamente.

Vamos a volver a convertir la salida en radianes

deg_to_rad(57,17,44.8062470963632) 
       
1.00000000000000
1.00000000000000

Practica:

1. Pasa $90^o$ en radianes y vuelta a grados.

2. Pasa $80^o10'11"$ a radianes.

3. Pasa $\pi/3$ a grados

4. Pasa $-40^o10'$ a radianes.

 
       

Representación de vértices y circunferencias máximas (aristas)

Esfera unidad

Dibujamos una esfera en la que colocaremos todos los elementos.

#auto var('y','z') Esfera=implicit_plot3d(x^2+y^2+z^2==1,(x,-1.2,1.2),(y,-1.2,1.2),(z,-1.2,1.2),rgbcolor='white',opacity=0.7); 
       
Esfera 
       

Vertices

Creamos una función que recibe un punto (longitud y latitud en radianes) y devuelve el vértice correspondiente a ese punto dibujado en la esfera.

#auto def vertice(V,color='green'): return point3d((cos(V[0])*cos(V[1]),sin(V[0])*cos(V[1]),sin(V[1])),rgbcolor=color,size=20); 
       

Probamos la función:

V0=[0,0];V1=[-pi/2,0];V2=[0,pi/4];V3=[0,pi/2];V4=[-pi/4,pi/6];V5=[-pi/4,0]; 
       
Esfera+vertice(V1)+vertice(V2)+vertice(V3)+vertice(V0)+vertice(V4,color="blue") 
       

Circunferencias máximas

Creamos una función que recibe dos puntos y dibuja el arco de circunferencia máxima que une los dos puntos.

#auto var('t') def arista(vA,vB,color='red'): # Si las dos longitudes coinciden, es un meridiano if abs(vA[0]-vB[0])<10^-10: lon=vA[0] lmin=min(vA[1],vB[1]) lmax=max(vA[1],vB[1]) return parametric_plot3d((cos(lon)*cos(t),sin(lon)*cos(t),sin(t)),(t,lmin,lmax),rgbcolor=color,thickness=5) # Tomamos como vértice A el que tenga menor longitud if vA[0]>vB[0]: vA,vB=vB,vA # Elegimos el lado corto if vB[0]-vA[0]>pi: vA,vB=vB,vA vB[0]=vB[0]+2*pi # Calculamos el ángulo A (que ha de ser constante en toda la arista) a=pi/2-vB[1];b=pi/2-vA[1];C=vB[0]-vA[0]; A=arccot((cot(a)*sin(b)-cos(b)*cos(C))/sin(C)) b=pi/2-vA[1];C=t-vA[0]; lat(t)=arctan((cos(b)*cos(C)+sin(C)*cot(A))/sin(b)) return parametric_plot3d((cos(t)*cos(lat(t)),sin(t)*cos(lat(t)),sin(lat(t))),(t,vA[0],vB[0]),rgbcolor=color,thickness=5) 
       
V1=[-pi/6,0];V2=[pi/6,pi/4]; Esfera+arista(V2,V1)+vertice(V1)+vertice(V2) 
       

A continuación, tenemos una función que recibe un vértice y un rumbo y dibuja la circunferencia máxima que pasa por ese vértice con ese rumbo

#auto def cmaxima(Va,a,color='yellow'): c=circle((0,0),1,rgbcolor=color,thickness=5); ch=c.plot3d(z=0).rotate((1, 0, 0), pi/2) if Va[0]>0: cv=ch.rotate((0,0,1),(2*pi-Va[0])) else: cv=ch.rotate((0,0,1),-Va[0]) p=(cos(Va[0])*cos(Va[1]),sin(Va[0])*cos(Va[1]),sin(Va[1])) if a<0: dibarista=cv.rotate(p,(2*pi+a)) else: dibarista=cv.rotate(p,a) return dibarista 
       

Probamos la función

Esfera+vertice(V0)+cmaxima(V0,pi/4)+cmaxima(V0,-pi/4) 
       

Practica:

 

1. Dibuja los puntos correspondientes a los polos, el origen de coordenadas y los puntos $(\pm 45,\pm 45)$.

 

2. Dibuja el ecuador, los meridianos -45, 0, 45, la circurferencia máxima que pasa por el $(0,0)$ y tiene un ángulo de 45 respecto de la vertical y la circunferencia máxima que pasa por los puntos $(-45,45)$ y $(45,45)$.

 
       

Distancias

La siguiente función recibe un vértice y una distancia y devuelve los puntos a esa distancia.

#auto def distanciaVertice(V1,distancia,color='purple'): c=circle((0,0),sin(distancia),rgbcolor=color,thickness=5) return c.plot3d(z=cos(distancia)).rotate((sin(V1[0]),-cos(V1[0]), 0), pi/2-V1[1]) 
       

Probemos la función

Esfera+vertice(V4)+distanciaVertice(V4,0.4)+distanciaVertice(V1,0.2)+vertice(V1) 
       

Practica:

1. Dibuja los vértices en la posición (0,0) y (0,45).

2. Dibuja los puntos que distan $30^o$ de cada uno de los puntos anteriores. Idem con $45^o$ y con $60^o$.