You are on page 1of 21

Computadores y Programación

Matlab: SACTA

Enrique Hernández y Joan Vila


DISCA / UPV
Departament d’Informàtica de Sistemes i Computadors
Universitat Politècnica de València

SACTA

Índice
– Introducción
Computadores y Programación

– Control de Tráfico Aéreo.


– Coordenadas geográficas
– Descripción de SACTA
– Manual de la librerías SACTA.
– Ejercicios
CYP

1
Introducción

Objetivo
– Desarrollo de un programa de control de tráfico aéreo usando MATLAB.
Computadores y Programación

Entorno
– Se proporciona un entorno de simulación SACTA:
Simulador de Aprendizaje de Control de Tráfico Aéreo.
– Es un simulador muy básico.
Consta de un monitor de radar para Windows.
Funciones de alto nivel para utilizarlo en Matlab.
Escenarios simulados
Conexión a radar secundario
– NO es el objetivo del trabajo aprender Control de Tráfico Aéreo.
CYP

Por ello, por motivos docentes, se ha simplificado el


sistema.

SACTA

Índice
– Introducción
Computadores y Programación

– Control de Tráfico Aéreo.


– Coordenadas geográficas
– Descripción de SACTA
– Manual de la librerías SACTA.
– Ejercicios
CYP

2
Control de Tráfico Aéreo

Objetivo
– Asegurar el tráfico comercial y aéreo.
Computadores y Programación

Coordinar los movimientos de miles de aviones


mantener las distancias de seguridad
guiarlos para el despegue o aterrizaje
Gestionar incidencias (mal tiempo, cierre aeropuertos,
etc.)
– y todo esto sin producir retrasos…

División
– Todas este control se realiza por zonas.
CYP

Control de Tráfico Aéreo Aena.swf

División (ver animación aena.swf arrastrando el fichero al navegador)


– En España el tráfico se divide por zonas.
Computadores y Programación

– Cada zona gestiona un área geográfica con un radar


– Cada zona esta enlazada con el resto por redes informáticas.
CYP

3
Control de Tráfico Aéreo

Centro de control de tránsito aéreo


(ACC)
Computadores y Programación

– Controla el tráfico aéreo en la zona


correspondiente. Están situados en
Madrid, Barcelona, Las Palmas de Gran
Canaria y Sevilla, y el centro de control
de área terminal (TACC) de Palma de
Mallorca.
– Éstos se complementan con los TACC de
Valencia y Santiago, que proporcionan
también distintos servicios de tránsito
aéreo.
– Cada uno de estos centros dispone de un
radar primario y secundario.
Primario: sólo permite
determinar la posición de la
aeronave en dos dimensiones
CYP

Secundario ; ofrece datos tales


como identificación y nivel de
vuelo (altura barométrica),
utilizando un transponder.

Control de Tráfico Aéreo transponder.swf

Transponder (ver animación transponder.swf)


– Responde a la señal del radar devolviendo información de altura, etc.
Computadores y Programación
CYP

4
Control de Tráfico Aéreo

Plan de vuelo.
– Antes de iniciar un vuelo el piloto
Computadores y Programación

proporciona al controlador de tráfico aéreo:


Nombre de la aerolínea y número
de vuelo.
Tipo de avión y equipamiento.
Velocidad y altitud de vuelo
prevista.
Ruta de vuelo (aeropuerto origen
y destino; centros por donde va a
pasar).
– Este plan de vuelo es validado y se
introduce en el ordenador, que genera una
ficha de progreso de vuelo.
Esta ficha se pasa de controlador
a controlador cuando va pasando
CYP

de zona.
Esta ficha es constantemente
actualizada con la información en
tiempo real del vuelo.

Control de Tráfico Aéreo


Navegación aérea.
– Navegación instrumental:
Computadores y Programación

Se realiza con el apoyo de


instrumentos.
Tienen un plan de vuelo y
sigue una rutas
establecidas.
– Cartas de navegación
Definen las “carreteras
aéreas”.
Hay dos espacios aéreos:
ƒ Inferior : < 24000 ft (7320m).
ƒ Superior: >= 24000 ft.
– Separación de seguridad.
Altitud:
ƒ Espacio aéreo Inferior 1000ft
(305m)
CYP

ƒ Espacio aéreo Superior 2000ft


(610m)
Misma altitud: 5 millas
(8km).
10

5
Control de Tráfico Aéreo

Curiosidades I…
– Whirlwind (1951). Primer ordenador para aplicaciones en tiempo real con una
Computadores y Programación

interfaz gráfica.
SAGE: Precursor de los Sistemas de control de tráfico aéreo
CYP

11

Control de Tráfico Aéreo

Curiosidades II…
– SAGE 1955: Evolución de la terminal gráfica.
Computadores y Programación
CYP

12

6
SACTA

Índice
– Introducción
Computadores y Programación

– Control de Tráfico Aéreo.


– Coordenadas geográficas
– Descripción de SACTA
– Manual de la librerías SACTA.
– Ejercicios
CYP

13

Coordenadas geográficas

Cualquier lugar de la Tierra se determina con dos números, su


latitud y su longitud.
Computadores y Programación

– La latitud mide el ángulo entre cualquier punto y el ecuador.


– La longitud mide el ángulo a lo largo del ecuador desde cualquier punto de la
Tierra. Se acepta que Greenwich en Londres es la longitud 0.
CYP

14

7
Coordenadas geográficas

Notación utilizada:
– Hay varias notaciones para representar las coordenadas; nosotros vamos a utilizar
Computadores y Programación

número reales con signo.


– 1º es aproximadamente 110km. (pero varia dependiendo la latitud y la longitud)
N:Norte
Madrid

Latitud +
Palma de Mallorca
(-3,41 40,24) (2,39 39,35)

Longitud - Longitud +
O:Oeste E:Este
Latitud `-
CYP

Santiago de Chile S:Sur Sydney


(-70,11 -20,32) (151,18 -33,90)
15

SACTA

Índice
– Introducción
Computadores y Programación

– Control de Tráfico Aéreo.


– Coordenadas geográficas
– Descripción de SACTA
– Manual de la librerías SACTA.
– Ejercicios
CYP

16

8
Descripción de SACTA

SACTA
– Consta de tres módulos principales.
Computadores y Programación

SACTAmon: Monitor SACTA.


ƒ Visualizador del espacio aéreo. Programa independiente para Windows.
Librería SACTA
ƒ Funciones para Matlab para poder controlar SACTAmon
RADAR
ƒ Funciones para Matlab para obtener información del radar.
– Simulación
Para desarrollar la aplicación se simula la información del
radar por medio del módulo ESCENARIO
ƒ Esto permite definir varios escenarios para poder probar nuestro programas.
ƒ Desarrollo y prueba más rápido.
CYP

– Datos reales RADAR


Cuando nuestro programa funcione correctamente nos
conectaremos al RADAR real.
17

Descripción de SACTA
Matlab

SACTA
Computadores y Programación

SACTAmon
RADAR

TCP/IP
Librería RADAR Librería SACTA
Para Matlab Tu programa Para Matlab

SACTAlib
CYP

18

9
Descripción de SACTA
Matlab

SACTA
Computadores y Programación

SACTAmon
RADAR

TCP/IP
Librería RADAR Librería SACTA
Para Matlab Tu programa Para Matlab

SACTAlib

ESCENARIO
CYP

Escenario simulado

19

Descripción de SACTA
Monitor SACTA
– Presenta la información del tráfico aéreo.
Computadores y Programación

– Información estática
Malla: latitud y longitudes de
referencia.
Mapa : mapa vectorial de la
zona.
Rutas : rutas de vuelo
– Información dinámica
Posición del haz (ángulo)
Tiempo.
Objetos. Presenta la siguiente
información:
ƒ Nombre, destino
ƒ Longitud, Latitud
ƒ Altitud (ft), Velocidad (NM/h).
– Se puede presentar o ocultar esta
CYP

información.
– Ventana con la información de los aviones

20

10
Descripción de SACTA
Definición de escenarios.
– Los escenarios simulados se definen por medio de un array de estructuras,
t0
donde cada elemento i define un objeto:
Computadores y Programación

e(i).Nombre = 'A380';
e(i).Destino = 'BCN';
e(i).Trayecto = [-0.042, 38, 5000, 0 ;
-0.08, 40.13, 6000, 1200;
0.059, 42.46, 4000, 3000];
t1
– El nombre y destino son simplemente descriptivos, y lo más interesante es
la definición de trayecto:
El trayecto es una matriz en la que cada fila se define.
ƒ Longitud, Latitud, Altura (pies), tiempo.
Cada fila está definiendo un punto para un tiempo t.
Por lo tanto dos puntos i y i+1 están definiendo una
trayectoria entre los tiempos ti y ti+1.
La velocidad vendrá dada por la distancias entre los
puntos partido (ti+1-ti)
Si altura vale -1 indica que el avión no ha despegado (o
se ha estrellado).
– La forma de generar escenario (ver ejemplo escenario1.m)
Se crea un script y se crea la estructura e(i).
CYP

Se guarda la variable e en un fichero. t2


– Podéis crear vuestros propios escenarios.

21

SACTA

Índice
– Introducción
Computadores y Programación

– Control de Tráfico Aéreo.


– Coordenadas geográficas
– Descripción de SACTA
– Manual de la librerías SACTA.
– Ejercicios
CYP

22

11
Manual de las librerías SACTA

Librerías
– Se ha desarrollado un conjunto de funciones para manejar los distintos
Computadores y Programación

módulos.
– Todas las funciones tienen ayuda (help Nombre_funcion)
– Todas las funciones tienen un prefijo indicando el nombre de la librería.
P.ej SACTA_PonCoord, RADAR_Leer.
– SACTA
Hay funciones para Iniciar el monitor, poner coordenadas,
mapa, rutas, etc.
Actualizar los objetos.
– RADAR
Obtiene información del RADAR
– ESCENARIO
CYP

Contiene los escenarios. Lo utiliza RADAR para obtener los


datos.

23

Manual de las librerías SACTA

SACTA I
– SACTA_Iniciar
Computadores y Programación

Inicia las librerías y comprueba la conexión con el monitor SACTA

Devuelve 0 si ha funcionado correctamente


– SACTA_PonCoord
SACTA_PonCoord Define las coordenadas del Monitor
RET = SACTA_PonCoord(pLonO, pLonE, pLatN, pLatS)
donde pLonO y pLonE son las longitudes OESTE y ESTE, y
pLatN y pLatS son la latitud NORTE y SUR

Devuelve 0 si ha funcionado correctamente


CYP

24

12
Manual de las librerías SACTA

SACTA II
– SACTA_PonMalla
Computadores y Programación

SACTA_PonMalla Define la malla (grid) del monitor


RET = SACTA_PonMalla(pLon, pLat)
pLon array con las longitudes donde hay definidas líneas
pLat array con las latitudes donde hay definidas líneas

Devuelve 0 si ha funcionado correctamente

Ejemplo de uso
LonGrid = [-2.0 -1.0 0 1.0 2.0];
LatGrid = [37.0 38.0 39.0 40.0 41.0];
SACTA_PonMalla(LonGrid, LatGrid);
CYP

25

Manual de las librerías SACTA


SACTA III
– SACTA_PonMapa
Computadores y Programación

SACTA_PonMapa Pone el mapa en formato vectorial


RET = SACTA_PonMapa(pMapa)
pMapa es matriz con dos columnas (longitud y latitud)
Un valor infinito indica que la próxima coordena no enlaza con la
anteriores.
Ejemplo
Inf Inf
-1.000045 37.584565
-1.002392 37.584565
-1.003272 37.585445
-1.006792 37.585445
Inf Inf
-1.007672 37.586325
-1.007966 37.585738
CYP

-1.007966 37.584858

Devuelve 0 si ha funcionado correctamente

26

13
Manual de las librerías SACTA

SACTA IV
– SACTA_PonRutas
Computadores y Programación

SACTA_PonRutas Define la rutas en pantalla


RET = SACTA_PonRutas(pRutas)
pRutas es un array de celdas en la que se contienen las rutas.
Cada celda contiene una matriz con dos columnas y n-filas
indicando
longitud y latitud
Ejemplo de creación de rutas
ruta1 = [ -0.5 41.0; 0.0 39; 0.5 38 ];
ruta2 = [ 2 39.1; 0 39.1];
ruta3 = [ 0 39.1; -2 39.5];
rutas = { ruta1 ruta2 ruta3 };
CYP

Devuelve 0 si ha funcionado correctamente

27

Manual de las librerías SACTA


SACTA V
– SACTA_PonHaz
Computadores y Programación

SACTA_PonHaz Actualiza el haz en pantalla


RET = SACTA_PonHaz(pAngulo, pHora, pObjetos)
pAngulo angulo en radianes del haz
pHora Hora actual (es una cadena; se puede poner cualquier formato)
pObjetos Un array con los objetos identificados por el haz
Cada objeto es una estructura que contiene los siguientes elementos
Campo Tipo Descripción
-------------------------------------------------------
Clave uint16 Identificador único del objeto
Nombre charx8 Nombre del avión
Destino charx4 Destino del avión
Longitud double Longitud
Latitud double Latitud
Altura double Altura en pies
Velocidad double Velocidad en mph
Identificacion uint8 0 - sin identificar (OVNI); 1 – Identificado
Color uint8 Color del avión
Estado uint8 Estado del avión (0 - correcto;
CYP

1 - peligro colisión;
2 - fuera de ruta)

Si pAngulo es -1 no se muestra el haz ni se iluminan los objetos


Devuelve 0 si ha funcionado correctament

28

14
Manual de las librerías SACTA

ESCENARIO
– ESCENARIO_Cargar
Computadores y Programación

ESCENARIO_Cargar Carga un escenario a partir de un fichero


ESCENARIO_Cargar(pEscenario, pVelocidad, pConectaRadar)
pEscenario : Fichero donde está almacenado el escenario de pruebas
pVelocidad : Indica la velocidad de simulación.
1 funciona en tiempo real,
> 1 se indica factor de multiplicación del tiempo.
Por ejemplo si pVelocidad es 10 indica que va 10
veces más rápido y 10s de simulación tardan 1 seg.
real.
pConectaRadar : (opcional) Si TRUE se conectar al radar de verdad
(con lo cual los dos parameteros Escenario y Velocidad no se tienen
en cuenta)
CYP

29

Manual de las librerías SACTA

ESCENARIO (II)
– ESCENARIO_Distancia
Computadores y Programación

ESCENARIO_Distancia devuelve la distancia entre dos coordenadas en


km.
ESCENARIO_Distancia(Lon1, Lat1, Lon2, Lat2)
Aproximadamente...
1 grado latitud = 110 km
1 grado longitud = 111 km
– ESCENARIO_DistPuntoRecta
ESCENARIO_DisPuntoRecta devuelve la distancia un punto y una recta
definida por dos puntos en pies
ESCENARIO_DistPuntoRect(Lonp1, Latp1, Lonr1, Latr1, Lonr2, Latr2)
Lonp1, Latp1 : Longitud y latitud del punto
Lonr1, Latr1, Lonr2, Latr2 : Longitud y latitud de los
puntos r1 y r2 que definen la recta.
CYP

30

15
Manual de las librerías SACTA
RADAR
– RADAR_Leer
Computadores y Programación

RADAR_Leer Lee la información del radar en función del tiempo


[iRet rAngulo rTiempo rObjetos ] = RADAR_Leer(pTiempo)
pTiempo es un double con los segundos desde el inicio de la simulación.
Devuelve lo siguiento
iRet : número de objetos leídos.
rAngulo : ángulo actual del radar en radianes. Si en el escenario se
indica turbo devuelve siempre -1.
rTimepo : tiempo de la simulación en segundos. Es un double.
rObjetos : Lista de objetos.
Cada objeto es una estructura que contiene los siguientes
campos:
Campo Tipo Descripción
-------------------------------------------------------
Clave uint16 Identificador único del objeto
Nombre charx8 Nombre del avión
Destino charx4 Destino del avión
Longitud double Longitud
Latitud double Latitud
CYP

Altura double Altura en pies


Velocidad double Velocidad en mph
Identificacion uint8 devuelve 0
Color uint8 devuelve 0
Estado uint8 devuelve 0

31

SACTA

Índice
– Introducción
Computadores y Programación

– Control de Tráfico Aéreo.


– Coordenadas geográficas
– Descripción de SACTA
– Manual de la librerías SACTA.
– Ejercicios
CYP

32

16
Ejercicios

Ejercicios
– Los ejercicios están pensados para tres sesiones de laboratorio.
Computadores y Programación

Primera sesión: Presentación y hacer bucle de control.


Segunda sesión: Identificación y control de objetos.
Tercera sesión: Almacenar y visualizar trayectorias.
– Para que el software funcione asegurarse que se tiene la versión de Matlab
7.1.0. o superior.
CYP

33

Ejercicios
Sesión 1: Configuración de SACTA y creación del bucle de lectura y actualización.
– Primero bajarse el software de la microweb.
Computadores y Programación

1. Crear un directorio de trabajo (p.e. w:\cyp\SACTA).


2. Bajar el fichero comprimido SACTA.zip y extraer todos los fichero al
directorio de trabajo.
3. Configurar en Matlab el directorio de trabajo.
– Segundo: Crear un script para controlar todo el sistema (p.e. ControlTrafico.m).
Este script haría lo siguiente (en pseudocodigo)
Cargar escenario ‘e1’.
Iniciar SACTA
Si correcto
PonCoordenas
PonMalla
PonMapa
PonRutas
tiempo = 0;
Bucle mientras tiempo sea menor tmax
Lee objetos del radar
Actualizar objetos en el radar.
fin
CYP

Fin
– Tercero: para probar el programa hay que tener arrancado el monitor. Desde el administrador de
archivos lanzar la aplicación SACTAmon.bat

34

17
Ejercicios

Sesión 1
– Datos
Computadores y Programación

Coordenadas Manises : -0.28 39.29 ; 3º grados en ventana.


ƒ Es decir el cuadrado definido por los siguientes puntos -0.28-1.5,-0.28+1.5,
39.29-1.5, 39.29+1.5
Malla: presentar línea para cada grado.
ƒ Las líneas estarán definidas en la siguiente longitudes -1,0,1 y latitudes 38,39,40.
Rutas:
A33 = [ -3.17 40.22; -0.28 39.29; 2.45 39.26 ];
A34 = [ 0.33 42.41; -0.1 40.15; -0.19 39.53; -0.28 39.29; -0.34 38.16; 0.012 36.52];
B28 = [ 2.06 41.18; -0.28 39.29; -2.13 38.21];
G30 = [ -0.28 39.29; 1.28 38.54];
N609 = [ -0.012 36.52; -0.08 40.13; 0.059 42.46];
Mapa: carga del fichero MapaCV.mat.
ƒ Este fichero contiene la variable mapaCV que es la que tiene que usar
CYP

SACTA_PonMapa
Escenario e1, tMax = 2000s.
ƒ Cada escenario tiene un tiempo de simulación.

35

Ejercicios
Sesión 2: Identificación de los objetos
– Todos los ejercicios de esta sesión se basan en modificar el bucle para identificar y
Computadores y Programación

controlar los objetos.


Por ello después de leer los objetos hay que realizar una serie de
operaciones sobre ellos antes de enviarlos al monitor.
El objetivo es rellenar correctamente los campos Identificación y
Estado de los objetos leídos.
Para ello se realizará un bucle para los objetos leído del radar y
se desarrollará una función para cada ejercicio.
ƒ Esta función tendrá como parámetro un objeto y devolver el objeto modificado.
En seudocodigo será:
Mientras tiempo < tmax
Objetos = RADAR_Leer
Para todos los objetos
Objeto_i = IdentificarObjeto(Objeto_i);
Objeto_i = IdentificarRuta(Objeto_i, arg…);

Fin
CYP

SACTA_PonHaz(…)
fin

36

18
Ejercicios

Sesión 2: Ejercicios A
– Ej. 2.1: Identificación de objetos.
Computadores y Programación

Función IdentificarObjeto
Objeto no identificado -> aquel que no tiene nombre.
Si están identificados se modifica el campo Identificación.
Utilizar escenario e1, tmax = 2000s
– Ej. 2.2: Gestión de rutas
Función IdentificarRuta
Comprobar si los objetos siguen una ruta (sólo 2d)
Pasando como parámetros las rutas definidas, comprobar que
la distancia es menor a 1000 pies (en 2 dimensiones).
ƒ Para ello utilizar la función ESCENARIO_DistPuntoRecta
ƒ El truco es buscar entre todas las recta de todas la rutas si hay alguna que esté a
menos de 200 pies.
CYP

Si un avión no está en ruta se modifica su estado a 2


(fuera ruta).
Utilizar escenario e2, tmax = 2000s

37

Ejercicios

Sesión 2: Ejercicios B
– Ej. 2.3: Gestión de colisiones simple
Computadores y Programación

Función ColisionSimple
Comprobar si dos objetos van a colisionar
Para ello a esta función se le pasará el objeto a comprobar
y el array con todos los objetos.
Para ello comprobar en cada momento si se respetan las
distancias mínimas de seguridad. Si hay peligro de colisión
el objeto pasa a estado colisión (1)
ƒ Para ello hay que iterar por cada objeto con el resto de objetos y comprobar las
distancias de colisión.
ƒ Primero comprobar si está a misma altitud (<1000ft) y luego comprobar distancia
< 8km. Para esto último podéis utilizar la función ESCENARIO_Distancia.
Utilizar escenario e3 tmax = 2000s
CYP

38

19
Ejercicios

Sesión 2: Ejercicios C (opcional y para nota…).


P1(lon1, lat1, alt1, t1)
– Ej. 2.4: Gestión de colisiones con predicción (opcional)
Computadores y Programación

Función ColisionFutura
Predecir si dos objetos van a colisionar
Para ello se calcula la ruta de todos los
objetos y se comprueba si va a colisionar
con otro. Se avisará con 15 minutos de
antelación. P2(lon2, lat2, alt2, t2)
ƒ Idea: hay que obtener la ecuación paramétrica de la
recta en función de t a partir de dos puntos. El actual y
otro anterior. Ver derecha.
ƒ Para ello utiliza la función ESCENARIO_Parametrica. ⎛ lon2 − lon1 ⎞
⎜ lon(t ) = (t − t1 ) + lon1 ⎟
ƒ Con esta ecuación se predice la situación del objeto en ⎜ t 2 − t1 ⎟
t+15minutos. ⎜ lat − lat1 ⎟
P (t ) = ⎜ lat (t ) = 2 (t − t1 ) + lat1 ⎟
ƒ Se aplica los criterios de colisión simple para los nuevos ⎜ t2 − t1 ⎟
puntos obtenidos. ⎜ alt2 − alt1 ⎟
⎜ alt (t ) = ( t −1 + 1 ⎟
t ) alt
Utilizar escenario e3 tmax = 2000s ⎝ t2 − t1 ⎠
CYP

39

Ejercicios

Sesión 3
– El objeto de esta sesión es almacenar la información de los vuelos en fichero
Computadores y Programación

y después presentar está información


– Ej. 3.1: Modificar el programa de la sesión anterior para generar un fichero.
Este fichero debe almacenar en cada línea el tiempo, Clave,
Longitud,Latitud y Altura de todos los objetos.
El número de muestras será de una por iteración
– Un ejemplo de fichero es el siguiente
4 1 -0.0421267 38.0071 5003.33
4 3 -3.15844 40.2163 10000
8 1 -0.0422533 38.0142 5006.67
8 3 -3.14688 40.2126 10000
12 1 -0.04238 38.0213 5010
12 3 -3.13532 40.2088 10000
CYP

16 1 -0.0425067 38.0284 5013.33


16 3 -3.12376 40.2051 10000

40

20
Ejercicios

Sesión 3
– Ej. 3.2: Visualización de rutas 2-D
Computadores y Programación

Realizar una función que leyendo el fichero generado en el


ejercicio anterior visualice en un gráfico las posiciones
de los aviones.
Para ello realizar una función
ƒ function DibujaObjeto2D(fichero, pClave)
Por ejemplo para el escenario 2 y clave 4 sacaría
El algoritmo sería como sigue 41

Abrir fichero en lectura


40.5
Lon = []; Lat = [];
Mientras no fin de fichero 40

Leer tiempo, clave, longitud, latitud y altura 39.5

Si la clave es igual a pClave


39
añadir Longitud y Latitud a Lon y Lat
CYP

Fin 38.5

Fin 38
-1.5 -1 -0.5 0 0.5 1 1.5 2
Plot(Lon, Lat)

41

Ejercicios

Sesión 3
– Ej. 3.3: Visualización de rutas 3-D
Computadores y Programación

Modificar el ejemplo anterior 10000

para incluir Altura y dibujar 8000

en 3-D utilizando plot3. 6000

Para ello realizar una función 4000

ƒ function DibujaObjeto3D(fichero, pClave)


2000

– Ej. 3.4: Opcional 41

40
2
1

Modificar el ejercicio anterior 39


-1
0

38
pare que se muestren varios -2

objetos en un mismo gráfico.


Cada uno de los aviones tendrá
un color de línea diferente.
CYP

42

21

You might also like