proyecto final de carrera algoritmo de detección de visibilidad de
TRANSCRIPT
PROYECTO FINAL DE CARRERA
ALGORITMO DE DETECCIÓN DE
VISIBILIDAD DE FACETAS PARA EL
CÁLCULO DE LA SECCIÓN RECTA
RADAR
Facets Visibility Detection Algorithm for the
Computation of the Radar Cross Section
Estudios: Enginyeria de Telecomunicació
Autor: Alexis Carbó Meseguer
Director/a: Juan Manuel Rius Casals
Año: 2013
El trabajo elaborado en esta memoria forma parte de las tareas realizadas en los proyectos
TEC2010-20841-C04-02, CONSOLIDER CSD2008-00068 de la Comisión Interministerial de
Ciencia y Tecnología (CICYT); del FP7-263468-NEREIDS y FP7-263268-SIMTISY de la
Comisión Europea.
ii
Agradecimientos
En primer lugar quisiera agradecer al profesor Juan-Manuel Rius por la oportunidad que me
ha brindado de realizar este interesante proyecto, por todo lo que he podido aprender de su
experiencia, por su inestimable ayuda en todo momento y por los consejos e ideas que me ha
dado con el �n de motivarme y de mejorar mi trabajo.
Al departamento de Teoría de la Señal y Comunicaciones y en especial a todos los que de alguna
forma u otra han participado en la plani�cación y organización de mi proyecto.
A mis padres y familiares por su apoyo y con�anza depositados siempre en mí.
A todos mis profesores desde la escuela hasta la universidad, por todo lo que me han enseñado
y he podido aprender de ellos.
Finalmente a mis compañeros de estudios y amigos que me han ayudado siempre cuando les he
necesitado.
Gracias a todos!
iii
Índice general
1. Introducción 4
1.1. Motivación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.2. Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.3. Estructura de la memoria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2. RCS y difracción electromagnética (alta frecuencia) 7
2.1. Condiciones de partida . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.2. Difracción electromagnética . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.3. Sección Recta Radar (RCS) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.4. Fenómenos de difracción en alta frecuencia . . . . . . . . . . . . . . . . . . . . . . 10
2.4.1. Re�exión en grandes super�cies . . . . . . . . . . . . . . . . . . . . . . . . 10
2.4.2. Re�exiones en múltiples super�cies . . . . . . . . . . . . . . . . . . . . . . 10
2.4.3. Difracción en discontinuidades . . . . . . . . . . . . . . . . . . . . . . . . 10
2.4.4. Otros fenómenos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.4.5. Ejemplo en un caso real . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.5. Métodos de cálculo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.5.1. Óptica física (PO) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.5.2. Trazado de rayos (RT) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.5.3. Difracción de aristas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3. Graphical Electromagnetic Computing (GRECO) 15
3.1. GRECO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.1.1. Procesado grá�co en el GRECO . . . . . . . . . . . . . . . . . . . . . . . 16
3.1.2. Cálculo de la Óptica Física . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.1.3. Integral de Asvestas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.1.4. Ejecución del GRECO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.1.5. Ventana de imágenes y de datos . . . . . . . . . . . . . . . . . . . . . . . . 20
3.2. Problemas de test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.3. Errores en el cálculo debidos al procesado grá�co . . . . . . . . . . . . . . . . . . 24
3.3.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.3.2. Modelo geométrico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.3.3. Modelo para la representación grá�ca . . . . . . . . . . . . . . . . . . . . 25
3.3.4. Modelo de píxeles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.3.5. Cálculo de los bu�ers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.3.6. Resolución del Frame-Bu�er . . . . . . . . . . . . . . . . . . . . . . . . . 26
iv
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS v
3.3.7. Resolución del Z-bu�er . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.3.8. Resolución del bu�er de normales . . . . . . . . . . . . . . . . . . . . . . 28
4. Solución a los problemas de procesado grá�co 29
4.1. Procesado híbrido . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
4.2. Integral de Gordon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
4.3. Algoritmo de visibilidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
4.3.1. De�nición de coordenadas . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
4.3.2. Proyección de coordenadas 3D en pantalla . . . . . . . . . . . . . . . . . . 33
4.3.3. Test de visibilidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
4.3.4. Umbral de comparación ε . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
4.3.5. Algoritmo de división para facetas parcialmente iluminadas . . . . . . . . 47
4.3.6. Problemas del algoritmo (Subdivisión de la faceta) . . . . . . . . . . . . . 49
5. Implementación en el GRECO 53
5.1. Diagrama de �ujo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
5.2. Optimización de la velocidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
5.2.1. Normal al píxel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
5.2.2. Normal al píxel sin signo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
5.2.3. Detección de vértices repetidos . . . . . . . . . . . . . . . . . . . . . . . . 55
5.2.4. Resultados de la optimización . . . . . . . . . . . . . . . . . . . . . . . . . 58
5.3. Paralelización . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
5.4. Modi�caciones en los parámetros de entrada del GRECO . . . . . . . . . . . . . . 59
5.4.1. Modi�cación del archivo de parámetros . . . . . . . . . . . . . . . . . . . . 59
5.4.2. Nuevos �ags en línea de comandos . . . . . . . . . . . . . . . . . . . . . . 60
6. Resultados 61
6.1. Precisión . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
6.2. Velocidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
6.2.1. Resultados del algoritmo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
6.2.2. Resultados de la optimización . . . . . . . . . . . . . . . . . . . . . . . . . 65
7. Conclusiones 67
A. Publicaciones en actas de congresos y revistas internacionales 68
B. Parámetros de entrada 69
B.1. Flags en línea de comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
B.2. Archivo de parámetros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
B.3. Fichero(s) de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
C. Parámetros de salida 74
C.1. Formato del �chero de salida . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
C.2. Nombres de los �cheros de salida . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS vi
D. Código fuente del algoritmo 77
D.1. Barrido de las facetas (Resumido) . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
D.2. Re�nado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
D.2.1. Subfunción Re�na . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
D.2.2. Subfunción punto_medio . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
D.3. Proyección y test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
D.3.1. Subfunción Proyejectandtest . . . . . . . . . . . . . . . . . . . . . . . . . . 81
D.4. Cálculo de la Óptica Física (Integral de Gordon) . . . . . . . . . . . . . . . . . . 83
D.4.1. Subfunción po_gordon (Simpli�cación) . . . . . . . . . . . . . . . . . . . 83
D.5. División de las facetas grandes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
D.6. Mejoras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
D.6.1. Paralelización . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
D.6.2. Optimización del tiempo de cálculo . . . . . . . . . . . . . . . . . . . . . . 89
Índice de �guras
2.1. Diagrama RCS típico de un A-26 Invader [4] . . . . . . . . . . . . . . . . . . . . . 9
2.2. Re�exión en grandes super�cies . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.3. Difracción en discontinuidades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.4. Traveling wave . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.5. Creeping wave . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.6. Ejemplo de los fenómenos que se pueden entrar en objetos reales . . . . . . . . . 12
2.7. Aproximación de los corrientes inducidos (Óptica Física) . . . . . . . . . . . . . . 13
3.1. Diagrama de funciones del GRECO (der.) comparado con el método convencional
(izq.) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.2. De�nición de las coordenadas de pantalla a través de las coordenadas del modelo 16
3.3. De�nición de los colores a partir de los cuales se obtienen las normales de la super�cie 17
3.4. Aproximación al plano tangente en el centro del píxel . . . . . . . . . . . . . . . . 19
3.5. Captura de pantalla del GRECO . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.6. Subdivisiones principales de las ventanas del GRECO . . . . . . . . . . . . . . . 21
3.7. Placa plana . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.8. De�nición de un diedro en la intersección de dos semiplanos . . . . . . . . . . . . 23
3.9. Triedro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.10. Misil . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.11. Helicóptero . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.12. Diferencias en el resultado de la Óptica Física para diferentes grados de teselado 25
3.13. Efecto del proceso de interpolado sobre las normales: a) normal sin interpolar y
b) normal interpolada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.14. Óptica física para una placa de 5λ con un tamaño de 52x52 . . . . . . . . . . . . 27
3.15. Óptica física para una placa de 5λ con un tamaño de 520x520 . . . . . . . . . . . 28
4.1. Ejemplo del algoritmo de detección de visibilidad de facetas . . . . . . . . . . . . 30
4.2. Coordenadas del modelo - Coordenadas de pantalla . . . . . . . . . . . . . . . . . 32
4.3. De�nición de las coordenadas de pantalla a través de las coordenadas del modelo 33
4.4. Creación del bitmap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
4.5. Algoritmo de proyección de 3D a 2D . . . . . . . . . . . . . . . . . . . . . . . . . 35
4.6. Algoritmo de detección de visibilidad (Facetas no inclinadas) . . . . . . . . . . . 37
4.7. Algoritmo de detección de visibilidad (Faceta inclinada) . . . . . . . . . . . . . . 37
4.8. Algoritmo de cálculo de ε . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
4.9. Elección del píxel más cercano a la posición real del vértice en pantalla . . . . . . 38
vii
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS viii
4.10. Problemas con el truncamiento ε . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
4.11. Problema debido a la no-extrapolación en el diedro de 60º . . . . . . . . . . . . . 41
4.12. Problema de intesección entre dos super�cies . . . . . . . . . . . . . . . . . . . . 42
4.13. Problema de intersección entre dos super�cies en el diedro de 60º . . . . . . . . . 42
4.14. Problema de la intersección entre dos super�cies (Caso A) . . . . . . . . . . . . . 43
4.15. Problema de la intersección entre dos super�cies (Caso B) . . . . . . . . . . . . . 43
4.16. Problema de la cuanti�cación de n′z (Caso A) . . . . . . . . . . . . . . . . . . . . 44
4.17. Problema de la cuanti�cación de n′z (Caso B) . . . . . . . . . . . . . . . . . . . . 45
4.18. Super�cie cóncava . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
4.19. División de un quad en dos triángulos . . . . . . . . . . . . . . . . . . . . . . . . 47
4.20. De�nición de las coordenadas de pantalla a través de las coordenadas del modelo 48
4.21. Algoritmo de bisección para facetas parcialmente iluminadas . . . . . . . . . . . . 49
4.22. Subdivisión de un objeto para que se detecte correctamente las facetas iluminadas 50
4.23. Problema de un objeto con 3 facetas solapadas . . . . . . . . . . . . . . . . . . . 50
4.24. Problema de detección de facetas iluminadas . . . . . . . . . . . . . . . . . . . . . 51
4.25. Resultado �nal con las super�cies ocultas correctamente detectadas . . . . . . . . 52
4.26. Problema de no subdivisión en el diedro de 60º . . . . . . . . . . . . . . . . . . . 52
5.1. Diagrama de �ujo del algoritmo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
5.2. Número de comprobaciones por vértice . . . . . . . . . . . . . . . . . . . . . . . . 56
5.3. La detección organiza los vértices en cajas para rebajar el orden computacional
del algoritmo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
5.4. Modi�cación del diagrama de �ujo . . . . . . . . . . . . . . . . . . . . . . . . . . 57
5.5. Comparación entre los diferentes métodos de optimización de velocidad (Misil) . 58
6.1. Placa de 5λ sin el ruido de procesado grá�co . . . . . . . . . . . . . . . . . . . . 61
6.2. PO de una placa de 5λ variando los ángulos de elevación y azimut (Gordon Face-
tas) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
6.3. PO de una placa de 5λ variando los ángulos de elevación y azimut (Asvestas) . . 62
6.4. Diedro de 60º comparado con la referencia . . . . . . . . . . . . . . . . . . . . . . 63
6.5. Diedro de 60º comparado con Asvestas . . . . . . . . . . . . . . . . . . . . . . . . 63
6.6. Triedro de 90º comparado con Asvestas . . . . . . . . . . . . . . . . . . . . . . . 64
6.7. Tiempo de cálculo PO respecto al número de facetas . . . . . . . . . . . . . . . . 65
6.8. Tiempo de cálculo PO respecto al número de facetas . . . . . . . . . . . . . . . . 66
Nomenclatura
(φ, θ, γ) Ángulos de barrido: Polarización, elevación y azimut
(x′, y′, z′) Coordenadas de pantalla
(x′p, y′p, z′p) Coordenadas de un píxel en pantalla
(x′v, y′v, z′v) Coordenadas de un vértice (en pantalla)
(xv, yv, zv) Coordenadas de un vértice
vi Vértice i-ésimo de una faceta
W r Densidad de potencia dispersada por el objetivo
W i Densidad de potencia del campo incidente
~EPO Campo eléctico (Óptica Física)
~Ei Campo eléctrico incidente en el objeto
ε Valor in�nitesimal
~Er Campo eléctrico re�ejado por el objeto en la posición del radar
η1(x) Función sinc(x)
f Frecuencia (en Hz)
~H i Campo magnético incidente
j Unidad imaginaria
~JPO Corriente equivalente de la superfície (PO)
Li Luminosidad asociada al color i R,G,B
ix
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS x
k Número de onda
(n′px, n′py, n
′pz) Normal a una super�cie cuanti�cada en 8 bits
(Nx, Ny, Nz) Tamaño máximo del bitmap
z-bu�er Bu�er con las coordenadas z visibles en pantalla
(n′x, n′y, n′z) Normal asociada a la super�cie del objeto (en pantalla)
n Normal a la faceta
n′ Normal asociada a la super�cie del objeto (en pantalla)
ω Frecuencia angular (en rad/s)
µ Permeabilidad magnética
s Vector dirección de observación
σ Sección Recta Radar
~rm Punto medio de un lado de la faceta
~tm Vector lado de una faceta
z′vp Coordenada z del vértice extrapolada a la posición del píxel
Resumen del Proyecto
El programa GRECO es un paquete de software utilizado para calcular la Sección Recta Radar.
Incluye varios métodos como Óptica Física, trazado de rayos o cálculo del campo difractado por
las aristas. Todos ellos están basados en el uso de aproximaciones de alta frecuencia que permiten
el cálculo incluso de objetos complejos mediante simulación con ordenador. En este proyecto se
explica un nuevo algoritmo para el cálculo de la Óptica Física.
Anteriormente, GRECO utilizaba técnicas de procesado grá�co que permitían obtener las ca-
racterísticas geométricas del blanco pero que presentaban una serie de limitaciones. El trabajo
ha sido analizar cuales eran, detectando las causas de las mismas y su impacto en el resultado
global. Se ha comprobado que la causa principal de estas restricciones es la cuanti�cación. Los
algoritmos anteriores trabajan directamente sobre la imagen del objeto en pantalla. Esta imagen,
al �n y al cabo, es un mapa �nito de píxeles que contiene valores de 8 bits. Por lo tanto, los
datos con los que se trabaja están restringidos a la posición discreta de los píxeles y además,
cuantizados.
La parte principal del trabajo realizado en este Proyecto Final de Carrera se centra en el desarrollo
de un nuevo método para la discriminación correcta de super�cies iluminadas que pretende
solucionar los errores del algoritmo anterior. Se ha ideado una manera de detección real de las
super�cies en lugar de los píxeles visibles. De este modo se trabaja directamente con las mallas
de facetas planas que se aproximan mejor a la geometría del modelo y así evitar este tipo de
limitaciones. La contribución de las facetas iluminadas se calcula con la conocida fórmula de
Gordon.
Una vez implementado el nuevo algoritmo se han analizado los problemas que aparecen y la forma
de solucionarlos. Finalmente se ha realizado un análisis de sus prestaciones tanto en precisión
como en velocidad, para posteriormente compararlo con las técnicas alternativas (estado del
arte).
Con esta nueva forma de cálculo de la Óptica Física se ha modernizado el programa GRECO
adaptándolo a la tecnología y las nuevas posibilidades que ofrecen los procesadores actuales.
1
Resum del Projecte
El programa GRECO és un paquet de software utilitzat per a calcular la Secció Recta Radar.
Inclou diversos mètodes com Òptica Física, traçat de raigs o càlcul del camp difractat per les
arestes. Tots ells estan basats en l'ús d'aproximacions d'alta freqüència que permeten el càlcul
�ns i tot d'objectes complexos mitjançant simulació amb ordinador. En aquest projecte s'explica
un nou algoritme per al càlcul de l'Òptica Física.
Anteriorment, GRECO utilitzava tècniques de processament grà�c que permetien obtenir les
característiques geomètriques del blanc però que presentaven una sèrie de limitacions. El treball
ha estat analitzar quines eren, detectant les causes de les mateixes i el seu impacte en el resultat
global. S'ha comprovat que la causa principal d'aquestes restriccions és la quanti�cació. Els
algoritmes anteriors treballen directament sobre la imatge de l'objecte en pantalla. Aquesta
imatge, al cap i a la �, és un mapa �nit de píxels que conté valors de 8 bits. Per tant, les dades
amb què es treballa estan restringides a la posició discreta dels píxels i més, quantitzades.
La part principal del treball realitzat en aquest Projecte Final de Carrera es centra en el desenvo-
lupament d'un nou métode per a la discriminació correcta de superfícies il·luminades que pretén
solucionar els errors de l'algorisme anterior. S'ha ideat una manera de detecció les superfícies en
lloc dels píxels visibles. D'aquesta manera es treballa de forma directa amb les malles de facetes
planes que s'aproximen millor a la geometria del model i així evitar aquest tipus de limitacions.
La contribució de les facetes il·luminades es calcula directament amb la coneguda fórmula de
Gordon.
Un cop implementat el nou algorisme s'han analitzat els problemes que apareixen i la forma de
solucionar-los. Finalment s'ha realitzat una anàlisi de les seves prestacions tant en precisió com
en velocitat, per a posteriorment comparar-lo amb les tècniques alternatives (estat de l'art).
Amb aquesta nova forma de càlcul de l'Òptica Física s'ha modernitzat el programa GRECO
adaptant-lo a la tecnologia i les noves possibilitats que ofereixen els processadors actuals.
2
Abstract
In this project, a new algorithm for computing the Physical Optics of a radar target has been
developed to be implementated in GRECO. This is a software package for calculating the Radar
Cross Section. It includes several computation methods such as Physical Optics, ray tracing or
the di�racted �eld by the wedges. All of them are based in high frequency approaches that allow
the computation of complex object's Radar Cross Section using computer simulation.
Before this project, GRECO was based on graphic processing techniques so as to obtain the
geometrical characteristics of the target, but this had some kind of limitations. In this report
these limitations have been analyzed, �nding their causes and their impact in the overall result.
The main cause of these restrictions is quanti�cation. Graphical processing algorithms works
directly with the image of the object on screen. This image, after all, is a �nite pixel map that
contain 8-bit values. Therefore the working data is both restricted to the integer position of the
pixel and quanti�ed.
The main part of this project is focused on the development of the algorithm for the correct
discrimination of visible surfaces that aims to solve the problem mentioned above. It works
directly with the �at facets mesh which makes a better approximation of the geometry of the
model. When visible facets have been identi�ed, the PO contribution is calculated with the
well-known Gordon's formula.
Once the new algorithm has been completed, the problems and limitations have been analy-
zed and �xed. Finally, a test of its performance has been made in both, accuracy and speed.
The results of the test have allowed to compare the algorithm with alternative state of the art
techniques.
This new way of calculating the Physical Optics aims to upgrate GRECO adapting it to the new
possibilities o�ered by today's processors.
3
1. Introducción
1.1. Motivación
El análisis de la difracción electromagnética de un objeto consiste en el estudio de los campos
electromagnéticos re�ectados y difractados en sus super�cies debidos a la incidencia de un campo
electromagnético. No obstante, el estudio analítico del problema es posible solo con objetos de
geometría canónica, e inviable en casos reales con geometría compleja.
Gracias al avance de la informática se desarrollaron técnicas de análisis electromagnético para
la predicción de la Sección Recta Radar mediante métodos numéricos. Sin embargo, el hecho
de tener que discretizar del objeto en una malla de triángulos seguía siendo un problema sin
resolver para objetos eléctricamente muy grandes, puesto que la dimensión de los triángulos
debía ser mucho más pequeña que la longitud de onda. Esto requería la confección de sistemas
de ecuaciones con un número muy elevado de incógnitas que suponían un tiempo de cálculo
excesivo.
Por eso, pronto se recurrió a métodos de cálculo capaces de analizar estructuras complejas me-
diante aproximaciones asindóticas. Los más utilizados en la actualidad son los métodos de alta
frecuencia, capaces de obtener unos resultados aceptables sin la necesidad de un tiempo de cálculo
excesivo.
La importancia de idear un método de cálculo e�caz es debido a que la industria aeronáutica
siempre ha estado muy interesada en el cálculo de la difracción electromagnética para mejorar el
diseño de sus equipos con la �nalidad de cumplir una serie de requisitos. Por eso la UPC, en la
década de los 90, ideó un paquete de software llamado GRECO, capaz de calcular la difracción
electromagnética de un objeto mediante el uso de los métodos de alta frecuencia. Este programa
resultó ser una gran innovación debido al uso del procesado grá�co para dinujar una imagen
tridimensional del objeto a analizar. De este modo era posible obtener la información necesaria
para aplicar dichos métodos grá�camente en tiempo casi real a pesar de que los procesadores
(CPU) funcionaban a velocidades de solamente decenas o centenares de MHz.
El procesado grá�co introducía errores debidos principalmente a que no estaba previsto para
el análisis de la difracción electromagnética. Aunque estos eran totalmente despreciables para
su �nalidad principal, el dibujo del objeto en pantalla, resultaban ser muy importantes para
el análisis electromagnético que requería de una exactitud máxima. En general se debían a
la discretización y a las aproximaciones realizadas por la estación grá�ca. Lamentablemente
4
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS 5
por aquel entonces no existía la posibilidad de utilizar otras formas de cálculo de la difracción
electromagnética en tiempo real, en mayor parte debido a la falta de velocidad de los procesadores
existentes.
Durante los primeros años del siglo actual, la potencia de cálculo de las CPU se ha ido incre-
mentado de forma signi�cativa. Esto ha proporcionado la posibilidad abrir nuevas puertas en el
cálculo de la difracción electromagnética en tiempo real que permitan solucionar los problemas
que aparecieron debidas a las técnicas grá�cas. Fue aquí de dónde partió la idea de realizar este
proyecto.
1.2. Objetivos
La mayor parte de este trabajo consistirá en la búsqueda de un nuevo algoritmo capaz de realizar
la criba de super�cies iluminadas a partir de sus datos geométricos. De este modo, trabajando
directamente con las facetas se evitará el principal problema: la pixelización del objeto debido
a discretización de las coordenadas de la pantalla, también conocido como ruido de procesado
grá�co [1]
Se comentará su implementación en el GRECO, un programa creado por la UPC para el análisis
de la Sección Recta Radar de objetos complejos mediante técnicas de procesado grá�co. Será
necesario también comentar los cambios que se han tenido que realizar para adaptarlo al nuevo
algoritmo.
Se intentará aprovechar la potencia de las CPUs actuales sin perder la seña de identidad del
programa: el procesado grá�co. El objetivo será renovar el algoritmo actual creando uno híbrido
entre CPU y GPU combinando las ventajas que cada una de estas técnicas ofrecen para mejorar
la precisión del mismo y también reducir el tiempo de cálculo.
La obtención de un algoritmo que necesite un tiempo de cálculo mínimo será otro objetivo clave.
Para ello se hará uso tanto de Pro�lers, con el �n de detectar cuellos de botella (Hotspots), como
de la paralelización de las partes de código que lo permitan. Con todo esto se conseguirá un
algoritmo más rápido que los vigentes en la actualidad mejorando la velocidad en más de un
orden de magnitud respecto a algoritmos que se consideran hasta ahora como estado del arte.
1.3. Estructura de la memoria
La memoria está organizada en varios capítulos cuyo objetivo �nal será la explicación de este
nuevo algoritmo de visibilidad.
En primer lugar se introducirán algunos conceptos necesarios para la comprensión de los demás
capítulos. Por ejemplo la de�nición de la difracción electromagnética, resaltando la principal
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS 6
aplicación de su estudio en alta frecuencia: la Sección Recta Radar. También aparecerán los
fenómenos de difracción en alta frecuencia más importantes y los métodos de cálculo existentes.
En todo momento se pondrá más énfasis en aquellos métodos que son utilizados por el GRECO.
En segundo lugar se presentará el algoritmo actual utilizado por el GRECO comentándose sus
ventajas y sus inconvenientes.
Seguidamente se expondrán los cambios de metodología utilizados respecto al anterior método de
cálculo de la Óptica Física con el �n de acabar con los errores grá�cos. Se explicará el desarrollo
del nuevo algoritmo dividiéndolo en distintas etapas, de la misma forma en que fue realizado.
Se describirán los problemas aparecidos de cada una de estas fases y las mejoras conseguidas
respecto a las anteriores. También se darán algunos detalles del modo en que fue implementado
en el GRECO.
Una vez llegada a la solución de�nitiva se describirán algunas aproximaciones que permitirán
mejorar la velocidad del cálculo sin perder en precisión de forma excesiva. Para acabar, aparecerán
los resultados del algoritmo en cuanto a velocidad y precisión.
2. RCS y difracción electromagnética (alta
frecuencia)
2.1. Condiciones de partida
Para comprender el funcionamiento del algoritmo desarrollado será necesario conocer las bases
físicas en las que se basa. Por eso, antes de todo y a modo de introducción, se darán a conocer
en el apartado actual los fenómenos más relevantes de la difracción electromagnética. Se pondrá
énfasis en los de alta frecuencia, especialmente en aquellos que utilicen más adelante. Finalmen-
te se presentará el software GRECO, una aplicación que se encarga de calcular la difracción
electromagnética de una forma grá�ca.
2.2. Difracción electromagnética
La difracción electromagnética [2] es el fenómeno de desviación de las ondas electromagnéticas
al encontrar un obstáculo. En este caso se trata del estudio de los campos electromagnéticos
dispersados por el objeto a analizar. En la mayoría de las ocasiones la resolución del problema
no será analítica. De hecho tan solo se podrá aplicar en una serie de estructuras con geometrías
muy particulares (canónicas): esferas, planos, cilindros in�nitos, cuñas in�nitas...
En general el objeto a analizar presentará una estructura compleja que reducirá la resolución del
problema a tan solo dos posibilidades: o bien mediante medidas experimentales, o bien mediante
el uso de métodos numéricos.
Para el cálculo mediante medidas experimentales exigirá la creación del objeto a una escala
mucho menor (maqueta) y su posterior análisis a frecuencias pequeñas con el �n de igualar su
medida eléctrica. Este método presenta el problema de que algunos fenómenos se muestran de
forma diferente según la escala, por eso no siempre será un método de análisis efectivo. Además
se necesitará realizar el estudio en una sala especial (cámara anecoica de radiofrecuencia). En
general se tratará de una forma cara de realizar el análisis.
Para el cálculo de la difracción mediante métodos numéricos es necesaria la discretización del
objeto en pequeñas super�cies (o facetas) y la resolución se realizará a partir del cálculo de
sistemas de ecuaciones. Este método proporciona resultados correctos cuando las super�cies
7
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS 8
discretizadas son pequeñas respecto a la longitud de onda del campo a analizar. Generalmente
se deberá de discretizar la super�cie o el volumen en elementos de tamaño del orden de λ/10.
Este hecho llevará a una limitación, debida a un tiempo de cálculo y una cantidad de memoria
excesivos.
En estos casos será necesario utilizar métodos aproximados que proporcionen resultados acepta-
bles con un esfuerzo computacional reducido. Estos métodos se basan en la aplicación del teorema
de equivalencia, situando corrientes equivalentes únicamente en aquellas super�cies sobre las que
se conozcan o se puedan estimar las componentes tangenciales del campo eléctrico y magnético.
En el resto de super�cies se colocará un conductor perfecto. De esta forma, las corrientes equiva-
lentes desconocidas sobre este conductor no radian pero, en contrapartida, es necesario calcular
la radiación de las corrientes equivalentes conocidas en presencia de una estructura conductora,
en lugar de en el espacio libre.
2.3. Sección Recta Radar (RCS)
La Sección Recta Radar (o RCS) consiste en el cálculo de la difracción electromagnética norma-
lizada de un objeto en una determinada dirección del espacio para una determinada frecuencia.
Normalmente es denotada mediante la letra σ y se expresa del modo siguiente [3]:
σ = lımR→∞
4πR2Wr
Wi= lım
R→∞4πR2 | ~Er|2
| ~Ei|2(2.1)
Siendo ~Er el campo re�ejado por el objeto en la posición del radar, y ~Ei el campo incidente
sobre el objeto. R es la distancia entre el blanco y el radar. El límite de R tendiendo a in�nito
introduce el concepto de campo lejano: el campo puede considerarse como una onda localmente
plana.
Con esta normalización se consigue independizar la medida del campo incidente haciendo que
únicamente dependa de la geometría del objeto a analizar (forma, constitución y materiales que
lo constituyen). No es casualidad que las unidades de la RCS sean m2, puesto que la Sección
Recta Radar da una idea de la super�cie que debería de tener una esfera centrada en la posición
del objeto, para dispersar un campo idéntico al objeto analizado en la dirección observada.
De hecho también se puede de�nir como el área de intercepción que debería tener un objeto para
que pudiera radiar isotrópicamente la misma densidad de potencia que dispersa el target actual,
dada una cantidad de potencia incidente.
Una esfera es un objeto que radia de forma isotrópica, así pues, su RCS coincide exactamente
con el área de intercepción. Una placa, en cambio, radia de forma no isotrópica. De hecho su
RCS máxima coincidirá con su área multiplicada por un término de ganancia (directividad).
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS 9
El cálculo de la Sección Recta Radar permite medir los campos dispersados (Scattered) por el
objetivo. Con estos campos es posible la radiodetección y el seguimiento de cualquier objeto,
desde barcos hasta aviones militares.
Los programas de tecnología avanzada desarrollados en la industria aeronáutica requieren dispo-
ner de métodos de cálculo numérico y modelización para la obtención de la Sección Recta Radar.
Dichos programas permiten analizar la sección recta de un cierto blanco radar concreto y, por
otra parte, modi�carla hacia un valor deseado. En la �gura 2.1 se dispone de un ejemplo típico
del cálculo de la Sección Recta Radar, en este caso para un A-26 Invader.
Figura 2.1.: Diagrama RCS típico de un A-26 Invader [4]
Valores medios típicos
En el cuadro posterior se pueden ver algunos de los valores medios típicos de la RCS:
Blanco σ(m2) Blanco σ(m2)
Insecto 10−5 Avioneta 2Pájaro 0.01 Bombardero 10Misil 0.1 Transporte 40
Hombre 1 Coche 100
Cuadro 2.1.: Valores medios típicos de la RCS
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS 10
2.4. Fenómenos de difracción en alta frecuencia
2.4.1. Re�exión en grandes super�cies
Este tipo de re�exión aparece ligada a grandes super�cies con radios de curvatura eléctricamente
muy grandes. En este caso la mayor parte de la energía electromagnética incidente en el objeto
es re�ejada de acuerdo con la ley de la re�exión de Snell (ver �gura 2.2). Si la mayor parte
de la energía electromagnética re�ejada se genera en la dirección de observación de el radar se
dice que se ha producido una re�exión especular. Así mismo reciben el nombre de puntos de
re�exión especular los puntos de la super�cie en donde son producidas estas re�exiones. En el
caso monostático, se produce una re�exión especular en los puntos cuya incidencia es normal a
la super�cie.
Figura 2.2.: Re�exión en grandes super�cies
2.4.2. Re�exiones en múltiples super�cies
En este caso se tratan las re�exiones cuya onda generadora no coincide con la incidente sino que se
trata de una re�exión de ésta sobre otra super�cie del objeto. En algunos casos su contribución
en la RCS es mucho mayor que la debida a la primera re�exión. Los únicos rayos que van a
interesar en este caso serán aquellos que tras varias re�exiones vuelvan hacia la dirección del
radar. Entonces se habla de re�exiones múltiples especulares.
2.4.3. Difracción en discontinuidades
Este tipo de fenómeno está asociado a discontinuidades. El campo se dispersa en todas las
direcciones del espacio con la �nalidad de que se puedan cumplir las condiciones de contorno
en dicho límite. Se producen principalmente en discontinuidades de la normal (aristas) o de la
curvatura de la super�cie, cambios de material, ranuras o agujeros en la super�cie, vértices, y en
cualquier otro tipo de discontinuidad (2.3).
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS 11
ranuraarista
cambiode material
Figura 2.3.: Difracción en discontinuidades
2.4.4. Otros fenómenos
Ondas de super�cie (Traveling waves)
Se producen en casos en que la dirección de incidencia es casi rasante sobre la super�cie y con la
polarización adecuada. Esta energía se dispersa si se topa con cualquier tipo de discontinuidad.
La terminación brusca de la estructura de propagación da lugar a una radiación en sentido
contrario, que puede producir una respuesta importante en el caso monoestático.
TRAVELING WAVE
Discontinudad de superficie
Cambio de material
Final del cuerpo
Figura 2.4.: Traveling wave
Creeping waves
Son ondas que se propagan por la zona no iluminada. Aparecen en super�cies de curvatura
suave y radian en in�nitas direcciones del espacio.
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS 12
CREEPING WAVE
Tangent ray Shadow boundary
Tangent ray
Figura 2.5.: Creeping wave
Cavidades
Las cavidades pueden absorber, re�ejar o dispersar toda la energía incidente en función de sus
propiedades de resonancia.
2.4.5. Ejemplo en un caso real
En la �gura 2.6 se ve como estos fenómenos aparecen combinados en objetos con estructura
compleja.
REFLECCIONESMÚLTIPLESONDA DE
SUPERFICIEREFLEXIÓN ESPECULAR
DIFRACCIÓNDE BORDES
CREEPINGWAVES
CONDUCTOS, MODOS DEGUÍA DE ONDAS
Figura 2.6.: Ejemplo de los fenómenos que se pueden entrar en objetos reales
2.5. Métodos de cálculo
El cálculo de la difracción electromagnética creada por un objeto en alta frecuencia suele des-
componerse en distintas fases. Cada una de estas fases obtiene el campo difractado realizando
una serie de aproximaciones asindóticas para una situación concreta que, sumadas entre sí, per-
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS 13
miten la obtención de la difracción total. En este caso en particular se van a enumerar las más
importantes a modo resumen, puesto que posteriormente tan solo se tratará una de ellas. Aunque
es importante conocerlas todas con el �n de ubicar el contexto del tema que se va a tratar.
2.5.1. Óptica física (PO)
El método de Óptica Física (PO) consiste en el hecho que las corrientes inducidas sobre las partes
del objeto no iluminadas por el radar son muy pequeñas comparadas con las que se producen en
las zonas iluminadas. De hecho, la aproximación realizada por este método consiste en anularlas.
Para las demás super�cies el cálculo se realizará con la obtención de las corrientes equivalentes
que existirían en un plano in�nito tangente en cada punto de la super�cie. Se puede resumir el
cálculo de la corriente equivalente de una super�cie de la manera siguiente [5]:
~JPO = n× ~H =
2n× ~H i superficie visible por el radar
0 superficie no visible(2.2)
Donde n corresponde a la normal a la faceta correspondiente y ~H i al campo magnético incidente.
En la práctica no se observa un cambio brusco de la corriente inducida en el límite entre la zona
iluminada y la sombreada, sino que esta se reduce de una forma suave (�gura 2.7) desde el valor
de PO en la zona visible al valor de la zona oculta (cero).
Zona iluminadaZona
Oculta
Radar
Zona iluminada Zona oculta
Figura 2.7.: Aproximación de los corrientes inducidos (Óptica Física)
Una vez obtenidas estas corrientes equivalentes, el cálculo del campo dispersado es obtenido
mediante la correspondiente integral 2.3.
~Er = −jωµejkr
4πrr × r ×
¨Superficie iluminada
2n× ~H i ejkr·~r′ds′ (2.3)
Este método da resultados válidos para el cálculo de la re�exión en grandes super�cies. No obs-
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS 14
tante, es incapaz de detectar las re�exiones en múltiples super�cies ni el fenómeno de difracción
en aristas. De hecho es el método más utilizado debido a que el coste computacional se reduce a
una integración numérica y es muy inferior al que requieren los métodos numéricos.
2.5.2. Trazado de rayos (RT)
El trazado de rayos es un método similar al anterior que además tiene en cuenta las posibles
re�exiones múltiples del campo re�ejado por el objeto. Este método es un poco más complejo.
Se obtiene la primera re�exión de la forma comentada en el método anterior, posteriormente se
calcula si la dirección de la re�exión vuelve a intersecar con alguna super�cie del objeto. Si es
así, se vuelve a calcular el campo difractado que produce esta nueva re�exión. El cálculo �naliza
cuando ya no existan más re�exiones acumulando el valor de todas las re�exiones que llegan a
la posición del radar.
Para llevarlo a cabo se lanzan un gran número de rayos que proceden de la posición del radar.
Estos se re�ejan en el objeto según la óptica geométrica (ley de Snell). Finalmente se suman las
contribuciones de los rayos que vuelven hasta la posición inicial.
2.5.3. Difracción de aristas
El primer método de cálculo fue la teoría geométrica (GTD) introducida por Keller. Este método
también se basa en el trazado de rayos, como la óptica geométrica, pero introduce los rayos
difractados por las aristas. Al incidir un rayo sobre una cuña conductora se observa una difracción
formando un ángulo de re�exión con la arista igual al de incidencia. En este caso, a diferencia
de lo que sucede en las super�cies planas en las que solo hay una única dirección de re�exión, se
observan in�nitas direcciones que forman con la arista un ángulo igual al ángulo de incidencia.
Estas direcciones forman el denominado cono de Keller.
La teoría física de la difracción (PTD), desarrollada paralelamente a la teoría de Keller, obtiene
resultados equivalentes evitando algunos problemas. El resultado de PTD es �nito y contiene
únicamente la difracción de la arista por lo que se le deben sumar los campos re�ejados en las
super�cies, calculados por ejemplo mediante la aproximación de la Óptica Física (PO).
3. Graphical Electromagnetic Computing
(GRECO)
3.1. GRECO
El programa GRECO es una aplicación software que permite el cálculo de la Sección Recta Radar
de un objeto utilizando métodos de alta frecuencia.
Fue introducido en la década de los 90 para el cálculo rápido de la Óptica Física (PO) en
super�cies paramétricas [6]. La rapidez era la ventaja que proporcionaba, cosa que permitió
operar el cálculo en prácticamente cualquier estación de trabajo utilizando una simple tarjeta
grá�ca. Ahora disponible en la mayoría de los PCs. Es decir, el programa GRECO permitió
que cálculos complejos, hasta entonces inabordables salvo por supercomputadores, pudieran ser
llevados a cabo por cualquier computadora personal. El diagrama de funciones que sigue el
GRECO puede verse en la �gura 3.1, donde además se ha añadido el diagrama de funciones del
método convencional para resaltar las diferencias.
ArchivoCconClosCdatosCdeCgeometría
POCUCIntegralCdeCsuperfícieGOCLCPOCRayUtracing
MECCIntegralCdeCbordes
SuperfíciesCiluminadasDistanciaCalCobservadorNormalesCaClaCsuperfície
DetecciónCdeCbordes
PreUprocesadoCgeométrico
ModeladoCdelCobjetoSoftwareCCAD
FacetasCyCcuñas
SuperfíciesCparametricas
MODELADO
CÁLCULOCRCS
SuperfíciesCiluminadasDistanciaCalCobservadorNormalesCaClaCsuperfície
DetecciónCdeCbordes
ImagenCdelCobjeto
ProcesadoCgráficoCdeClaCimagen
CPREPROCESADOGRÁFICOCDECLAC
GEOMETRÍA
PREDICCIÓNCRCS
PuntoCdeCvistaReflecciónCdeCsuperfície
Luces:CFuentes
MODELADO
ModeladoCdelCobjetoSoftwareCCAD
FacetasCycuñas
SuperfíciesCparamétricas
POCUCIntegralCdeCsuperfícieGOCLCPOCRayUtracing
MECCIntegralCdeCbordes
Figura 3.1.: Diagrama de funciones del GRECO (der.) comparado con el método convencional(izq.)
El programa GRECO calcula la Sección Recta Radar de los objetos estudiando los tres fenómenos
comentados en el apartado 2.4: re�exión en grandes super�cies, difracción en aristas y re�exiones
15
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS 16
múltiples. Los métodos utilizados para ello son los que aparecen en 2.5. Son métodos que utilizan
aproximaciones de alta frecuencia y cada uno de ellos está especializado en el estudio de uno de
los fenómenos estudiados.
3.1.1. Procesado grá�co en el GRECO
Como se comentaba anteriormente en 2.5.1, para el cálculo de la Óptica Física es importante la
detección de aquellos elementos o facetas iluminadas. De este modo se pueden eliminar todos los
que no contribuyen en el cálculo. Con el uso de una inter�cie grá�ca adecuada es posible dibujar
el objeto a analizar en pantalla siendo el observador el que se encuentra en la posición del radar.
De este modo aquellas super�cies representadas en pantalla son las iluminadas, y las que no se
muestran, las ocultas. Una ventaja adicional reside en que la estación de trabajo proporciona
las características geométricas de la super�cie: vector normal, distancia al observador y vector
tangente a las aristas en cada píxel de pantalla. De esta manera se evita tener que calcularlas
por otros medios. Dejando esta parte a la inter�cie GPU se libera a la CPU de los procesos con
mayor carga computacional.
PANTALLA
z'
y'
x'
Dirección de observación
Figura 3.2.: De�nición de las coordenadas de pantalla a través de las coordenadas del modelo
En primer lugar se obtienen las coordenadas (x, y, z) correspondientes a cada uno de los píxeles
en pantalla que son almacenadas en bu�ers de memoria. Requiere especial atención el bu�er z,
pues será el que permitirá conocer las super�cies situadas en primer plano de pantalla.
Con la iluminación adecuada del objeto se puede hacer que el color de cada píxel (3.3) dependa
exclusivamente de las normales a la super�cie visible en este punto. Por lo tanto se pueden
obtener las normales en cada uno de los píxeles cuanti�cadas en 8 bits:
n′pi = 0 . . . 255 (28 valores)
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS 17
Se obtiene la normal unitaria al píxel normalizando dicho valor.
ROJO
AZUL
VERDE
Rojo
Azul
= horizontal
= vertical= perpendicular a la imagenVerde
Figura 3.3.: De�nición de los colores a partir de los cuales se obtienen las normales de la super�cie
Según el modelo de iluminación de Phong cuando la re�exión de la super�cie es difusa, no
especular, la luminosidad de cada píxel es calculada separadamente para cada color R, G, B
como la proyección n · ri.
En la �gura 3.3 se puede ver una imagen de un F-117 y como la coordenada horizontal (x)
depende exclusivamente del color rojo, la vertical (y) del azul y la perpendicular (z), del verde.
Como las componentes del color son siempre positivas, aparece una ambigüedad en el signo de
las normales unitarias. Para obtener los valores positivos, el acelerador grá�co debe disponer solo
de las super�cies iluminadas, es decir, aquellas con cosθi > 0.
Para obtener los valores positivos y negativos es necesario iluminar el objeto desde dos direcciones
de los ejes (positiva y negativa) usando diferentes tipos de fuentes de luz. Se necesitan en total
seis fuentes de luz para obtener el valor de las normales con signo. Como tan solo se tienen 3
colores independientes se deberán separar en 2 imágenes diferentes.
3.1.2. Cálculo de la Óptica Física
Se parte con la fórmula general para el cálculo de la Óptica Física (2.3).
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS 18
~Er = −jωµejkr
4πrr × r ×
¨Superficie iluminada
2n× ~H i ejkr·~r′ds′ (3.1)
Sabiendo que:
~r × (n× ~Hi) = (~r · ~Hi) · n− (~r · n) · ~Hi
Para el caso monoestático ~r = −~ri. Además, si la onda es plana ~ri · ~Hi = 0. De este modo se
puede simpli�car:
~r × (n× ~Hi) = (~r · n) · ~Hi = cosθi ~H i
Así pues, según la Óptica Física, la RCS de una super�cie perfectamente conductora para un
radar monoestático puede aproximarse en altas frecuencias por la expresión:
σ =4π
λ2|ˆscosθe2 jKzds|2 (3.2)
Donde θ es el ángulo entre la normal a la super�cie y la dirección de incidencia. La z la distancia
desde el diferencial de super�cie ds al observador, proyectada en la dirección de incidencia. La
integral se extiende solamente sobre la región iluminada por la onda incidente.
Sin embargo, la imagen del objeto proyectada por GRECO es la proyección en pantalla de la
super�cie 3D. De ese modo el diferencial de super�cie en pantalla ds', equivalente a un píxel, es
igual a ds'=cosθds, y la integral puede escribirse:
σ =4π
λ2|ˆscosθe2 jKzds|2 =
4π
λ2|ˆpantalla
e2 jKzds′|2
En el caso de una super�cie discreta se llega a la siguiente fórmula:
σ =4π
λ2|∑pıxeles
e2 jKz|2 (3.3)
Que equivale a la suma coherente de la contribución de la fase para todos los píxeles del target.
La contribución de fase es debida a la distancia z de cada píxel al observador.
Se debe notar que la ecuación 3.3 solo es válida si se supone que cada píxel se trata de una apertura
in�nitesimal. Como no se puede asumir dicha condición, se supone que un píxel es equivalente a
una apertura rectangular con una iluminación uniforme. La contribución del campo lejano puede
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS 19
ser aproximada por una función sinc del ángulo θ. Se puede observar como queda la fórmula:
σ =4π
λ2|∑
sinc(Kl
cosθsinθ)pıxelse
2 jKz|2 (3.4)
Donde l es el tamaño del píxel cuadrado en pantalla, y lcosθ es el tamaño de ds proyectado en ese
píxel.
3.1.3. Integral de Asvestas
Los cálculos anteriores se pueden mejorar siguiendo el método de Asvestas [7] que aproxima cada
píxel por el plano tangente en el centro del mismo, recortado por sus límites. El plano recortado
es una faceta rectangular cuya contribución a la RCS es la ecuación la que aparece en la fórmula
3.5. Se debe calcular la contribución de cada píxel y acumularla al resultado total.
(x',y',z')
a) Modelo del píxel b) Modelo PO: Plano tangente
x'
z'
y'
Figura 3.4.: Aproximación al plano tangente en el centro del píxel
EPO ∼ˆSej2kr·~r
′cosθds ≈ h2η1(kh
nxnz
) η1(khnynz
)ej2kz′
(3.5)
donde: η1(x) = sin(x)x
Dicho método permite una implementación muy e�ciente de la fórmula 3.5 con tan solo 5 ope-
raciones por píxel. Esto se traduce en una velocidad de 1 Gpíxel/s en computadores modernos:
tmp = sinc[nx[i]][nz[i]] * sinc[ny[i]][nz[i]];
Epo[0] += tmp * w[z[i]][0];
Epo[1] += tmp * w[z[i]][1];
Las funciones sinc y las exponenciales están tabuladas e indexadas por el contenido de los bu�ers.
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS 20
En primer lugar aparecen las matrices nx[i], ny[i] y nz[i], que representan la normal a la super�cie.
Debido al hecho que está cuantizada por el procesador grá�co, se puede representar en un vector
�nito donde cada uno de sus valores representa el valor cuantizado de la normal en la posición del
píxel i. Lo mismo sucede para el vector z[i]. El vector W[] corresponde a la tabla de exponenciales.
Este código corresponde al cálculo de la PO con el método de Asvestas de un píxel i-ésimo
determinado. De hecho se halla dentro de un bucle paralelizado que suma las contribuciones de
todos los píxeles.
3.1.4. Ejecución del GRECO
Se muestra una captura de pantalla de una ejecución del GRECO en la �gura 3.5. Como se
puede ver, la ventana de GRECO se divide en dos partes claramente diferenciadas: la ventana
de imágenes y la ventana de datos.
Figura 3.5.: Captura de pantalla del GRECO
3.1.5. Ventana de imágenes y de datos
Por un lado se tiene la ventana de imágenes que está dividida hasta un máximo de 4 partes. De
hecho el número de divisiones dependerá del tipo de método utilizado para realizar el análisis.
En cada una de estas divisiones se realiza una imagen del blanco. Dichas imágenes se utilizarán
para obtener la información necesaria para el cálculo de la RCS (�gura 3.6).
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS 21
En la primera ventana se realiza un dibujo del target con el �n de detectar las super�cies ilumi-
nadas y parte de la normal a ella (normal sin signo). Si a esta le añadimos un segundo dibujo con
diferentes iluminaciones, es posible obtener las normales completas (con signo). Estas imágenes
se utilizan para el cálculo de la Óptica Física.ó
ó
GRECOóóVentanaódeóDatosVentanasódeósuperficiesó
Ventanasódeósuperficiesó
múltiplesó
(visibles)ó
(‘back-facing’)ó
Aristasódeóunaóyódosó
Aristasódeóreflexionesó
reflexionesó carasó
unaócaraó
reflexiones
Detecciónódeó
visiblesó
‘back-facing’ó
Impactosó
Impactosómúltiplesó
Impactosóómúltiplesó
aristasó
Figura 3.6.: Subdivisiones principales de las ventanas del GRECO
Para obtener información geométrica sobre las super�cies no iluminadas se representan dos imá-
genes adicionales en las ventanas inferiores. En estas imágenes se han suprimido las partes ilumi-
nadas, por lo que las super�cies justamente detrás (denominadas back-facing) son ahora visibles.
El conocimiento de las normales unitarias a éstas es muy importante para el cálculo de la dirección
de las aristas de una cara y de las re�exiones en super�cies no iluminadas.
Las cuatro ventanas de imágenes también se usan para mostrar información sobre los resultados
de los algoritmos de trazado de rayos y de detección de aristas. Si se selecciona el método de
trazado de rayos, se dibujan píxeles blancos en las dos ventanas de la izquierda para mostrar
los impactos de los rayos que han sufrido múltiples re�exiones. La ventana superior izquierda
muestra los impactos de los rayos en las super�cies iluminadas, mientras que la ventana inferior
izquierda muestra los impactos en las super�cies back-facing. Para un método de difracción en
aristas (PTD o Mitzner), se dibujan píxeles blancos para mostrar las aristas detectadas por el
algoritmo de detección grá�ca. La ventana superior derecha muestra todas las aristas detectadas,
mientras que la ventana inferior derecha sólo muestra las aristas de una cara.
Una ventana adicional, la ventana de datos, se sitúa en la parte derecha de la pantalla y muestra
información útil sobre el modelo geométrico y sobre el funcionamiento del programa.
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS 22
3.2. Problemas de test
Como se comentaba en la introducción, este algoritmo ha sido pensado para obtener la difracción
electromagnética de objetos con super�cies complejas que, salvo caso especiales, no pueden ser
analizadas por métodos analíticos. No obstante, con tal de comprobar la precisión del mismo,
será necesario analizar su comportamiento con objetos simples que permitan comprobar aspectos
concretos del funcionamiento de los algoritmos.
Se de�nirán una serie de super�cies de referencia que sean signi�cativas para poder valorar la
validez del algoritmo. Posteriormente se extenderá la validación a super�cies más complejas.
Estos últimos casos tan solo podremos compararlos con resultados obtenidos mediante técnicas
anteriores. Tanto durante la de�nición del método como en el capítulo de resultados se utilizarán
las super�cies que se de�nen a continuación:
Placa de 5λ
Con la placa se puede comprobar la desaparición del ruido de procesado grá�co [1] para ángulos
muy rasantes. Sin embargo, esta super�cie está muy limitada puesto que tan solo servirá para
comprobar la correcta implementación de la integral. No hay suma del resultado de varias facetas
(solo hay una), y por lo tanto, no existe solapamiento entre ellas. Ninguna faceta debe ser
detectada oculta. Se puede ver un ejemplo en la �gura 3.7
b
a
x
y
z
Figura 3.7.: Placa plana
Diedro de 60º
Los diedros son super�cies muy importantes para veri�car que el algoritmo funcione correcta-
mente. Además de tener super�cies ocultas, estas se deben de sumar. Así se puede comprobar,
entre otras cosas, si los signos son correctos.
En este proyecto se ha utilizado un diedro de 4.71λ x 7.5λ con un ángulo formado por sus facetas
de 60º (Figura 3.8). Esta super�cie se trata de una buena referencia puesto que contará con la
mayoría de problemas del algoritmo que se irán solucionando a lo largo de la memoria.
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS 23
60º
Figura 3.8.: De�nición de un diedro en la intersección de dos semiplanos
Triedro de 90º
Con el triedro (�gura 3.9) se comprobará la desaparición del ruido de procesado grá�co.
z
x
y
Figura 3.9.: Triedro
Misil
Si bien es cierto que no se dispone del resultado analítico de super�cies complejas, también
se deben usar para el test del algoritmo. Al �n y al cabo serán las super�cies que �nalmente
terminará usando el programa. Así pues se de�nirá una super�cie con varias facetas para testar
el método de cálculo creado. En este caso la única forma que se tiene para validar los resultados
será comprobar los cambios con métodos anteriores. El objeto elegido es un misil como el de la
�gura 3.10.
Helicóptero
Finalmente se utilizará un objeto con muchas facetas para realizar los test de velocidad. Se ha
elegido el modelo de un helicóptero con un total de 1.595.070 entidades (�gura 3.11).
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS 24
Figura 3.10.: Misil
Figura 3.11.: Helicóptero
3.3. Errores en el cálculo debidos al procesado grá�co
3.3.1. Introducción
En esta sección se van a estudiar los errores (también conocidos ruido de procesado grá�co) que
pueden aparecer en el cálculo de la Sección Recta Radar. Se mostrarán en las distintas etapas
que forman el algoritmo, desde la creación del modelo hasta que este se muestre por pantalla. Así
se podrá detectar el modo en que se van añadiendo. Posteriormente se analizará el impacto de
éstos en el cálculo de la RCS. En algunos casos la única manera de corregirlos será aumentando
el bitmap y con ello el tiempo de cálculo. En cambio otros se podrán reducir e incluso eliminar
sin necesidad de aumentar la resolución y con ella, reducir la velocidad.
3.3.2. Modelo geométrico
La primera fase del algoritmo será la transformación de la super�cie real en un modelo de tipo
CAD que pueda ser analizable por el programa GRECO. El modelo creado siempre será una
aproximación del objetivo real, debido a la di�cultad de expresar la super�cie mediante entidades
grá�cas. Así pues aparecerá un error provocado por esta inexactitud. La magnitud de los errores
dependerá del tipo de modelo utilizado. En general será mayor en modelos de facetas y más
reducido en modelos geométricos, por ejemplo de tipo NURBS.
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS 25
En cuanto a los modelos de facetas siempre se deberá de encontrar un equilibrio entre la exactitud
y el tiempo de cálculo, puesto que la única forma de reducir el error será mediante la división de
la super�cie en un mayor número de facetas.
Los modelos geométricos aproximan la super�cie mediante ecuaciones matemáticas, por lo que
se reduce este error o incluso se elimina.
3.3.3. Modelo para la representación grá�ca
Este error se produce en el momento de teselado. El teselado consiste en la creación de las facetas
triangulares a partir de las super�cies de tipo geométrico. Es realizado por el acelerador grá�co
con el �n de realizar la representación de forma e�ciente. Por lo tanto, tan solo afectará a los
modelos de tipo geométrico. Evidentemente se reducirá conforme se aumente la resolución del
mallado. No afecta a las super�cies de�nidas mediante facetas pues no necesitan ser teseladas.
ÓpticauFísicau(GordonuFacetas)u-uMisilMisiluconu2000ufacetasMisiluconu5000ufacetasMisiluconu10000ufacetas
0 20 40 60 80 100 120 140 160 180Ángulou(º)
-35
-30
-25
-20
-15
-10
-5
0
5
10
RC
Su(
dB
m)
15
Figura 3.12.: Diferencias en el resultado de la Óptica Física para diferentes grados de teselado
3.3.4. Modelo de píxeles
La interpolación de colores entre los vértices de una faceta se usa para conseguir una represen-
tación realista del blanco con un número de facetas menor. Pero esta interpolación modi�ca la
normal de los píxeles haciendo que la normal utilizada no coincida con la auténtica normal de la
super�cie. Esta interpolación bilineal de colores produce un efecto de super�cie curva mientras
que la faceta triangular es completamente plana (�gura 3.13).
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS 26
a) Normal sin interpolación
y'
z'
x'
b) normal interpolada
Coordenadas de los píxeles
Superfície renderizada
Normal a la superfície
Facetas
Figura 3.13.: Efecto del proceso de interpolado sobre las normales: a) normal sin interpolar y b)normal interpolada
3.3.5. Cálculo de los bu�ers
El acelerador grá�co está optimizado para mostrar una representación realista del blanco, pero
no para una representación exacta de éste. Así pues, se producen errores en el cálculo de los
bu�ers z[x,y] y n[x, y] en algunos píxeles. La mayoría se producen en la intersección de diferentes
entidades grá�cas que componen el modelo. Son debidos a que al extraer la información se
realiza la representación en diferentes ventanas de la pantalla con diferentes iluminaciones. En
cada representación, las entidades pueden variar en píxeles, lo que provoca errores de coincidencia
al unir la información de cada ventana. También hay errores intrínsecos al acelerador, sobre todo
en el cálculo de la componente z.
3.3.6. Resolución del Frame-Bu�er
Se aprecian dos errores: el primero debido a la falta de resolución en sí y el segundo a un problema
propio del procesado grá�co.
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS 27
El frame-bu�er no es más que la zona de memoria donde se almacena la información de color
de cada píxel. Por tanto es evidente que la resolución en píxeles dependerá de la cantidad de
memoria disponible. Lo que sucede es que el tiempo de cálculo es proporcional al número de
píxeles a rastrear, por lo tanto el usuario deberá elegir menos píxeles si quiere reducirlo, a costa
de aumentar el error en el cálculo.
Aunque el error es despreciable para incidencia perpendicular, incluso para resoluciones pequeñas,
este aumenta para incidencia oblicua haciéndose más mucho grave. Por ejemplo, si se imagina
una placa plana cuadrada, a medida que la incidencia es más inclinada el número de píxeles que
ocupa en pantalla es menor independientemente de la capacidad de píxeles de la ventana. Cada
uno de estos resultan muy importantes en el cálculo del resultado global, así pues, el hecho de no
poder detectarlos parcialmente provoca la aparición de errores signi�cativos que se magni�can
debido al rápido cambio de fase experimentado en ese momento.
Ejemplo
Una placa plana que con incidencia broadside (0º) ocupa un total de 72x72 píxeles
en la imagen, para un ángulo de incidencia de 69º tan solo ocupa 72x25,8 píxeles.
Entonces debe ser aproximada a 25 o 26 píxeles. Esto provoca un error del 3.2% en
la estimación del tamaño de la placa que traduce en un error de 15 dB en el cálculo
de la integral PO.
En las �guras de a continuación (3.14 y 3.15) se puede observar el problema de ruido de procesado
grá�co en la placa plana.
ÓpticagFísicagfgPlacagplanagdeg5 Tamañog=g52x52gpíxels
RC
Sg7
dB
m8
Ángulog7º8
b 1b 2b 3b 4b 5b 6b 7b 8b 9bf12b
f1bb
f8b
f6b
f4b
f2b
b
2b
AsvestasReferenciagMatlab
Figura 3.14.: Óptica física para una placa de 5λ con un tamaño de 52x52
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS 28
Incluso aumentando el tamaño del bitmap no se consigue minimizar el problema.
Óptica Física - Placa plana de 5 Tamaño = 520x520 píxels
0 10 20 30 40 50 60 70 80 90-120
-100
-80
-60
-40
-20
0
20
RC
S (
dB
m)
Ángulo (º)
AsvestasReferencia Matlab
Figura 3.15.: Óptica física para una placa de 5λ con un tamaño de 520x520
Se hace mayor hincapié a este error puesto que es el más crítico de todos y el que será más
necesario encontrar una solución.
3.3.7. Resolución del Z-bu�er
La coordenada z almacenada para cada píxel es un número entero discretizado en b bits. Con un
muestreo de λ/16, el máximo tamaño de un objeto es (2b/16)λ = 2b−4λ. En GRECO se utiliza
b=16 lo que da un total de 4000λ. El error en la cuanti�cación de la coordenada z es, en general,
menos restrictivo que el error debido a la resolución de Frame-Bu�er.
3.3.8. Resolución del bu�er de normales
A partir de las iluminaciones de los objetos, el acelerador grá�co proporciona las normales de
las super�cies. No obstante estas normales están codi�cadas mediante una variable de tipo char.
Por lo tanto, tan solo se podrá codi�car cada valor de la normal a los píxeles mediante 8 bits
(256 valores).
4. Solución a los problemas de procesado
grá�co
4.1. Procesado híbrido
Para evitar el error de discretización en el método de Óptica Física cada faceta deberá ser
procesada mediante la fórmula de Gordon en vez de calcular la contribución de cada uno de los
píxeles por separado.
Las facetas iluminadas serán identi�cadas por un nuevo método híbrido grá�co-CPU que se
adapta perfectamente a las capacidades de los nuevos procesadores, ahora ya con frecuencias de
reloj de varios GHz y la posibilidad de integrar varias CPUs en una única computadora.
Se debe ingeniar además un método computacionalmente e�ciente que evite comparar una faceta
con todas las demás, puesto que exigiría tiempos de cálculo que aumentarán de forma cuadrática
con el número de facetas haciéndose irrealizables para objetos complejos. En el mejor de los casos
el tiempo de cálculo debería de aumentar de forma lineal con el número de elementos.
El objetivo perseguido se consigue utilizando la matriz z-bu�er. Esta matriz contiene la posición
del objeto más cercano al observador, y del mismo modo al radar. Así pues, si se compara la
posición de la faceta en cuestión y esta coincide con la coordenada marcada por el z-bu�er, se
concluirá que la faceta es visible.
No resulta trivial alcanzar el código que dependa linealmente con el número de facetas. Por
ejemplo en [8] se observa un algoritmo que se encarga de detectar la visibilidad de las facetas
pero con una complejidad N log N utilizando una estructura de árbol.
A priori se tratará de un método computacionalmente e�ciente puesto que cada faceta tan solo
necesita una única comparación. Además se aleja, o como mínimo se reduce, el factor cuadrático
que aparecía en el método anterior con el número de píxeles. Si bien es cierto que se debe de
inicializar la matriz z-bu�er, esta tan solo se realiza una vez por ángulo (cuando se dibuja el
objeto).
También se tiene que pensar qué parte de la faceta se debe de comparar con el z-bu�er ya que
siempre se trabajará con puntos en el espacio, no super�cies. Se decide trabajar, por comodidad,
con los vértices de la faceta. De esta forma se realizarán tantas comprobaciones por faceta como
29
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS 30
vértices tenga ésta.
Posteriormente se decidirá la visibilidad de la faceta total a partir de los resultados de las deci-
siones anteriores y, si es el caso, se dividirá la faceta en dos partes: visible-oculta.
Se resumen a continuación las diferentes etapas del nuevo método enfatizando la parte que se
encarga de llevarla a cabo, es decir CPU o GPU:
1. CPU: Teselado paramétrico de las super�cies en una malla de facetas (ya sean triángulos
o quads). Se debe realizar para cada una de las direcciones de incidencia.
2. GPU: Para cada dirección de incidencia, se debe de procesar el modelo completo de facetas
para dibujar la imagen del objeto desde el punto de vista el radar. La imagen contiene tan
solo las super�cies iluminadas.
3. CPU: Para todas las facetas se debe testar si sus vértices son visibles o no. Si es completa-
mente visible, se calcula la PO usando la fórmula de Gordon [9] para todas las frecuencias.
Las facetas parcialmente iluminadas serán subdivididas mediante un algoritmo de sub-
división con tal de dividir la sección visible de la oculta tal y como se puede observar
en el diagrama de �ujo de la �gura 5.1. Una vez realizado este proceso, es calculada la
contribución de la parte visible.
Los resultados del algoritmo pueden verse en la �gura 4.1.
Figura 4.1.: Ejemplo del algoritmo de detección de visibilidad de facetas
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS 31
4.2. Integral de Gordon
Anteriormente se realizaba la criba de super�cies iluminadas directamente a partir de la imagen
del radar encontrando aquellos píxeles no ocultos. Una vez realizada la criba se calculaba la
contribución de cada uno de dichos píxeles. La integral utilizada era la de Asvestas, que estaba
adaptada al algoritmo de visibilidad. El nuevo método, no obstante, trabajará con las facetas
que constituyen el objeto. De este modo la integral utilizada será la de Gordon. Es la que se
puede observar en la ecuación 4.1.
EPO ∼~Er · er
Ei=
1
2π· e−j2kr0
r0·
NT∑n
(s · n)
2s× nT 2n
·3,4∑m
~tm · η1(ks · ~tm) · e−j2k~lm·s (4.1)
Donde se de�nen los siguientes valores:
~lm = (~rm+1+~rm)2
~tm = ~rm+1 − ~rm
Tn = |2s× n|
η1(x) = sin(x)x
También es necesario el estudio del caso singular para Tn = 0, o a efectos prácticos un valor
cercano, por ejemplo ε. En este caso el corchete [· · · ] se simpli�ca de esta forma:
[. . .] = −jkSn · ej2k~rm·s Sn = area de la faceta
~rm = coordenada de un vertice
4.3. Algoritmo de visibilidad
4.3.1. De�nición de coordenadas
El nuevo algoritmo se encargará de detectar la visibilidad de las facetas. Pero antes de explicar
su funcionamiento será necesario de�nir un sistema de notación de las coordenadas con tal de
que el trabajo sea coherente.
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS 32
En todo momento será importante distinguir entre las coordenadas del modelo y las coordenadas
de pantalla. En la �gura 4.2 puede verse la relación entre ambos tipos de coordenadas.
y'
x'
z'
Coordenadas de pantalla Coordenadas del modelo
Figura 4.2.: Coordenadas del modelo - Coordenadas de pantalla
Coordenadas de modelo
Las coordenadas del modelo serán las que se re�eren a las coordenadas de los distintos vértices
del objeto. Estarán de�nidas generalmente mediante un paquete CAD en un formato compatible
con el GRECO (I-DEAS, NURBS, IGES...). Existen dos tipos de modelos geométricos, ya sea
mediante la de�nición de las facetas que de�nen el objeto, o bien por super�cies paramétricas.
Para cada faceta o arista se conocen las coordenadas (xv, yv, zv) de los vértices. A partir de ellos
se podrá obtener la normal a la faceta n.
Durante las distintas etapas del algoritmo se necesitará trasladar estas coordenadas al sistema
de pantalla. Para llevarlo a cabo se deberá rotar, escalar y trasladar las coordenadas del modelo
tal y como se explica posteriormente en 4.3.2.
Coordenadas de pantalla
Una vez dibujado el objeto en pantalla, la imagen del blanco coincide con lo que se ve desde
el punto de vista del radar. Se diferenciarán estas coordenadas de las coordenadas del modelo
por la (') que las acompaña. Las coordenadas de pantalla son obtenidas a partir de la inter�cie
grá�ca. Están cuanti�cadas y de�nidas dentro de unos margenes. Los límites son (Nx, Ny, Nz),
que corresponden con el tamaño de la imagen o bitmap. Se pueden diferenciar dos posibilidades:
Para las coordenadas x′p, y′p que corresponden con las direcciones horizontales y verticales,
perpendiculares a la dirección de observación:
Coordenadas de los pıxeles discretos (cuantificados) :
x′p = 0 . . . Nx − 1
y′p = 0 . . . Ny − 1
La coordenada z′p= s se trata de la dirección del observador. Aunque la imagen en pantalla
únicamente se representa mediante 2 dimensiones, esta coordenada también será importante
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS 33
para poder calcular qué facetas se encuentran en pantalla y cuales están ocultas:
z′p = 0 . . . Nz − 1
Al contrario de los valores Nx, Ny, la variable Nz siempre dispondrá de un valor constante.
En concreto, Nz= 226 , es decir, se trata de una cuanti�cación en 26 niveles. Generalmente
el valor de Nz siempre será mucho más grande que los de Nx y Ny.
Se obtienen x′p, y′p como los índices de las �las y las columnas de la imagen y z′p es el
contenido del z-bu�er . Normalmente el hardware proporciona en el z-bu�er la distancia
al observador (hacia dentro de la pantalla), pero aquí se ha de�nido z′ hacia afuera para
tener los ejes de coordenadas coherentes con la regla de la mano derecha que simpli�ca la
notación. La transformación entre ambos ejes es trivial. Las coordenadas de z′ en este caso
son �distancia al fondo de la imagen�.
En la �gura 4.3 se observa la proyección de un objeto en pantalla.
PANTALLA
z'
y'
x'
Dirección de observación
Figura 4.3.: De�nición de las coordenadas de pantalla a través de las coordenadas del modelo
4.3.2. Proyección de coordenadas 3D en pantalla
En la práctica los píxeles tienen un área �nita (�gura 4.4). Se puede calcular su tamaño total de
la siguiente forma:
Lxn + Lxp = Nx ·∆x
Donde ∆x :=Tamaño del píxel especi�cado y Lxn y Lxp son valores máximos valores (positivos
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS 34
y negativos) de x (ver �gura 4.5).
∆x , cte x =Lxn + Lxp
nx
0 1 2 3 ... Nx-1
Lxn Lxp
BORDER_EPS
BORDER_EPS
Figura 4.4.: Creación del bitmap
El margen BORDER_EPS sirve para controlar el número de píxeles que se dejan de margen
entre las dimensiones máximas del objeto y las paredes del bitmap (para evitar problemas con
PTD o RT por acceso a memoria incorrecto). En la práctica tiene un valor de 10 píxeles.
Analizando placas y guardando las matrices de los bu�ers en archivos se observa que los vértices
de la placa, proyectados en el bitmap 2D, se discretizan a un número entero truncando la
distancia al centro de la imagen. Este hecho resultará importante a la hora de proyectar
una coordenada en pantalla.
xpıxel =
(int)(x0 + 0,5) si x0 <Nx2 ⇒ ceil(x0 − 0,5)
(int)(x0 − 0,5) sino ⇒ floor(x0 − 0,5)
En realidad se está procesando x0 − 0,5
Algoritmo de proyección
El algoritmo de proyección de las coordenadas 3D de un vértice en el modelo geométrico del
objeto a coordenadas de pantalla está compuesto por tres etapas.
1. Traslación del centro: En esta etapa se traslada el objeto al centro de coordenadas.
x′ = x3D − origen coordenadas(x)
y′ = y3D − origen coordenadas(y)
z′ = z3D − origen coordenadas(z)
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS 35
2. Rotación: Con la rotación se girar el objeto a la dirección deseada
[~rd] = [Matriz de rotacion]T ∗
x′
y′
z′
=
xd
yd
zd
3. Escalado a Nx : Se realiza el escalado con la �nalidad de hacer coherentes ambos sistemas
de coordenadas.
x0 =(xd + Lxn)
cte x
y0 =(yd + Lyn)
cte y
z0 =−(zd − Lzp)
cte z
En la �gura 4.5 se ve la de�nición del modelo con coordenadas de pantalla.
z'
y'
x'
Pantalla
CERCA
LEJOS
0
Nz-1
z0Lzp
Lyp
Lzn
Lxp
Figura 4.5.: Algoritmo de proyección de 3D a 2D
Remarcar que:
zd sale hacia afuera de la pantalla (es la rotación de los ejes 3D).
Z0 del bu�er entra en la pantalla, de manera que los valores cercanos a la pantalla tienen
valores de bu�er pequeños y, en caso contrario, valores grandes para los puntos cercanos
al fondo.
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS 36
4.3.3. Test de visibilidad
Algoritmo
Para saber si un vértice es visible u oculto se compara la z′v del vértice con la z′p del píxel de
la imagen más cercano a este punto. Si z′p = z′v, el vértice mostrado coincide con el de pantalla y
por lo tanto es visible. En cambio en la práctica no será tan sencillo. De momento se planteará
una primera condición que se irá mejorando progresivamente a lo largo de la sección conforme
vayan apareciendo los diferentes casos problemáticos. Es la siguiente:
Si z′p − z′v > ε, el vertice es oculto (4.2)
Se deja un umbral ε debido principalmente a la discretización de pantalla y a la curvatura de las
super�cies. Posteriormente se estudiará el valor de dicho umbral.
En la �gura 4.6 se puede ver un ejemplo del caso más sencillo posible. Se dispone de dos facetas
A y B, donde la A es ocultada parcialmente por la B.
Para la faceta B, la coordenada z′v1 es idéntica a la z′p1 . Al aplicarse la ecuación 4.2 el vértice
es declarado visible puesto que la diferencia entre ellos es 0, que siempre será menor que ε. (Se
presupone ε>0). El caso de v2 es más fácil todavía ya que z′v2 es directamente menor que z′p2 .
Nótese que la z′p2 se encuentra en una super�cie distinta (faceta A).
En la faceta A el cálculo para v2 es idéntico al del vértice v1 en la faceta B (z′v2 = z′p2 y por lo
tanto es visible). Sin embargo, el vértice v1 es declarado oculto puesto que z′v1 es mucho menor
que z′p1 .
La faceta B no presenta ningún problema y será pasada directamente para que se calcule su
contribución a la PO. En cambio la A no puede ser enviada directamente ya que es parcialmente
visible. En la sección 4.3.5 se explica cómo hacer la subdivisión de este tipo de facetas.
De hecho el margen de seguridad ε no hubiera sido necesario en este caso.
Se va a mostrar ahora que pasa si se inclina ligeramente la faceta A. Se puede observar la situación
planteada en la �gura 4.7. En primer lugar la faceta B será declarada toda visible al igual que el
caso anterior. Las condiciones para esta faceta no han cambiado.
Para la faceta A:
El vértice v1 se encuentra oculto por la faceta B. De hecho se cumple la misma condición que
antes, es decir, z′v1 < z′p1 . El vértice es declarado oculto.
La situación cambia para el vértice v2. El resultado debería de ser positivo en todos los casos,
puesto que el vértice no está ocultado por la faceta B. No obstante aparece un problema. Según
el ε elegido se podrá detectar como visible u oculto. Si ε es demasiado pequeño, z′p2 − z′v2 > ε, y
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS 37
Vértice visible
Vértice ocultoPosición del píxel
Figura 4.6.: Algoritmo de detección de visibilidad (Facetas no inclinadas)
Vértice visible
Vértice ocultoPosición del píxel
Figura 4.7.: Algoritmo de detección de visibilidad (Faceta inclinada)
el vértice se detectará como oculto. Para el caso de la �gura se debería de cumplir el siguiente
requisito: ε ≥ z′p2- z′v2 . Esto es debido a que la posición de un vértice para facetas inclinadas no
coincidirá con la de un píxel en general. Y puede ser incluso, como en este caso, que la coordenada
z del píxel esté por delante del vértice. Aún así, el vértice es visible.
Otra di�cultad que se añade al algoritmo es el cálculo del valor de ε. A priori el valor de este
umbral depende de la inclinación de la faceta. Así es, como se puede comprobar en la �gura
4.8. Cuanto más inclinada es la faceta, mayor umbral se debería dejar. El valor depende en una
primera aproximación de la normal de la faceta. Posteriormente se verá que si se realizará una
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS 38
extrapolación del vértice a la posición del píxel se consigue independizar el valor de ε de la normal
a la faceta.
v2
v2
p2
p2
Vértice visible
Vértice ocultoPosición del píxel
Figura 4.8.: Algoritmo de cálculo de ε
Elección del píxel de pantalla correspondiente al vértice a calcular
También se tiene que escoger cuál de los 4 posibles píxeles es mejor para comparar con la z′v.
Es decir, cuando se realice la proyección del vértice en pantalla el resultado será la posición del
mismo en pantalla (Figura 4.9). No obstante, esta posición en general no será un número entero.
Así pues se deberá buscar la posición entera más cercana debido a que los bu�ers tan solo se
disponen los valores de z′p en posiciones enteras.
Posición real
del vértice
en pantalla
P(i,j) P(i+1,j)
P(i+1,j+1)P(i,j+1)
Figura 4.9.: Elección del píxel más cercano a la posición real del vértice en pantalla
Esta conversión de número decimal a número entero no hace por simple redondeo sino trun-
cando al hacia el centro de la imagen. Esto es debido a que se trata de reproducir el mismo
comportamiento que el procesador grá�co cuando se encarga de dibujar la imagen en pantalla y
se encuentra con la misma situación que la planteada.
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS 39
x′p =
ceiling(x′v) si x′v <Nx−1
2
floor(x′v) si x′v >Nx+1
2
donde x' es la coordenada del centro del píxel (índices 1.5, 2.5, 3.5...)
x′ =xrotada −min(xrot)
∆x+ 0,5
∆x = tamano del pıxel
Lxn = min[xrotada]
Análogamente para y'
Esto último puede parecer de poca importancia pero no debe de menospreciarse puesto que
todos los problemas que aparecerán en el algoritmo serán debidos precisamente a la limitación
de tener la pantalla cuanti�cada. Es por ello que la elección del píxel incorrecto puede conducir
a resultados erróneos.
Problemas
Problema con facetas inclinadas respecto a la dirección de observación
Como se comentaba anteriormente, aparece un problema con las facetas inclinadas respecto a la
dirección de observación. Tras truncar hacia el centro de la imagen, los valores (x′p, y′p) y (x′v, y
′v)
son distintos. Es decir, se está comparando la z′v del vértice con una z′p correspondiente a un punto
distinto al del vértice (posición del píxel). En la �gura 4.10 se puede observar el desplazamiento
de la posición del vértice a la posición del píxel.
Vértice visible
Vértice ocultoPosición del píxel
z'
x'
Truncado
Figura 4.10.: Problemas con el truncamiento ε
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS 40
Por una parte se tiene la coordenada z′v cuya posición en pantalla es (x′v, y′v). Por la otra, la
coordenada z′p correspondiente a x′p = floor(x′v), y′p = floor(y′v). Realizando dicho test sale:
z′p > z′v. Así pues el vértice es detectado oculto cuando en realidad es visible. De dejarlo así la
faceta sería truncada a la posición del píxel y por lo tanto, el cálculo de RCS produciría un error
similar al de Asvestas. Se puede observar este hecho en la �gura 4.11.
La solución consiste en conseguir el valor z de la faceta justo en la posición real del píxel. Así
se compararían los dos valores de forma adecuada. Esto se puede hacer extrapolando la z′ del
vértice desde la posición (x′v, y′v) a la posición (x′p, y
′p). La forma de hacerlo es utilizando la
ecuación del plano paralelo a la faceta. De esta forma se compararían los dos valores de z en el
mismo punto y no se perdería información debido al hecho de que los píxeles estén cuanti�cados.
Extrapolación
La ecuación del plano con la normal (n′x, n′y, n
′z) y que pasa por el vértice (x′v, y
′, z′v) es la
siguiente:
n′x(x′ − x′v) + n′y(y′ − y′v) + (z′ − z′v) = 0 (4.3)
En este caso se quiere evaluar el plano en la posición de la coordenada z del píxel (x′p, y′p)
obteniendo la posición de z del vértice extrapolado a la posición del píxel:
z′vp = z′v −n′x(x′p − x′v) + n′y(y
′p − y′v)
n′z(4.4)
A partir de ahora se referirá a z′vp como la coordenada z′v del vértice de la faceta extrapolada a
la posición (x′p, y′p) del píxel.
Recordar que este eje z′ está de�nido hacia afuera de la pantalla, pero el z-bu�er tiene coorde-
nadas hacia adentro:
zbuffer = Nz − 1− z′ Nz = 226 (Numero de niveles en z)
Se puede observar en la �gura 4.11 los problemas causados debidos a la falta de extrapolación
en el diedro de 60º.
Problema de la intersección entre dos super�cies
El problema sucede justo en el vértice en que se intersecan las dos facetas, generalmente en
diedros. Como estas son independientes entre sí, el vértice aparecerá repetido dos veces en la
base de datos, una por cada faceta. En este caso el vértice común es visible para un observador
que se encuentre dentro del ángulo formado por las placas del diedro.
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS 41
Diedro 60º- RCS (Óptica Física)
ReferenciaSin extrapolar
-50
-40
-30
-20
-10
0
10
20
30
RC
S (
dB
m)
-100 -80 -60 -40 -20 0 20 40 60 80 100
Ángulo (º)
Figura 4.11.: Problema debido a la no-extrapolación en el diedro de 60º
En la �gura 4.12 se puede ver un posible resultado del test para el caso de un diedro con dos
facetas A y B que comparten el vértice v. En ese caso las coordenadas (x′v, y′v) se redondean a
(x′p, y′p) del píxel p, que está en la faceta A.
Al analizar la visibilidad de la faceta A se extrapola de z′v a z′vpa utilizando n′A. El test de
ocultamiento z′p − z′vPa> ε dará falso y por lo tanto, se detectará el vértice como visible.
No obstante al analizar la faceta B se extrapolará con n′B en lugar de con n′A y se irá a parar a
z′vPb, que está por detrás de la faceta A. El test de ocultamiento en este caso (z′p − z′vPb
> ε)
dará verdadero. Así pues se detectará como vértice oculto aun a pesar de ser visible.
Esto provocará la subdivisión de la faceta B aunque sea totalmente visible, con los errores
asociados a ello.
En la �gura 4.13 aparecen los resultados del diedro de 60º. De hecho en la imagen se ve claramente
que falla para ángulos cercanos a 0º. Es decir, el caso planteado en la �gura 4.13.
Solución:
La solución consiste en extrapolar con la normal al píxel n′p en lugar de la normal a la faceta. El
motivo es que esta normal siempre coincidirá con la normal a la super�cie visible en (x′p, y′p).
Causística:
1. Caso A: Si v está en una super�cie visible, la extrapolación con n′p, n′p ≈ n′faceta (solo
hay errores de cuanti�cación, ver más abajo), se hace en un plano tangente a la super�cie
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS 42
Figura 4.12.: Problema de intesección entre dos super�cies
Diedro 60º- RCS (Óptica Física)
Referenciaz-extrapolación
-50
-40
-30
-20
-10
0
10
20
30
RC
S (
dB
m)
-100 -80 -60 -40 -20 0 20 40 60 80 100
Ángulo (º)
Figura 4.13.: Problema de intersección entre dos super�cies en el diedro de 60º
visible y no se debe alejar mucho de ella:
TEST z′p − z′vp > ε falso (visible)
El umbral de comparación de ε es necesario porque la curvatura de la super�cie separa un
poco los dos planos, como se ve en la �gura 4.14.
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS 43
v
Figura 4.14.: Problema de la intersección entre dos super�cies (Caso A)
2. Caso B: Si está en una super�cie oculta, la extrapolación con n′p se hace en un plano
paralelo a la super�cie visible y el test da el siguiente resultado:
TEST z′p − z′vp > ε verdadero (oculto)
si la distancia entre los dos planos es mayor que ε, lo cual sucederá siempre al ser ε su�-
cientemente pequeño (�gura 4.15).
Figura 4.15.: Problema de la intersección entre dos super�cies (Caso B)
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS 44
Problema de la cuanti�cación de n′z:
Se ha visto que hay que extrapolar con n′p (píxel) en lugar de n′, pero lo malo es que (n′x, n
′y, n
′z)
son valores que están cuanti�cados en 8 bits. El error en n′p puede hacer que al extrapolar haya
un error de z′vp mayor que el umbral del test z′p − z′vp > ε, donde se recuerda que z′vp es:
z′vp = z′v −n′x(x′p − x′v) + (y′p − y′v)
n′z(4.5)
n′z está discretizada como n′z = n′pi/255 con n′pi = {qi | qi∈ N, 0 < qi ≤ 255}.
El error relativo es muy grande para valores pequeños de n′pz , ya que n′z aparece en el cociente
de 4.5. Esto puede provocar un error signi�cativo en z′vp y por lo tanto un resultado del test
incorrecto.
Soluciones:
1) Primero extrapolar con n′ (a la faceta). Si sale oculto volver a extrapolar con n′p (al píxel) y
repetir el test.
Si el vértice es visible y el resultado del primer test con n′ sale visible, da igual haber
extrapolado con una normal que no era la del píxel visible.
Si el vértice v es visible y sale oculto, se volverá a extrapolar con la normal del píxel visible
(n′p).
El único problema es si es oculto y sale visible:
En estas �guras se tiene vértices ocultos que extrapolando con n′ salen visibles en el test.
Vértice visible
Vértice ocultoPosición del píxel
v
Figura 4.16.: Problema de la cuanti�cación de n′z (Caso A)
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS 45
z'
x'
v
=
Vértice visible
Vértice ocultoPosición del píxel
Figura 4.17.: Problema de la cuanti�cación de n′z (Caso B)
En el caso a) de la �gura 4.16 extrapolando con n′p habría salido bien (oculto), pero está
tan cerca de la super�cie visible que la diferencia z′p − z′pv podría ser menor que el umbral
ε y dar visible igualmente.
En el caso b) de la �gura 4.17 habría fallado igual extrapolando con n′p, ya que n = np. Es
un caso muy raro tener un vértice tan cerca de una intersección (cerca de otro vértice).
En conclusión, primero extrapolar con n′ (faceta). Si sale oculto volver a extrapolar con n′p
(píxel). Así se evita el error producido por la discretización de n′pz en los casos más frecuentes.
Solo introduce posibles fallos del test en casos raros que además igualmente habrían fallado con
bastante probabilidad.
2) Aumentar el umbral de comparación ε cuando n′pz es pequeña, ya que es el caso que produce
mayores errores:
Sean (qx, qy, qz) los valores que dan n′p cuanti�cada: qi = 0 . . . 255, n′i = qi+0,5255 (Se ha introducido
el 0.5 para convertir el truncamiento en redondeo, y de este modo reducir el error)
z′pv = z′v −n′x(x′p − x′v) + n′y(y
′p − y′v)
n′z= z′v −∆z′
El mayor error se produce cuando n′z → 0 ⇒√n′2x + n′2y → 1
Se supone para ello que el error en z′pvsolo depende del error en n′z
Error = ∆z′ ·[
255 · n′z255 · n′z − 1
− 1
]= ∆z′ · 1
255 · n′z − 1= ∆z′ · 1
qz − 0,5
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS 46
Por lo tanto el test de�nitivo será:
z′p − z′v > ε+∆z′
qz − 0,5⇒ oculto (4.6)
4.3.4. Umbral de comparación ε
En una super�cie curvada aparece un pequeño error en z′ al extrapolar con la normal a la faceta
(�gura 4.14). Sea R el radio de curvatura de la super�cie.
Para una super�cie convexa, z′vp > z′p, por lo tanto el test siempre da visible ya que el plano
tangente queda siempre por fuera de la super�cie.
Para una super�cie cóncava, teniendo en cuenta que el vértice común se procesa 2 veces:
Si se procesa con la normal a la faceta en la que está el píxel, n′ = np, y por lo tanto no
hay error de discretización.
Si se procesa con la normal a otra faceta aparece un error. Este error desaparecerá si hubiera
extrapolado con la normal al píxel n′p, que era lo correcto, pero se ha hecho con n′ (faceta)
para evitar el error de discretización.
Como z′pv < z′p el test dará oculto, pero entonces se extrapolará con n′p y el resultado saldrá
bien (visible).
Vértice visible
Vértice ocultoPosición del píxel
v
Figura 4.18.: Super�cie cóncava
CONCLUSIÓN:
Como las super�cies curvadas no causan problemas, con este algoritmo es su�ciente un umbral
que cubra posibles errores de redondeo en el acelerador grá�co.
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS 47
En la práctica funciona bien un umbral de comparación ε igual al tamaño del píxel en xy (metros),
que en unidades de z' discretizados (z-píxeles) es:
ε = ∆x∆z
∆x = tamano del pıxel en xy (metros)
∆z = tamano del pıxel en z (metros)
∆x� ∆z ya que hay 226 niveles en z y Nx en x (Nx=número de píxeles en x)
4.3.5. Algoritmo de división para facetas parcialmente iluminadas
Se utiliza cuando no todos los vértices de una faceta sean detectados de la misma forma. Se ha
implementado para que su uso sea opcional. Si se decide no usarse, simplemente aquellas facetas
parcialmente visibles se considerarán ocultas.
Si se usa, la forma en que funciona es diferente según el tipo de faceta. En realidad es un algoritmo
válido únicamente para triángulos. Por lo tanto, si se trata de un quad este es dividido en dos
triángulos que seguirán el algoritmo por separado. En este caso, el orden que deben seguir los
nuevos triángulos no es arbitrario. Es importante que sigan el mismo sentido que el quad original
tal y como aparece en la �gura 4.19.
Figura 4.19.: División de un quad en dos triángulos
Para cada triángulo se deberá realizar dos veces el algoritmo de bisección tal y como se ve en
la �gura 4.20. No obstante, el tipo de faceta obtenida al �nal se diferencia según el número
de vértices visibles que tiene el triángulo inicial. En caso de tener únicamente uno, la �gura
resultante será un nuevo triángulo. En caso de tener dos, la �gura �nal será un quad.
El algoritmo trabajará con las dos aristas entre las cuales se encuentra el cambio de visibilidad.
El método consistirá en hacer sucesivos tests con la �nalidad de encontrar el punto exacto de
cambio. Las posiciones donde realiza los tests no son arbitrarias sino que son obtenidas según el
algoritmo de bisección. Este algoritmo asegura alcanzar el punto de cambio de visibilidad en un
número de comprobaciones mínimo.
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS 48
Vértice visibleVértice oculto
A
B
C
C'B'
A
B
C
C''
C'
Figura 4.20.: De�nición de las coordenadas de pantalla a través de las coordenadas del modelo
El funcionamiento es el siguiente:
Se trabajará con dos vértices: vv y vo. Estos serán los vértices iniciales (visible y oculto respec-
tivamente) correspondientes a cada una de las aristas. Se cogerá el segmento formado por los
dos y se dividirá justo por la mitad. Se realizará la comprobación en este punto. Si sale visible,
se actualizará el vértice vv hasta este valor. En caso contrario será el vector vo el que se deba
actualizar.
Una vez hecho este paso se comprobará la distancia entre los nuevos vv y vo. Si fuera 0 ya se
habría encontrado el punto medio, que correspondería con el valor alcanzado. En la práctica
no se exigirá que se encuentren a distancia 0, sino a una distancia menor que un umbral ε.
Posteriormente se de�nirá cuál debe ser el valor de dicho margen.
En caso de no cumplirse la comprobación se volverá a dividir el segmento formado por los dos
nuevos valores de vv y vo. Así repetidamente hasta hallar el primer valor que sí cumpla la
condición. Se puede ver un ejemplo en la �gura 4.21.
El valor ε será elegido por el usuario. Éste deberá tener en cuenta que conforme reduzca el umbral,
el tiempo de cálculo se incrementará debido a que se necesitará un mayor número de comproba-
ciones. No obstante, ε no puede tomar un valor cualquiera, sino que tiene un mínimo permitido.
El motivo es de nuevo la cuanti�cación de los píxeles, que obliga a realizar la comprobación en
unos puntos concretos del espacio. Así pues, el valor mínimo de ε será la distancia situada entre
estos dos puntos que coincide con el tamaño de un píxel. En otras palabras, la sensibilidad de
procesado grá�co. No tiene sentido un valor más pequeño.
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS 49
VISIBLE OCULTO
vv vov'v v'ov''o
Figura 4.21.: Algoritmo de bisección para facetas parcialmente iluminadas
4.3.6. Problemas del algoritmo (Subdivisión de la faceta)
Un problema que tiene el algoritmo es que únicamente comprueba la visibilidad en los vértices
de las facetas. Esto puede resultar una gran limitación para aquellas muy grandes comparadas
con el tamaño total del objeto. En este caso los vértices no dan su�ciente información por sí
solos. Por ejemplo si una faceta es parcialmente visible pero todos sus vértices son visibles, será
detectada como totalmente visible cuando en verdad no es así. El resultado de la RCS es por lo
tanto incorrecto.
Este problema se puede solucionar habilitando la posibilidad de subdividir la faceta en nuevas
subfacetas mucho más pequeñas. De este modo se conseguirá realizar el test en otras partes de
la faceta problemática y así solventar la detección de una forma más precisa.
En la �gura 4.22 se puede ver el proceso para distintos niveles de subdivisión. Conforme se va
aumentando el nivel de subdivisión se puede ver que cada vez se consigue acercar más al punto
exacto de transición entre parte visible y oculta.
Ejemplo
Para mostrar el problema se ha de�nido un objeto constituido por 3 facetas. La dirección de
observación es la paralela a su normal (como puede verse en la imagen izquierda en la �gura 4.23).
De este modo se tienen 2 parcialmente iluminadas pero con sus vértices totalmente iluminados
(los quads). La distancia entre las facetas se ha de�nido como un múltiplo de la mitad de la
longitud de onda porque de esta manera si el algoritmo no detecta correctamente la visibilidad,
los campos de las super�cies se suman en módulo y el error es máximo. En la grá�ca siguiente
se puede ver que sin subdivisión el resultado del cálculo es diferente al teórico. Esto es debido a
que, como se esperaba, las tres super�cies son detectadas visibles totalmente cuando no es así.
Conforme se va aumentando el número de niveles, el resultado de la RCS tiende hacia el valor
teórico. A continuación se verá como ha funcionado el algoritmo para un número de subdivisión
elevado (�guras 4.24 y 4.25).
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS 50
Figura 4.22.: Subdivisión de un objeto para que se detecte correctamente las facetas iluminadas
Figura 4.23.: Problema de un objeto con 3 facetas solapadas
Con esta estructura se pueden sacar algunas conclusiones. Primero de todo comprobar que el
problema se puede solucionar prácticamente del todo utilizando este algoritmo de subdivisión,
eso sí, a costa de aumentar el tiempo de cálculo de forma considerable (muchas más facetas, y
por lo tanto, muchos más tests). Pero aunque el tiempo de cálculo aumenta de forma exponencial
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS 51
RCS en función del número de subdivisiones
10 100 1000 10000 10000017,5
18
18,5
19
19,5
20
20,5
21
21,5
22
0
0,1
0,2
0,3
0,4
0,5
0,6
0,7
0,8
RCS – GRECOTiempo(s)RCS – Teórico
log(#facetas)
s
dB
m
Figura 4.24.: Problema de detección de facetas iluminadas
con el número de facetas subdivididas, se ve que el algoritmo converge a la solución correcta en
muy pocas subdivisiones. De esta manera no se sacri�ca el tiempo de cálculo de forma excesiva.
Gracias a este algoritmo se ha sido capaz de solucionar los problemas de detección de visibilidad
de super�cies como un diedro.
Problema de no subdivisión en el diedro de 60º
En la �gura 4.26 se puede comprobar el problema del algoritmo comentado en la sección actual.
La PO del diedro de 60º, sin subdivisión, es calculada de forma correcta en los ángulos en que las
dos super�cies son visibles (de -30º a 30º). No obstante, los resultados di�eren signi�cativamente
en los ángulos donde existe ocultamiento. El resultado de la PO re�eja los resultados de ambas
placas sumados, es decir, las placas no han sido detectadas en ningún momento como parcialmente
ocultas. Si se habilita la subdivisión, los resultados coinciden con los de la referencia (6.4)
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS 52
Figura 4.25.: Resultado �nal con las super�cies ocultas correctamente detectadas
Diedro 60º- RCS (Óptica Física)
ReferenciaSin subdivisión
-50
-40
-30
-20
-10
0
10
20
30
RC
S (
dB
m)
-100 -80 -60 -40 -20 0 20 40 60 80 100
Ángulo (º)
Figura 4.26.: Problema de no subdivisión en el diedro de 60º
5. Implementación en el GRECO
5.1. Diagrama de �ujo
Se va a presentar el diagrama de �ujo utilizado para programar el nuevo algoritmo de cálculo
de la Óptica Física en el GRECO. Para más información, en el anexo D se adjuntan las partes
de código más importantes. El objetivo de esta sección será simplemente enseñar la distribución
lógica del mismo.
NO
NuevoDángulo
¿NuevaDfaceta?
SÍ
FacetaDdesechada
NONO
SÍ
ProjecciónenDpantalla
TESTDDEDVISIBILIDAD
CÁLCULODDEDLADPO
TodosDlosDvérticesvisibles
SubdivisiónDdeDlaDfaceta
AlgunosDvérticesvisibles
ParteDnoDvisible
ParteDvisible
¿NormalDunitariahaciaDelDradar?
NingúnDvérticevisible
Figura 5.1.: Diagrama de �ujo del algoritmo
Los pasos más importantes del algoritmo se resumen a continuación:
1. Se recorren todas las facetas para cada ángulo
53
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS 54
2. Una primera criba elimina aquellas con una dirección opuesta al radar. De esta forma se
consigue eliminar una parte muy importante del total de facetas evitando realizar el test
de visibilidad de sus vértices
3. Se realiza una proyección de los vértices en pantalla, para que puedan ser comparadas sus
coordenadas z y se realiza la extrapolación a la posición del píxel
4. El test de visibilidad compara las dos coordenadas z y decide si el vértice está, o no, oculto
por otra faceta.
5. Si sus vértices no son visibles se descarta la faceta. Si es parcialmente visible se procede a
subdividirla y descartar las partes ocultas.
6. Finalmente se calcula la contribución de las facetas iluminadas o de aquellas subfacetas no
descartadas.
5.2. Optimización de la velocidad
A partir de ahora se van a presentar una serie de mejoras del algoritmo que permitirán aumentar
la velocidad de cálculo. Eso sí, en algunos casos la mejora estará debida a una reducción o
simpli�cación del algoritmo. Así pues los resultados �nales podrían ser ligeramente diferentes.
Para este tipo de casos se tendrá que llegar a un balance entre tiempo de cálculo y el error que
se está dispuesto a tolerar.
5.2.1. Normal al píxel
El motivo de no usarse siempre esta normal es porque al estar cuanti�cada los resultados obte-
nidos contienen un error sistemático que puede dar lugar a resultados erróneos. Así pues, para
evitar este problema el algoritmo utiliza de forma predeterminada la normal a la faceta, y co-
mo comprobación secundaria la normal al píxel. No obstante, si se está dispuesto a tolerar este
margen de variación se podría conseguir una mejora signi�cativa de la velocidad si se realizara
el cálculo directamente con la normal al píxel, puesto que el acceso a la normal de la faceta en
general es un proceso lento.
De esta forma se puede eliminar la proyección y el test de un vértice de la faceta en sí. Por lo
tanto será posible realizar una reducción de vértices (5.2.3).
5.2.2. Normal al píxel sin signo
Como se ha comentado en apartados anteriores, la técnica de innovación del GRECO fue la
obtención de la información física del objeto mediante su dibujo en pantalla. Por ejemplo la
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS 55
obtención de la normal a sus super�cies mediante una determinada iluminación del objeto. Pero
muchas veces una sola imagen no aporta su�ciente información. De hecho, para obtener la normal
con signo de la super�cie en cada uno de los píxeles es necesario realizar dos iluminaciones del
objeto. Una para obtener el valor y la otra para obtener el signo.
Otro caso que mejoraría aún más la velocidad de cálculo es la de realizar el test con la normal del
píxel sin signo. Si se fuera capaz de llevarlo a cabo se podría agilizar la ejecución del programa
puesto que no sería necesario representar el objeto con dos iluminaciones distintas. La causística
es la siguiente: primero se realizará el test con los dos signos posibles y luego se quedará aquel
que dé un resultado más coherente. Se ha comprobado empíricamente que este método lleva a
resultados prácticamente idénticos al caso habitual.
5.2.3. Detección de vértices repetidos
En el test de visibilidad se realiza una extrapolación donde se usa la normal a la faceta corres-
pondiente al vértice a analizar. Esto provoca que los vértices no sean independientes de la faceta
que pertenecen. O de otra forma, un mismo vértice es analizado de forma diferente en cada uno
de los test que se le realizan. Incluso es posible que en un test el resultado sea positivo y en
otro de negativo, algo que en principio no tiene demasiado sentido puesto que se trata del mismo
punto en la super�cie. Esto sucede debido a que las facetas son planas y la normal presenta un
comportamiento discontinuo. Realmente se debería utilizar la normal en el punto exacto (vértice)
pero la única forma de calcularla (normal al píxel) tiene dos problemas: está cuanti�cada y su
posición no coincide exactamente con la del punto. De hecho se ha comprobado que la utilización
de la normal a la faceta presenta unos resultados más precisos que la utilización de la normal del
píxel, a pesar de la aparición de este problema.
Aunque de todos modos parece tener más sentido realizar el test en un vértice de forma inde-
pendiente a la faceta que pertenece. Ya que se podría evitar la utilización de la normal a la
faceta eliminando la dependencia de los vértices con las facetas. De esta forma el test sobre un
mismo vértice tan solo debería de realizarse una vez y el tiempo de cálculo se reduciría de for-
ma signi�cativa. En las mejoras introducidas en las secciones anteriores se ha independizado el
vértice de normal a la faceta perteneciente. Así pues será en estos casos cuando se realizará esta
simpli�cación del algoritmo de cálculo.
Como se puede ver en la �gura 5.2, cada faceta comprueba sus vértices de forma independiente
a las demás. De manera que algunos vértices son comprobados varias veces, puesto que son
compartidos por las distintas facetas del objeto. Estos valores se deberían multiplicar por dos
en el caso que se de�na la misma faceta pero en sentido de circulación de los vértices contrario
(habitual si se tiene que dibujar el objeto).
En la de�nición de la geometría del objeto cada faceta es independiente de las demás, con lo que
los vértices son de�nidos e introducidos al vector de vértices de forma duplicada. El primer paso
para realizar una única comprobación por vértice consiste en generar un nuevo vector de vértices
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS 56
1
2
1
2
1
2
11
22
5
Figura 5.2.: Número de comprobaciones por vértice
eliminando los repetidos. También será necesario vincular los vértices de las facetas a esta nueva
lista generando una primera conexión entre las facetas. Por ejemplo para que estas se enteren si
la comprobación de uno de los vértices ya ha sido llevada a cabo o no.
No obstante, detectar si dos vértices son el mismo no es tan trivial como parece a simple vista. De
hecho se trata de un algoritmo cuyo orden de complejidad aumenta de forma N2 con el número
de vértices, puesto que se tiene que comparar cada uno de los vértices con todos los demás. Es
por lo tanto un algoritmo aparentemente computacionalmente no tratable.
La manera de rebajar este orden a un grado inferior: N log N, consiste en conseguir que cada uno
de los vértices no tenga que compararse con todos los demás, sino solo con aquellos potenciales
(los que están más cerca). Así pues, conforme se vayan comprobando, se generan diferentes
cajas que organizarán los vértices según su posición. Un vértice tan solo se comparará con los
que pertenezcan a su zona (caja). El número de cajas será variable y dependerá del número de
vértices. En la �gura 5.3 se puede ver la de�nición de las cajas).
Además, el hecho de realizar una única comprobación por vértice permitirá reducir de forma
importante el tiempo de cálculo sin perder en exactitud de los resultados, puesto que el hecho
de ser calculado desde una faceta distinta ahora ya no aporta ninguna información añadida. Por
lo tanto esta simpli�cación será utilizada por defecto siempre que sea posible (utilizando una de
las mejoras propuestas en las secciones anteriores).
El diagrama de �ujo variará sensiblemente puesto que antes de realizar el test de un vértice,
se deberá comprobar si este ya ha sido testeado anteriormente. Si es el caso, se coge el valor
obtenido en el test anterior. Si no, se realiza el test y se guarda el resultado. Por lo demás,
continua teniendo la misma estructura que en el presentado anteriormente (�gura 5.4)
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS 57
Nivel 4 Nivel 3
Nivel 2 Nivel 1
Figura 5.3.: La detección organiza los vértices en cajas para rebajar el orden computacional delalgoritmo
NO
Nuevorángulo
¿Nuevarfaceta?
SÍ
Facetardesechada
NONO
SÍ
CÁLCULOrDErLArPOPartervisible
Projecciónenrpantalla
Pararcadarvértice:¿Harsidorcomprobado?
Subdivisiónrderlarfaceta
Testrdervisibilidaddervértice
Testrdervisibilidadderfaceta
NO SÍ
Parternorvisible
¿Normalrunitariahaciarelrradar?
TodosrlosrvérticesvisiblesAlgunosrvérticesrvisibles
Ningúnrvérticervisible
Figura 5.4.: Modi�cación del diagrama de �ujo
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS 58
5.2.4. Resultados de la optimización
En la �gura siguiente se pueden comprobar las diferencias entre los distintos métodos de cálculo de
la PO para el caso de una estructura compleja como es el misil. Al no tener el resultado analítico
están comparados los métodos de Gordon con los resultados del anterior algoritmo (Asvestas).
Como se puede observar en la �gura 5.5, los resultados de la optimización de velocidad son muy
similares, en cambio se ha conseguido reducir el tiempo de cálculo del algoritmo de proyección y
test de los vértices, en algunos casos de forma signi�cativa.
0 20 40 60 80 100 120 140 160 180-35
-30
-25
-20
-15
-10
-5
0
5
10Misil- RCS (Óptica Física)
RC
S (
dB
m)
Ángulo (º)
AsvestasGordon - Normal a la facetaGordon - Normal al pixel (Gordon - Normal al pixel (
Figura 5.5.: Comparación entre los diferentes métodos de optimización de velocidad (Misil)
5.3. Paralelización
Con la �nalidad de mejorar la velocidad del algoritmo ha sido programado un sistema de pa-
ralelización. El thread (o hilo) principal se divide durante la ejecución en tantos procesos como
procesadores lógicos tiene la máquina. La interfaz de programación elegida para realizar el mul-
tithreading ha sido OpenMP. Cada uno de estos procesos es encargado de realizar la comproba-
ción de una parte de las facetas totales. De manera que se pueden realizar varios tests al mismo
tiempo.
En el capítulo de resultados (6.2) se puede observar de forma cuantitativa las mejoras debidas al
uso de la paralelización. Experimentalmente se ha comprobado que el número de threads óptimo
es el número de procesadores que tiene la máquina.
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS 59
5.4. Modi�caciones en los parámetros de entrada del GRECO
5.4.1. Modi�cación del archivo de parámetros
Para el cálculo del algoritmo se ha tenido que ampliar el archivo de parámetros de entrada del
GRECO con la �nalidad de añadir algunos parámetros que son necesarios para su funcionamiento.
En esta sección se van a resumir brevemente los nuevos, no obstante, en el anexo B aparecen los
demás:
Tamaño máximo del lado de la faceta
Maximum length of a side in a facet (0-OFF) = 0
Con este parámetro se regula el tamaño máximo de las facetas (en metros). En caso de encontrar
una faceta más grande, es dividida sucesivamente hasta un tamaño adecuado. Este parámetro es
útil cuando falla la detección de visibilidad de facetas (para PO-Gordon Facets), debido a que
los vértices no aportan su�ciente información (Ver sección 4.3.6).
Tolerancia en la subdivisión de facetas parcialmente iluminadas
Tolerance in the subdivision of partially illuminated triangles (in meters) = 0
En el caso que se tenga que subdividir una faceta parcialmente iluminada, este parámetro per-
mite con�gurar la tolerancia del algoritmo, es decir, con qué precisión se obtiene el punto de
cambio de visibilidad. Un intervalo de tolerancia menor conlleva un mayor número de operacio-
nes matemáticas y incrementa el coste. El programa forzará un valor mínimo, a partir del cual
no se podrá especi�car una tolerancia menor. Este valor mínimo es el tamaño de un píxel de x.
Puesto que no tiene sentido detectar la visibilidad por debajo de este umbral (está por debajo
de la sensibilidad) Ver sección 4.3.5.
Extrapolación de la coordenada z
Extrapolation of z-coordinate = 0
(0-> Maximum accuracy: Use the normal to the facet and normal
to the pixel with sign
1-> Faster: Use the normal to the pixel with sign
2-> Fastest: Use the normal to the pixel without sign)
Permite regular la precisión algoritmo usado para el test de visibilidad de un vértice. En concreto
este parámetro controla qué normal a la super�cie se usa. Con la normal a la faceta se obtiene un
resultado más preciso pero el cálculo es más lento. Con la normal al píxel se obtiene un resultado
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS 60
menos preciso pero el cálculo es muy rápido. En este último caso, se puede también regular el
uso del signo de la normal o no. Se puede conseguir un incremento de la velocidad en caso de no
utilizar los signos, perdiendo de nuevo un poco de exactitud. Ver sección 5.2
5.4.2. Nuevos �ags en línea de comandos
Además de modi�car el archivo de parámetros se ha añadido la posibilidad de usar un nuevo
�ag de entrada: el -j. Ejecutando GRECO con el �ag -j activado se genera un archivo de salida
(*.vis) con la lista de facetas iluminadas desde el punto de vista del radar para cada ángulo. De
hecho se representan las coordenadas de modelo (x, y, z) de los vértices correspondientes a las
facetas iluminadas. Si la faceta es un quad, aparecen los 4 vértices juntos. En el caso que sea un
triángulo, aparecen los 3 vértices y se repite el tercero. De esta forma se facilita el dibujo de las
facetas iluminadas usando MATLAB, que se realiza con la función �ll3.
Aquí hay un ejemplo de archive generado:
Phi = 0.000000 Theta = 0.000000 Gamma = 0.000000
(-0.063002, 0.000000, 0.359947)
(-0.062826, 0.000000, 0.371678)
(-0.062473, 0.008808, 0.362171)
(-0.062473, 0.008808, 0.362171)
(-0.008202, -0.019292, 0.482590)
(-0.005655, -0.013302, 0.486517)
(-0.007305, -0.012511, 0.486517)
(-0.003445, -0.013423, 0.481213)
...
Phi = 1.000000 Theta = 0.000000 Gamma = 0.000000 ...
En este caso, la primera faceta sería un triángulo y la segunda un quad.
6. Resultados
Una vez realizado el algoritmo se pueden comprobar los resultados conseguidos una vez imple-
mentado en el GRECO. Para ello este capítulo se centrará en dos aspectos muy importantes a
la hora de valorarlo: la precisión y el tiempo de cálculo.
6.1. Precisión
En este apartado se compararán los resultados del algoritmo con los de las super�cies de�nidas
en el capítulo 2. Se utilizarán aquellas que se disponen de resultados analíticos. En algunos se
comparará el cálculo de PO Gordon (Facetas) con el resultado analítico, en otros se comparará
con Asvestas para comprobar la reducción del ruido de procesado grá�co.
Placa de 5λ
En la placa se comprueba la desaparición del ruido de procesado grá�co.
Óptica Física - Placa plana de 5
0 10 20 30 40 50 60 70 80 90-120
-100
-80
-60
-40
-20
0
20
Gordon
RC
S (
dB
m)
Ángulo (º)
Figura 6.1.: Placa de 5λ sin el ruido de procesado grá�co
61
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS 62
Figura 6.2.: PO de una placa de 5λ variando los ángulos de elevación y azimut (Gordon Facetas)
Figura 6.3.: PO de una placa de 5λ variando los ángulos de elevación y azimut (Asvestas)
Diedro de 60º
Finalmente se puede comprobar que los resultados del diedro coinciden con los de la referencia
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS 63
excepto en los ángulos cercanos a 90º, justo en el momento en que una de las placas desaparece
completamente, donde se aprecian diferencias pero que en el peor de los casos son de 1 dB.
Diedro 60º- RCS (Óptica Física)
-100 -80 -60 -40 -20 0 20 40 60 80 100-50
-40
-30
-20
-10
0
10
20
30ReferenciaGordon
Ángulo (º)
RC
S (
dB
m)
Figura 6.4.: Diedro de 60º comparado con la referencia
También se puede comprobar la desaparición del ruido de procesado grá�co.
Diedro 60º- RCS (Óptica Física)
RC
S (
dB
m)
Ángulo (º)
-100 -80 -60 -40 -20 0 20 40 60 80 100-50
-40
-30
-20
-10
0
10
20
30
AsvestasGordon
Figura 6.5.: Diedro de 60º comparado con Asvestas
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS 64
Triedro 90º
En este caso el análisis se realizará de nuevo para observar la desaparición del ruido de proce-
sado grá�co. Para ello se comparará PO Gordon Facetas con el método de Asvestas
Óptica Física - Triedro 90º
0 10 20 30 40 50 60 70 80 90-100
-80
-60
-40
-20
0
20
40
AsvestasGordon Facets
RC
S (
dB
m)
Ángulo (º)
Figura 6.6.: Triedro de 90º comparado con Asvestas
6.2. Velocidad
6.2.1. Resultados del algoritmo
Se va a realizar un test de velocidad del algoritmo con el �n de mostrar las relaciones existentes
entre el tiempo de cálculo y el número de facetas, con tal de asegurar la e�ciencia computacional
comentada en apartados anteriores. Todos los análisis están realizados con una CPU de 6 núcleos
funcionando a 4,4 GHz.
En la grá�ca posterior aparecen los resultados del algoritmo sin ninguna optimización de las
comentadas en la sección 5.2. Los tiempos son en función del número de facetas del objeto.
Se muestran varios resultados dependiendo del número de threads utilizados. Con esta grá�ca
además se justi�ca la paralelización puesto que se obtiene un aumento de velocidad de hasta un
395,50% del caso singlethread al caso óptimo.
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS 65
6 Threads
4 Threads
2 Threads
1 Thread
Figura 6.7.: Tiempo de cálculo PO respecto al número de facetas
Como se puede comprobar el algoritmo tiene un coste computacional que varía de forma lineal
con el número de facetas. Es posible por lo tanto calcular la ecuación que de�na la regresión
lineal del tiempo de cálculo en función del número de facetas. Para el caso de 6 threads se tiene
la grá�ca siguiente:
y = 5, 02022 ∗ 10−8x+ 0, 209477
La velocidad del algoritmo es de un total de 19,92 Mfacetas/s.
6.2.2. Resultados de la optimización
Se va a realizar una simulación con el helicóptero para los tres métodos posibles con un gran
número de facetas y con un barrido angular alto (que implique un número de dibujos altos). Se
pueden ver los tiempos de cálculo más destacados y posteriormente el tiempo total.
Tiempos de cálculo (s) Normal a la faceta Normal al píxel Normal al píxel sin signo
Óptica física 65,33 (14,2 Mfac/s) 61,81 (15,0 Mfac/s) 59,95 (15,5 Mfac/s)Dibujo 246,3 244,9 152,6
Tiempo Base datos 0,972 23,82 22,34TOTAL 316,2 334,7 238,7
Cuadro 6.1.: Resultados de los tiempos de cálculo
Se puede observar como la velocidad de cálculo de la Óptica Física va aumentando conforme se
va simpli�cando el algoritmo. No obstante, el tener que comprobar qué vértices están repetidos
hace que el tiempo de Base de datos aumente. Es por ello que se deberá comprobar en qué
situaciones conviene utilizar los métodos de optimización. En general serán buenos cuando el
tiempo de Óptica Física es el que limita.
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS 66
El paso clave para la reducción del tiempo es el no tener que dibujar dos imágenes en el caso de
utilizar la normal al píxel sin signo.
Posteriormente se presentan los resultados del cálculo de la PO para comprobar que no hay
cambios signi�cativos debido a las aproximaciones realizadas. Gracias a ello se ha conseguido
una reducción del tiempo de cálculo.
0 20 40 60 80 100 120 140 160 180-30
-20
-10
0
10
20
30
40Helicóptero - RCS (Óptica Física)
Gordon - Normal a la facetaGordon - Normal al pixel (signo)Gordon - Normal al pixel (sin signo)
RC
S (
dB
m)
Ángulo (º)
Figura 6.8.: Tiempo de cálculo PO respecto al número de facetas
7. Conclusiones
En este proyecto se ha realizado un estudio de las limitaciones provocadas por la técnica de
procesado grá�co en el cálculo de la RCS, tanto sus causas como su impacto en el resultado
global. Posteriormente se ha presentando un nuevo algoritmo híbrido que permite la detección
de facetas iluminadas por el radar y su adaptación para el cálculo de la Óptica Física. Este nuevo
método combina las ventajas del procesado grá�co con la rapidez de las velocidad de las CPUs
actuales. De esta manera se consigue evitar algunas carencias presentes en dichas técnicas, como
por ejemplo el ruido de procesado grá�co.
Ahora la detección de las super�cies iluminadas y el cálculo del campo radiado se realiza direc-
tamente sobre las facetas y no sobre los píxeles. Esto evita trabajar con la información de la
imagen del blanco, evitando los problemas que ello introduce. El cálculo de la RCS se realiza
ahora mediante la fórmula de Gordon. Con todos estos cambios se han eliminado los problemas
que aparecían en algunas super�cies como la placa plana para ángulos muy rasantes.
Además la nueva técnica ha permitido aumentar signi�cativamente la velocidad de cálculo. De
hecho el coste computacional de la identi�cación de las super�cies ocultas es pequeño y propor-
cional al número de vértices. Para modelos eléctricamente grandes, y con un número de facetas
alto, el algoritmo propuesto es más de un orden de magnitud más rápido que las alternativas
existentes. Por ejemplo, en [8] se presenta una técnica cuyo coste computacional aumenta de
forma N log N con el número de facetas. Este algoritmo puede conseguir una velocidad de cálcu-
lo de los alrededor de 0,6 Mfacetas / s con una CPU de 8 núcleos a 3,0 GHz, mientras que la
velocidad de procesamiento del algoritmo híbrido presentado en este documento, con una CPU
de 6 núcleos a 4,4 GHz, es de 23 Mfacetas / s.
En un futuro se incluirá un cálculo híbrido (CPU/GPU) para la teoría física de la difracción
(PTD), del mismo modo que para el cálculo de la Óptica Física. En este nuevo método la GPU
será utilizada para probar la visibilidad de los vértices que limitan las aristas y la CPU para el
cálculo de la contribución PTD usando las fórmulas convencionales de U�mtsev.
Una vez implementado este algoritmo se habrá completado la modernización del software GRE-
CO, ya que todos los métodos dispondrán de una versión híbrida. Anteriormente ya contaba con
una técnica de ray-tracing que trabajaba directamente sobre las facetas. El próximo paso será el
cálculo del campo cercano con la fórmula de Gordon y la inclusión del radar biestático.
67
A. Publicaciones en actas de congresos y
revistas internacionales
�GRECO Code Rejuvenated: Hybrid CPU-graphical Processing�, Juan M. Rius, Alex Car-
bó, Eduard Ubeda y Alex Heldring, 7th European Conference on Antennas and Propagation
(EuCAP 2013), Göteborg, Sweeden, 8-12 April 2013.
�Fast shadowing computation in Physical Optics Surface Integral�, Juan M. Rius, Alex
Carbó, Eduard Ubeda y Alex Heldring, IX Iberian Meeting on Computational Electro-
magnetics, Dénia, 14-17 May 2013.
"Fast graphical processing technique for shadowing computation in Physical Optics Surface
Integral", Juan M. Rius, Alex Carbó, Jakob Bjerkemo, Eduard Ubeda, Alex Heldring,
Jordi Mallorqui y Antoni Broquetas, en preparación para publicación en IEEE Trans. on
Antennas and Propagation.
68
B. Parámetros de entrada
En los siguientes anexos se dará información adicional de cara a entender el funcionamiento del
programa GRECO. Para más información, se puede consultar el manual del mismo [10]
La ejecución de GRECO está controlada por �ags en la línea de comandos, un �chero de entrada
de parámetros y al menos un �chero de datos geométricos. Los �ags controlan el comportamiento
de GRECO en lo referente al comportamiento del programa, el formato de los �cheros de salida
y la salida de información acerca de la geometría. El resto de la información se obtiene de los
�cheros de entrada. La sintaxis de la línea de comandos es:
greco [flags] parameter_file data_file {data_files...}
B.1. Flags en línea de comandos
Por defecto, GRECO sólo se para después de mostrar las grá�cas de RCS. Este comportamiento
se puede cambiar con los siguientes �ags:
- a: Parar después de cada ángulo de vista. El usuario tiene que pulsar la tecla
�RETURN� para continuar.
- l: Parar después del último ángulo de vista. El usuario tiene que pulsar la tecla
�RETURN� para continuar.
- g: No parar después de las grá�cas de RCS. Por defecto se para, y el usuario tiene
que pulsar la tecla �RETURN� para continuar.
- s: No parar en ningún momento.
Por defecto, GRECO pone una cabecera en los �cheros de salida. Este comportamiento se puede
cambiar con el siguiente �ag :
- t: No incluir cabecera en los �cheros de salida.
Otros �ags:
- n: Modi�car los nombres de los �cheros de salida según los métodos de alta
frecuencia usados. Este �ag se activa automáticamente cuando se solicita más de un
método de análisis.
69
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS 70
- i: Activa la salida detallada de información sobre la base de datos del modelo
geométrico. Esto es útil para debuggear el �chero del modelo geométrico.
- d: Activa el dibujo de curvas de corte sobre cada super�cie paramétrica. Esto es
útil para `debuggear' el �chero del modelo geométrico.
- r: Mostrar sólo las super�cies recortadas, es decir, las super�cies en las que se
han de�nido curvas de corte.
- z: Colocar el eje z vertical y el eje x hacia el observador, en lugar de los ejes por
defecto. Esto permite hacer la rotación en acimut alrededor del eje z.
- c: No hacer polygon culling en los métodos "DRAW_ONLY" y "PO". Esto per-
mite representar todas las super�cies independientemente del sentido de la normal
cuando en el modelo algunas super�cies tienen la normal invertida.
- 2: No mostrar los impactos de las segundas re�exiones. Se usa para ver sólo las
triples re�exiones.
- 3: No mostrar los impactos de las triples re�exiones. Se usa para ver sólo las
segundas re�exiones
- o: Activar el uso de listas de visualización. Las listas de visualización son una
capacidad que ofrece OpenGL para acelerar el dibujado de super�cies, sobre todo de
las B-Spline. En modelos complejos que contengan muchas super�cies B-Spline, las
listas pueden requerir una cantidad elevada de memoria RAM.
- j: Genera un archivo de salida (*.vis) con la lista de facetas iluminadas desde el
punto de vista del radar .
- f: Utilizar posiciones (ángulos + distancias) indicadas en el �chero `view.txt'.
- m: Guardar en �cheros de texto el contenido de las matrices que GRECO utiliza
(normales en cada píxel, Z de cada píxel, etc...).
- x: Escribe coordenadas x, y, z del centro de rotación en el archivo �center_of_rotation.txt�
y en la consola.
- b: Para calcular el tamaño del bitmap a partir del tamaño del píxel (�Pixel size�)
y del tamaño del objeto proyectado en la pantalla, por defecto GRECO calcula las
coordenadas de todos los vértices del objeto proyectados en la pantalla para cada
dirección de observación. Este es el método exacto para calcular bien el mínimo
tamaño del bitmap, pero es muy lento (varios minutos) con un número de triángulos
grande (más de 100,000). Con el �ag -b se utilizan sólo los 8 vértices de la caja
que encierra al objeto en lugar de todos los vértices del mismo. Ahora el cálculo del
tamaño del bitmap es muy rápido, pero como resultado se obtiene un bitmap más
grande, lo cual signi�ca más memoria ocupada y mayores tiempos de dibujado, de
lectura de bu�ers y de cálculo de RCS.
- p: En máquinas multiprocesador, no dividir el proceso GRECO en múltiples
threads (hilos). Por defecto se divide en tantos threads como procesadores tiene la
máquina. También se puede forzar un número de threads en concreto mediante el uso
de este �ag de la forma p=n, donde n es el número de threads.
- e: Este �ag permite utilizar el bitmap de cálculo en modo GRECOPost. El �ag
�e fuerza un bitmap cuadrado de gran tamaño tal que el objeto cabe en cualquier
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS 71
posición de rotación, ya que el usuario tiene libertad de rotar el objeto con el ratón o
teclado. Si no se especi�ca el �ag �e, también puede rotarse y visualizarse el objeto en
modo GRECOPost, pero no puede calcularse nada (ni puntos de re�exión especular
ni rayos re�ejados). El �ag �e habilita automáticamente el �ag �a, pues no tiene
sentido usar el bitmap grande si no se para la rotación en cada ángulo para poder
entrar en modo GRECOPost. Si se intenta calcular puntos de re�exión especular o
trazado de rayos en modo GRECOPost sin el �ag -e, aparece un mensaje de aviso de
que es necesario usar el �ag �e para poder calcular en modo GRECOPost. El �ag �e
es incompatible con el cálculo de re�exión en el mar o con curvatura de la tierra. Si
se activa �e con alguno de estos métodos de cálculo, aparece un mensaje de aviso y
GRECO termina.
B.2. Archivo de parámetros
A continuación se presenta la plantilla de un archivo de parámetros. Los archivos de parámetros
son documentos de texto con formato (*.par)
/************/ /* GRECO input parameter file. */ /***************/
(0) VERSION = 11.1
(1) GENERAL AND GEOMETRY MODEL PARAMETERS
(1.1) Output file name = name
(1.2) Size in world space (meters) = 0
(1.3) Size relative to screen = 1
(1.4) Resolution in NURBS surface discretization = 10
(1.5) Invert normals to facets (1-ON / 0-OFF) = 0
(1.6) Show images and RT/PTD points (1-ON / 0-OFF) = 1
(1.7) Process bitmap instead of screen (1-ON / 0-OFF) = 1
(1.8) Pixel size using bitmap (in meters) = 0.5
(1.9) Maximum length of a side in a facet (0-OFF) = 0
RCS method:
DRAW only 0
PO 1
RT 2
PTD 4 (exclusive with Mitzner)
Mitzner 8 (exclusive with PTD)
(1.10) Addition of methods to analyze = 7; 11B; 2L; 1BL
(1.11) Number of dimensions (2 or 3) = 3
(2) SWEEP PARAMETERS
(2.1) First polarization angle (deg) = 0
(2.2) Last polarization angle (deg) = 0
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS 72
(2.3) First elevation angle (deg) = 60
(2.4) Last elevation angle (deg) = 119
(2.5) First azimuth angle (deg) = 0
(2.6) Last azimuth angle (deg) = 354
(2.7) Number of angular sweep samples = 60;30
(2.8) First frequency (Hz) = 117e6
(2.9) Last frequency (Hz) = 300e6
(2.10) Number of frequency samples = 64
(3) PHYSICAL OPTICS PARAMETERS
(3.1) Algorithm (0->Asvestas pixels, 1-> Gordon pixels, 2->
Gordon facets)= 0
(4) VT (Visibility Test) PARAMETERS
(4.1) Tolerance in the subdivision of partially illuminated triangles
(in meters) = 0
(4.2) Extrapolation of z-coordinate = 0
(0-> Maximum accuracy: Use the normal to the facet and normal to the
pixel with sign
1-> Faster: Use the normal to the pixel with sign
2-> Fastest: Use the normal to the pixel without sign)
(5) EDGE DETECTION PARAMETERS
(5.1) Minimum radius of curvature (meters) = 0.01
(5.2) Maximum increment in Z ( %) (PO, PTD) = 10
(5.3) Maximum error in |n| ( %) = 5
(5.4) Maximum nz in curved surface end ( %) = 1
(5.5) Pixel step in nz prediction = 1
(6) RAY TRACING PARAMETERS
(6.1) Full (1) or fast (0) ray-tracing = 1
(6.2) Discard rays using Fast-RT (1-ON / 0-OFF) = 1
(6.3) Pixel step in fast ray tracing = 5
(6.4) Maximum increment in Z ( %) (Fast RT) = 5
(6.5) Maximum error in |n| ( %) = 10
(6.6) Number of reflexions (less than 100) = 3
(7) RAM PARAMETERS
(7.1) Use RAM materials (1-ON / 0-OFF) = 1
(7.2) RAM materials description file name = ram_file
(7.3) Show RAM materials images (1-ON / 0-OFF) = 1
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS 73
(8) EARTH CURVATURE PARAMETERS
(8.1) Compute earth curvature (1-ON / 0-OFF) = 1
(8.2) Distance Radar-Target (in km) = 47.3
(8.3) Radar height above sea level (in meters) = 100
(8.4) Equivalent earth radius (in km) = 8500
(9) NEAR FIELD PARAMETERS
(9.1) Consider phase due to near field (1-ON / 0-OFF) = 1
(9.2) Distance Radar-Target (in km) = 5
(9.3) Use radar antenna radiation pattern (1-ON / 0-OFF) = 1
(9.4) Vertical beam width -3dB (in degrees) = 30
(9.5) Horizontal beam width -3dB (in degrees) = 3
(10) SEA REFLECTION PARAMETERS
(10.1) Consider sea reflection (1-ON / 0-OFF) = 1
(10.2) Sea state (in the range [0,9]) = 2
B.3. Fichero(s) de datos
Los nombres de los �cheros que siguen al nombre del �chero de parámetros en la línea de comandos
se re�eren a los �cheros de las bases de datos de los modelos geométricos. Al menos se debe
especi�car un �chero de datos. Se puede usar cualquier combinación de formatos geométricos
válidos. Si el formato de un �chero de datos no es válido, el �chero se ignora. Si ningún �chero de
datos es válido, el programa �naliza. Para detectar el formato de cada �chero de datos geométricos
GRECO lee la primera línea del �chero (cabecera), independientemente de la extensión de éste.
No obstante, se recomienda el uso de las siguientes extensiones para los nombres de los �cheros
de datos creados con diferentes programas de CAD:
CAD software Data �le type Extensión
I-DEAS Facetas .fctI-DEAS NURBS (Versión 1) .datI-DEAS NURBS (Versión 2.1, de�nido por CASA) .dat21I-DEAS NURBS (Versión 3) .dat3IGES Facetas, NURBS y hilos .igsFAM Facetas .fct5FAM NURBS .famGID Facetas .gid_fct
MicroStation Facetas y NURBS . n�
Cuadro B.1.: Diferentes formatos de �chero de datos aceptados por el GRECO
C. Parámetros de salida
C.1. Formato del �chero de salida
Los resultados del cálculo de GRECO se guardan en �cheros de salida de texto o binarios.
Almacenamiento de datos: El siguiente formato de salida es compatible con el programa
de dibujo de dominio público gnuplot.
� Los resultados de guardan en una matriz de 4 dimensiones con índices (i, j, k, n)
donde el índice i corresponde al ángulo en elevación θi, el índice j al ángulo en acimut
φj , el índice k al ángulo de polarización γk y el índice n a la frecuencia fn . La matriz
se guarda por �las en un �chero secuencial.
◦ En �cheros binarios, los datos se escriben en formato de número real de 4 bytes
con precisión simple.
◦ En �cheros de texto, los datos para cada ángulo y frecuencia se escriben en una
línea separada.
◦ La RCS en escala logarítmica se guarda como un número real (dBsm).
◦ El campo eléctrico normalizado en escala lineal se guarda como dos números reales
consecutivos correspondientes a la parte real e imaginaria, con el centro de fase
en el origen de coordenadas espaciales del modelo.
Ficheros de texto: Los �cheros de texto ASCII contienen comentarios y números.
� Los comentarios tienen el carácter # al principio de la línea.
� Por defecto, al principio de cada �chero hay una cabecera con comentarios referentes
a los parámetros más importantes usados en el cálculo. Esta cabecera se puede omitir
utilizando el �ag �t en la línea de comandos.
� Las líneas que no empiezan con el carácter # contienen resultados de GRECO para
un ángulo y frecuencia simple.
◦ Los resultados de RCS se guardan con el siguiente formato:
74
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS 75
<ángulo_de_vista> <frecuencia> <RCS_en_dBsm>
◦ Las partes real e imaginaria del campo eléctrico normalizado se guardan con el si-
guiente formato:
<ángulo_de_vista> <frecuencia> <E_real> <E_imaginario>
<ángulo_de_vista>: Este número sólo está presente si el número de muestras del
barrido monoestático es mayor que 1. Si se realiza un barrido acimut-elevación-
polarización simple, <ángulo_de_vista> es igual al valor del ángulo en acimut
o elevación que ofrece un mayor margen de variación. Si se realiza un barrido
acimut-elevación-polarización doble, <ángulo_de_vista> es igual a un número
entero que aumenta secuencialmente desde 1 hasta M x N x P, donde M es el
número de muestras en elevación, N es el número de muestras en acimut y P es
el número de muestras en polarización.
<frecuencia>: Este número sólo está presente si el número de muestras en fre-
cuencia es mayor que 1.
<RCS_dBsm>: valor de la RCS en dB por metro cuadrado.
<E_real> y <E_imaginario>: parte real e imaginaria de , para una onda plana
incidente de 1 V/m, con el centro de fase en el origen de coordenadas espaciales
del modelo.
C.2. Nombres de los �cheros de salida
Para cada combinación de métodos de análisis especi�cada en el parámetro correspondiente, se
crean cuatro �cheros de salida para las diferentes polarizaciones y un �chero de tiempos. Las
extensiones de los �cheros de salida son :
.vv : Emisor polarizado verticalmente - receptor polarizado verticalmente
.vh : Emisor polarizado verticalmente - receptor polarizado horizontalmente
.hv : Emisor polarizado horizontalmente - receptor polarizado verticalmente
.hh : Emisor polarizado horizontalmente - receptor polarizado horizontalmente
.tim: Tiempos de ejecución para la lectura de la base de datos geométricos, el dibujado de
las imágenes y para cada método de análisis.
.vis: En el caso de activar el �ag �j, se genera un archivo con las facetas iluminadas desde
la posición del radar.
El nombre del �chero para cada combinación de métodos de análisis es el nombre raíz del �chero
de salida con un su�jo igual al código numérico de la combinación de métodos de análisis y
los códigos 'L' o 'B' para campo eléctrico o formato binario respectivamente. Sin embargo,
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS 76
cuando sólo se solicita una combinación de métodos de análisis en el �chero de parámetros, la
concatenación del su�jo del código de la combinación está desactivada por defecto. Se puede
activar usando el �ag �n en la línea de comandos. Si se solicita el método de análisis de física
óptica (PO), sólo se crea un �chero con la extensión .vv .
D. Código fuente del algoritmo
En este anexo se van a presentar de forma resumida los códigos más signi�cativos, es decir,
aquellos que se consideran más importantes para la comprensión del algoritmo desarrollado en
este proyecto.
D.1. Barrido de las facetas (Resumido)
La primera función de todas es la que realiza el barrido de las facetas, comprueba que super�cies
están iluminadas por el radar y calcula su contribución de Óptica Física.
El algoritmo es sensiblemente diferente si la faceta se trata de un triángulo o un quad aunque
la idea general es la misma. Se extraen las componentes necesarias de la faceta: normales y
coordenadas de los vértices, se proyectan y se testean. Si es el caso se realiza la subdivisión de
la faceta y �nalmente se llama a la función po_gordon que calcula la contribución a la PO.
for(n=0; n<nobjRT; n++) //Recorremos cada uno de los objRT
{
pobjRT=&va_data.aobjRT[n]; //Accedemos al objeto actual
if(pobjRT->degenerado) continue; // Trian o quad degenerado en una linea
//Normales
in = pobjRT->inormal;
normal.x = anormales[in][0];
normal.y = anormales[in][1];
normal.z = anormales[in][2];
//Comprobación de la normal para eliminar facetas no iluminadas
if(DOT(normal, s0)>=0) continue;
//Buscamos los índices de los 3 vértices en el array de
// vértices y la normal
iv0 = pobjRT->ivertices[0];
iv1 = pobjRT->ivertices[1];
iv2 = pobjRT->ivertices[2];
//Coordenadas de los 3 vértices
r0.x = avertices[iv0][0];
r0.y = avertices[iv0][1];
77
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS 78
r0.z = avertices[iv0][2];
r1.x = avertices[iv1][0];
r1.y = avertices[iv1][1];
r1.z = avertices[iv1][2];
r2.x = avertices[iv2][0];
r2.y = avertices[iv2][1];
r2.z = avertices[iv2][2];
//Proyección y test
c0 = projectandtest(lista, r0, normal); // 1=visible, 0=oculto
c1 = projectandtest(lista, r1, normal); // 1=visible, 0=oculto
c2 = projectandtest(lista, r2, normal); // 1=visible, 0=oculto
if(pobjRT->n_vertices == 4) // Hay otro vértice, es un quad
{
//Índice del nuevo vértice
iv3 = pobjRT->ivertices[3];
r3.x = avertices[iv3][0];
r3.y = avertices[iv3][1];
r3.z = avertices[iv3][2];
c3 = projectandtest(lista, r3, normal); // 1=visible, 0=oculto
/* Dividimos el quad en dos triangulos 0-1-3 y 1-2-3
c = c0 | c1<�<1 | c2<�<2 | c3<�<3;
if(c == 15)// Todos visibles
{
aux[0] = r0;
aux[1] = r1;
aux[2] = r2;
aux[3] = r3;
lados = 4;
po_gordon(aux, lados, normal,in);
}
else if(c != 0) //Si no, estudiamos cada triángulo en particular
{
if((c = c0 | c1<�<1 | c3<�<2)>0) // cx = 1 si vertice x visible
{
// c: almacena en sus bits si los distintos vértices son
// visibles
lados = refina(c,r0,r1,r3,aux,normal);
po_gordon(aux, lados, normal,in);
}
if((c = c1 | c2<�<1 | c3<�<2)>0)
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS 79
{
lados = refina(c,r1,r2,r3,aux,normal);
po_gordon(aux, lados, normal,in);
}
}
}
else // Es un triangulo, no un quad
{
c = c0 | c1<�<1 | c2<�<2;
if(c == 7) // Todos visibles
{
aux[0] = r0;
aux[1] = r1;
aux[2] = r2;
lados = 3;
po_gordon(aux, lados, normal,in);
}
else if(c != 0) // Parcialmente visible, hay que subdividir
{
lados = refina(c,r0,r1,r2,aux,normal);
po_gordon(aux, lados, normal, in);
}
}
}
D.2. Re�nado
D.2.1. Subfunción Re�na
La función re�na se encarga de calcular las coordenadas de los vértices de la subfaceta visible
resultante de la subdivisión. Existen varios casos aunque solo se va a mostrar uno de ellos. Como
la faceta resultante puede ser un quad o un triángulo, devuelve el número de lados.
int refina(int c,vector r1, vector r2, vector r3, vector *aux, vector normal)
{
//Inicialización variables
switch(c) //Estudio de los diferentes casos
{
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS 80
case 1: //Visible r1, no visibles r2 y r3
aux[0] = r1;
aux[1] = punto_medio(r1,r2,normal);
aux[2] = punto_medio(r1,r3,normal);
aux[3] = aux[2];
lados = 3;
break;
(...)
}
return lados;
}
D.2.2. Subfunción punto_medio
La función punto_medio se encarga de encontrar el punto de cambio de iluminación en una de
las aristas de la faceta. Como se ha comentado anteriormente, se realiza el algoritmo las veces
que sea necesario hasta que se tenga un intervalo de con�anza proporcional a ε, �jada por el
usuario.
vector punto_medio(vector r1, vector r2, vector normal)
{ // Algoritmo de bisección
//ADVERTENCIA:
Función no recíproca, siempre r1 debe ser el visible y r2 el no visible
//Inicialización variables
while((dif>P.tolerance)&&i<ITERACIONES)
{
//Itera hasta que r esté acotado dentro el margen especificado
r.x = 0.5*(r1.x + r2.x);
//Punto medio entre r1 y r2
r.y = 0.5*(r1.y + r2.y); r.z = 0.5*(r1.z + r2.z);
//Proyección de r a pantalla y test: 1=visible, 0=oculto
if(projectandtest(lista, r, normal))
//El punto medio es visible
r1 = r;
else
//El punto medio no es visible
r2 = r;
i++;
dif = DISTANCIA_EUCLIDEA(r1,r2);
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS 81
}
return r;
}
D.3. Proyección y test
D.3.1. Subfunción Proyejectandtest
Esta es una de las funciones clave del algoritmo. Se encarga de proyectar en pantalla el vér-
tice y comprobar si se encuentra o no iluminado. La comprobación dependerá de los �ags de
optimización que �je el usuario (si se utiliza o no la normal a la faceta).
int projectandtest(objeto *lista, vector r1, vector normal)
{
//Proyección del vértice al píxel y testea si es visible comparandolo
// con la z de este
//Inicialización de variables
if(P.extrapolmethod & NORMALFACETA) //Normal a la faceta
{
// Proyeccion de la normal
n.z = normal.x*modelMat[2] + normal.y*modelMat[6] + normal.z*modelMat[10];
// Positiva para que salga de pantalla, y sea coherente con la
// ecuacion del plano
if(n.z < f_eps) return 1; // Grazing surface (n.z = 0) with floating
// point error
n.x = normal.x*modelMat[0] + normal.y*modelMat[4] + normal.z*modelMat[8];
n.y = normal.x*modelMat[1] + normal.y*modelMat[5] + normal.z*modelMat[9];
}
x = r1.x - lista->origin.x;
y = r1.y - lista->origin.y;
z = r1.z - lista->origin.z;
// Proyeccion del punto 3D
xd = x*modelMat[0] + y*modelMat[4] + z*modelMat[8];
yd = x*modelMat[1] + y*modelMat[5] + z*modelMat[9];
zd = x*modelMat[2] + y*modelMat[6] + z*modelMat[10];
// Eje z 3D rotado sale de la pantalla
// Punto 3D proyectado y escalado para que las unidades sean pixels
// Se resta 0.5 porque la z hay que calcularla EN EL CENTRO del pixel,
// corresponde a indices 0.5, 1.5, 2.5, 3.5, etc
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS 82
x0 = (xd + D.Lxn)/D.ctex - 0.5;
y0 = (yd + D.Lyn)/D.ctey - 0.5;
z0 = -(zd - D.Lzp)/D.ctez - 0.5;
// Este eje z (de OpenGL) entra en la pantalla: 0=cerca, NZ-1 = lejos
// Pixel mas cercano HACIA EL CENTRO DE LA PANTALLA.
// Es como lo hace OpenGL para que la imagen quede simetrica, se encoge
// hacia el centro por los dos lados.
xp = (x0 < D.nx/2 - 0.5) ? (int)ceil(x0) : (int)floor(x0);
yp = (y0 < D.ny/2 - 0.5) ? (int)ceil(y0) : (int)floor(y0);
p = (int) (D.nx*yp + xp); zpb = zb[p]; // Z del pixel mas cercano
if(zpb == NZ-1 || nz[p] == 0) return 1; // Primera comprobación para
// dar como visibles puntos del borde que al discretizar han ido a
// parar al fondo de pantalla
// Extrapolacion de la z 3D a la posicion del pixel, con la
// ecuacion del plano
// Cantidad que se aleja del observador, en pixels_xy (z_3D disminuye
// porque va hacia el observador)
// Hay que multiplicar por D.distor para pasar de pixels_xy a pixels_z
if(P.extrapolmethod & NORMALFACETA) //Normal a la faceta
{
zdif = D.distor*(n.x*(xp-x0) + n.y*(yp-y0))/n.z;
// En 3D seria z0-zdif, pero la z de pantalla va al reves
zp = (int) (z0 + zdif);
}
else zp = NZ;
// Maximo error permitido en la comparacion de z's. Como minimo debe dar
// profundidad Z equivalente a 1 pixel xy
maxdif = D.distor;
if((P.extrapolmethod & NORMALFACETA) && (zpb - zp >= -maxdif)) return 1;
// 1=visible, 0=oculto
else // Si sale oculto en el primer test, hay que extrapolar con la normal
// al plano en el pixel visible del FB por si acaso hay un cambio
// de superficie
{
if(P.meto & NORM) // Si conocemos el signo de las normales nx, ny
{
np.x = (nx[p]+0.5)/255.0;
np.y = (ny[p]+0.5)/255.0;
np.z = (nz[p]+0.5)/255.0;
zdif2 = D.distor*(np.x*(xp-x0) + np.y*(yp-y0))/np.z;
zp2 = (int) (z0 + zdif2);
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS 83
}
else // Si no conocemos el signo de las normales nx, ny.
{
np.x = (unx[p]+0.5)/255.0;
np.y = (uny[p]+0.5)/255.0;
np.z = (nz[p]+0.5)/255.0;
// Como no sabemos el signo de np.x y np.y lo hemos tomado positivo,
// ahora vemos con qué signo nos acercamos más a zpb (pues si
// nos alejamos estamos igual que antes).
zdif2 = D.distor*(fabs(np.x*(xp-x0)) + fabs(np.y*(yp-y0)))/np.z;
// Mayor valor posible de zdif, pero podemos movernos mal en el plano
zp2 = (zpb - z0 > 0) ? (int) (z0 + zdif2) : (int) (z0 - zdif2);
}
// Hay que aumentar maxdif a causa de la cuantización de nz[p],
// que toma valores muy pequeños y dispara la correccion zdif hacia
// adelante o hacia atrás.
maxdif += abs(zdif2) / (nz[p]-0.5);
// Formula analitica para un error de cuantización de una unidad
// por debajo
if(zpb - zp2 >= -maxdif) return 1; // 1=visible, 0=oculto
else return 0;
}
}
}
D.4. Cálculo de la Óptica Física (Integral de Gordon)
D.4.1. Subfunción po_gordon (Simpli�cación)
Esta función realiza el cálculo de la contribución de la faceta de entrada de acuerdo con la fórmula
de Gordon.
void po_gordon(vector *vlados, int lados, vector n, int in)
{
//Inicialización de variables
dot = DOT(s,n);
for(i=0;i<lados;i++) //Centrado de la faceta
{
vlados[i].x -= lista->origin.x;
vlados[i].y -= lista->origin.y;
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS 84
vlados[i].z -= lista->origin.z;
}
for(i=0;i<lados;i++) // Cálculo matrices t y l
{
j = i+1;
if(j==lados) j=0;
SUMA(l[i], vlados[j], vlados[i]);
MULT(l[i], l[i], 0.5);
SUMA(t[i], vlados[j], -vlados[i]);
}
MULT(aux,s,2);
CROSS(cr, aux, n);
T = mod(cr);
T2 = T*T;
if(T > f_eps) //Comprueba que los vectores s y n sean independientes
{
INITVECT(sumreal);
INITVECT(sumimag);
for(i=0;i<lados;i++)
{
ex[0] = expreal(camino[i],R);
ex[1] = expimag(camino[i],R);
n1 = sinc(argsn1[i]);
n1r = n1*ex[0]; n1i = n1*ex[1];
MULT(aux, t[i], n1r);
ACUMULA(sumreal, aux);
MULT(aux, t[i], n1i);
ACUMULA(sumimag, aux);
}
Ep[0] = DOT(sumreal,cr) * dot / (T2* (2*M_PI));
Ep[1] = DOT(sumimag, cr) * dot / (T2* (2*M_PI));
}
else //Singularidad
{
area = calcula_area(vlados, lados);
// Signos comprobados sumando dos placas, una de T=0 y otra diferente
Ep[0] = -k*area * dot / (2*M_PI)*expimag(DOT(vlados[0],s), R);
Ep[1] = k*area * dot / (2*M_PI)*expreal(DOT(vlados[0],s), R);
}
E[0][0][fi*2] += Ep[0]; //Parte real
E[0][0][fi*2+1] += Ep[1]; //Parte imaginaria
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS 85
}
D.5. División de las facetas grandes
Tal y como se comentaba en la sección 4.3.6, algunas facetas son tan grandes que sus vértices no
aportan su�ciente información y por lo tanto, deben ser subdivididas. Aquí se muestran algunas
partes del algoritmo de subdivisión:
switch(pfct->n_puntos)
{
case 3: // Si es mas pequeño que P.maxlado, añadir, sino subdividir
if(tamañoMaxLados(pfct)<P.maxlado)
add_trian(pfct);
else
{
divide_trian(pfct);
}
teselar = 0;
break;
case 4: // Si es mas pequeño que P.maxlado, añadir, sino subdividir
if(tamañoMaxLados(pfct)<P.maxlado)
add_quad(pfct);
else {
divide_quad(pfct);
}
teselar = 0;
break;
default:
teselar = 1; // Mas de 4 lados, hay que teselarlo en trians y quads
break;
}
Este trozo de código aparece dentro de la función encargada de teselar las super�cies paramétri-
cas. Se puede observar como la rutina de subdivisión diferencia tres casos: triángulos, quads y
�guras de más de 4 lados. Solo se �jara en los dos primeros: los triángulos y los quads. La rutina
es simple. Si el tamaño de todos de los lados de la faceta es menor que el máximo permitido, se
añade la faceta. Si no, se tiene que subdividir.
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS 86
Se va a mostrar cómo se realiza la subdivisión de los triángulos: divide_trian(). El caso de los
quads es análogo.
void divide_trian(FACETA *pfct)
{
FACETA achildtrians[4];
PUNTO cent[3];
int i;
lista->n_tess_trians++;
cent[0] = centrolado(pfct->puntos[0],pfct->puntos[1]);
cent[1] = centrolado(pfct->puntos[1],pfct->puntos[2]);
cent[2] = centrolado(pfct->puntos[2],pfct->puntos[0]);
//Montamos los hijos
achildtrians[0] = (*pfct);
achildtrians[1] = (*pfct);
achildtrians[2] = (*pfct);
achildtrians[3] = (*pfct);
achildtrians[1].id = ++pobj->n_facetas;
achildtrians[2].id = ++pobj->n_facetas;
achildtrians[3].id = ++pobj->n_facetas;
//Anidamos los nuevos trian
achildtrians[0].next = &achildtrians[1];
achildtrians[1].next = &achildtrians[2];
achildtrians[2].next = &achildtrians[3];
//Hijo 0:
achildtrians[0].puntos = CREA_N_PUNTOS(3);
achildtrians[0].puntos[0] = pfct->puntos[0];
achildtrians[0].puntos[1] = cent[0];
achildtrians[0].puntos[2] = cent[2];
//Hijo 1:
achildtrians[1].puntos = CREA_N_PUNTOS(3);
achildtrians[1].puntos[1] = pfct->puntos[1];
achildtrians[1].puntos[0] = cent[0];
achildtrians[1].puntos[2] = cent[1];
//Hijo 2:
achildtrians[2].puntos = CREA_N_PUNTOS(3);
achildtrians[2].puntos[2] = pfct->puntos[2];
achildtrians[2].puntos[0] = cent[2];
achildtrians[2].puntos[1] = cent[1];
//Hijo 3:
achildtrians[3].puntos = CREA_N_PUNTOS(3);
achildtrians[3].puntos[0] = cent[0];
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS 87
achildtrians[3].puntos[1] = cent[1];
achildtrians[3].puntos[2] = cent[2];
for(i = 0; i < 4; i++)
{
if(tamañoMaxLados(pfct) <= P.maxlado)
add_trian(&achildtrians[i]);
else
{
divide_trian(&achildtrians[i]);
}
}
}
Se puede comprobar que se trata de una función recursiva. Es decir, puede llamarse a sí misma.
En primer lugar, se divide el triángulo padre en tres triángulos hijos. Posteriormente cada uno
de los triángulos hijos examina individualmente si cumple el requisito del tamaño máximo. Si
lo cumple, se añade. Si no, se vuelve a dividir. El algoritmo se realiza recursivamente hasta que
todas las facetas hijas cumplan el requisito de lado máximo.
D.6. Mejoras
D.6.1. Paralelización
Para la paralelización se ha considerado el uso de librerías Open Source que estén disponible
en múltiples arquitecturas. De este modo, si en un futuro se quiere exportar el programa a
otra plataforma apenas se tendrán que hacer modi�caciones, pues las líneas de código ya serán
compatibles. En este caso, se ha utilizado Open MP.
La librería Open MP tiene de�nidas las funciones que se encargan de crear y controlar los nuevos
threads. Por lo tanto, se tiene que dar únicamente mediante pragmas el número de threads
deseado y algunos atributos de las variables: si son privadas o compartidas. Respecto al número
de threads siempre se utilizará, a no ser que el usuario especi�que otra cosa, el número de CPUs
de la máquina.
Se han utilizado dos tipos de pragmas. A continuación se presenta un ejemplo de cada uno de
ellos.
Parallel for
Se utiliza para el caso de estructuras de tipo for simples. En este caso, cada uno de los threads
ejecuta una iteración diferente del bucle.
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS 88
if(nobjRT<P.multicpu) threads=nobjRT; else threads=P.multicpu;
#pragma omp parallel for shared(...) private(...) num_threads(...)
for(n=0; n<nobjRT; n++) //Recorremos cada uno de los objRT
{
...
}
Parallel
Este es el caso más habitual. En este caso se crean tantos threads como se especi�que que se
encargan de ejecutar la función posterior. Para distinguir cada uno de los threads se les suele
referenciar con un identi�cador.
#pragma omp parallel shared(...) private(...) num_threads(P.multicpu)
full_rt_rcs(omp_get_thread_num());
Secciones críticas
Para que el código tenga concurrencia, se han tenido que de�nir en determinados momentos
algún tipo de sección crítica. Se debe realizar algún tipo de control de este tipo de instrucciones,
puesto que pueden comprometer la velocidad del algoritmo.
Atomic
En este caso, se utiliza el pragma atomic para que la asignación posterior se realice �en una
única instrucción del reloj�, es decir, de forma atómica.
#pragma omp atomic
E[0][0][fi*2] += Ep[0];
Critical
Se usa en el caso que un thread necesite realizar un número determinado de instrucciones sin
ser molestado por otro thread.
#pragma omp critical (escribe)
escribefichero(r0,r1,r2,r3);
Flush
Esta directiva resuelve la consistencia, al exportar a todos los hilos un valor modi�cado de una
variable que ha realizado otro hilo en el procesamiento paralelo.
#pragma omp flush(done)
if(done) break;
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS 89
Barreras
Se utiliza una barrera para evitar que ningún thread empiece una nueva iteración de un bucle
antes que hayan �nalizado todos los demás:
#pragma omp barrier
Otras funciones utilizadas
omp_get_thread_num(): Devuelve el identi�cador del thread actual
omp_get_num_procs(): Devuelve el número de procesadores de la máquina o los que tiene
disponibles (virtuales)
schedule(): Permite, en el caso de un Parallel for especi�car qué iteraciones deberá ejecutar
cada uno de los threads
D.6.2. Optimización del tiempo de cálculo
Detección de los vértices repetidos
Como se comentó en la parte central de la memoria, se puede simpli�car la lista de vértices
en una con los vértices sin repetir. Para ello se ha tenido que realizar la adaptación del código.
De�nición de la geometría
Antes de realizar el cálculo de la Óptica Física, se tiene que de�nir la geometría del objeto. De
manera que se recorren las listas de triángulos, quads, tiras de triángulos, tiras de quads... con
tal de poder guardar los vértices de los mismos en un array de vértices: vertices. Ahora además
se tendrá que de�nir otro array con los vértices no repetidos: uvertices. Se verá un ejemplo de
las líneas que se han tenido que añadir en el anterior código para que se genere el nuevo vector.
Se verá tan solo un tipo de lista, la de los triángulos. No obstante se ha tenido que hacer para
todas las listas de geometría posibles:
if(lista->n_trians)
for(pobj=lista->next; pobj; pobj=pobj->next)
{
if(pobj->trians)
for(pfct=pobj->trians; pfct->next; pfct=pfct->next)
{
if(!pfct->normal_unica) // Si hay sombreado smooth
{
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS 90
modul = normal_3p(&normal, &pfct->puntos[0],
&pfct->puntos[1], &pfct->puntos[2]);
if((P.full_rt || (outputfile_vt==1 || (P.po_met == 2)))
&& modul > EPSILON)
// Si la normal es nula, no guardo objeto_RT
{
// Guardar datos RT
normales[normal_libre][0] = normal.x;
// Guardo normal a la faceta
normales[normal_libre][1] = normal.y;
normales[normal_libre][2] = normal.z;
aobjRT[iobj].inormal = normal_libre;
if(P.ram) colores [normal_libre] = pfct->color; normal_libre++;
// Lo pongo aqui por claridad
aobjRT[iobj].n_vertices = pfct->n_puntos;
aobjRT[iobj].plano = 0; // Aqui todos los trian son smooth
aobjRT[iobj].ivertices = (indice *)
ncalloc(aobjRT[iobj].n_vertices, sizeof(indice ));
aobjRT[iobj].inormales = (indice *)
ncalloc(aobjRT[iobj].n_vertices, sizeof(indice ));
// aobjRT[iobj].inormal = libre; // Indice a la normal al
//primer vertice
if(outputfile_vt==1 || (P.po_met == 2 &&
!(P.extrapolmethod & NORMALFACETA) ))
aobjRT[iobj].iuvertices = (indice *)
ncalloc(aobjRT[iobj].n_vertices, sizeof(indice ));
}
for(j=0; j<pfct->n_puntos; j++)
{
if(outputfile_vt==1 || (P.po_met == 2 &&
!(P.extrapolmethod & NORMALFACETA) ))
{
if((tmpbox = buscar_octree(pfct->puntos[j]))== NULL)
index = -1;
else index = buscar_vertice_punto(pfct->puntos[j],
tmpbox->aver,tmpbox->nver);
// Buscamos el punto en el array de vertices de esta caja
if(index == -1)
//si no existe el punto lo introducimos en el array y
lo referenciamos al vector de indices
{
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS 91
uvertices[ulibre][0] = pfct->puntos[j].x;
uvertices[ulibre][1] = pfct->puntos[j].y;
uvertices[ulibre][2] = pfct->puntos[j].z;
introducir_octree(pfct->puntos[j],ulibre);
if(modul > EPSILON)
aobjRT[iobj].iuvertices[j] = (unsigned int) ulibre;
ulibre++;
}
else
{
//si existe el punto tan solo lo referenciamos
if(modul > EPSILON)
aobjRT[iobj].iuvertices[j] = (unsigned int)
tmpbox->iauver[index];
}
}
vertices[libre][0] = pfct->puntos[j].x;
vertices[libre][1] = pfct->puntos[j].y;
vertices[libre][2] = pfct->puntos[j].z;
normales[libre][0] = pfct->normales[j].x;
normales[libre][1] = pfct->normales[j].y;
normales[libre][2] = pfct->normales[j].z;
if(P.ram)
colores[libre] = pfct->color;
if((P.full_rt || (outputfile_vt==1 || (P.po_met == 2)))
&& modul > EPSILON)
{
aobjRT[iobj].ivertices[j] = libre;
aobjRT[iobj].inormales[j] = libre;
}
libre++;
// Por claridad lo ponemos aqui y no en
//for(.., .., libre++)
va_data.nv_trian_smooth++;
}
if((P.full_rt || (outputfile_vt==1 ||
(P.po_met == 2))) && modul > EPSILON)
{
set_max_min_objRT(iobj);
// Asigna max y min de x,y,z para este objeto iobj++;
// Siguiente objeto
}
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS 92
} // if sombreado smooth
} // for triangulo
} // for objeto
va_data.iv_quad_flat = libre; // Siguiente indice del vertex array libre
va_data.nv_quad_flat = 0; // Luego iremos incrementando
En este código se puede ver como se recorren todos los triángulos. Para cada uno de ellos
se guardan algunas de sus características que luego van a usarse: normales, colores (en caso
de RAM)... Hasta ahora se guardaba tan solo un vector de vértices: vertices, indexado con la
variable libre. Ahora además se guarda el vector uvertices, indexado con la variable ulibre. El
punto fuerte del nuevo código está en el hecho que primero comprueba si existe el vértice en el
vector. Si ya existe, intenta descubrir su índice en el vector. Si no, lo introduce.
La resta de código tan solo se encarga de actualizar variables para el siguiente triángulo.
Búsqueda de vértices repetidos
La gracia del nuevo algoritmo es el modo utilizado para la búsqueda del vértices repetidos. Se
realiza mediante un árbol octal. La �gura es dividida en distintas cajas espaciales, de manera
que un vértice no se comparará con todos los vértices del vector (intratable), sino con los más
cercanos (los que corresponden con su caja).
En primer lugar busca con la función buscar_octree(), la caja que le corresponde al vértice de
acuerdo con su posición espacial. Si no está creada, se supone que no hay ningún vértice, de�nido
hasta aquel entonces, cerca. Así pues, la genera y introduce el vértice nuevo.
Si la encuentra, realiza la comprobación de todos los vértices presentes en dicha caja con la
función: buscar_vertice_punto(). Si lo encuentra, se encarga de buscar el índice del mismo para
poder luego acceder a él. Si no, lo genera con la función: introducir_octree(). Se han creado otros
vectores auxiliares como iauver, encargados de referenciar los diferentes índices de los vectores
de vértices (el vector de vértices general con el vector de vértices de cada una de las cajas).
Anteriormente se ha tenido que crear la función crear_cajas(), que se encarga de crear las cajas
iniciales. El número de cajas será proporcional al logaritmo en base 10 del número total de
vértices.
Con tal de no alargar más el contenido de este capítulo, se ha considerado necesario no incluir
los códigos de estas funciones debido a su extensión y a que tampoco aportan demasiado valor a
la memoria. No obstante, sí se va a incluir el código de la función buscar_vertice_punto(). Esto
es debido a que se trata de la función que más llamadas va a recibir, y por lo tanto será el cuello
de botella. Se deberá de optimizar al máximo con el �n de reducir el tiempo de cálculo.
indice buscar_vertice_punto(PUNTO pnt, PUNTO ** vct, int size)
{
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS 93
int result = -1;
int done = 0;
//Definición de variables
#pragma omp parallel private(p,beginpos,endpos,this_thread, num_threads)
shared(result, done, pnt, vct, size)
{
this_thread = omp_get_thread_num();
num_threads = omp_get_num_threads();
beginpos = (this_thread+0) * size / num_threads;
endpos = (this_thread+1) * size / num_threads;
// watch out for overflow in that multiplication.
for(p = beginpos; p < endpos; ++p)
{
/* End loop if another thread already found the needle. */
#pragma omp flush(done)
if(done) break;
if(hypot(hypot(pnt.x - vct[p]->x,pnt.y - vct[p]->y),
pnt.z - vct[p]->z)<=f_eps)
{ /* Inform the other threads that we found the needle. */
done = 1;
#pragma omp flush(done)
result = p; break;
}
}
}
return result;
}
En la función recorrer_triangulos() también se han tenido que realizar algunos cambios. Los más
signi�cativos se exponen aquí:
if((c0 = auverticesvis[iv0]) == -1)
// Si es igual a -1 se tiene que comprobar
//Guardamos el valor en el vector auverticevis
//para que la proxima vez que se necesite
auverticesvis[iv0] = c0 = projectandtest(lista, r0, normal);
// 1=visible, 0=oculto
if((c1 = auverticesvis[iv1]) == -1)
auverticesvis[iv1] = c1 = projectandtest(lista, r1, normal);
// 1=visible, 0=oculto
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS 94
if((c2 = auverticesvis[iv2]) == -1)
auverticesvis[iv2] = c2 = projectandtest(lista, r2, normal);
// 1=visible, 0=oculto
Las variables c0, c1 y c2 guardan si cada uno de los vértices r0, r1 y r2 de la faceta son visibles:
1 si es visible y 0 en caso contrario. En el vector auvericesvis se registra este valor para cuando
se necesite en futuras comprobaciones del mismo vértice.
En primer lugar se comprueba si el vector auverticesvis tiene un valor para ese vértice. Anterior-
mente se ha inicializado a -1. Si no tiene un valor diferente es porque no se ha comprobado. Se
comprueba su visibilidad y se guarda el valor en el vector para futuras comprobaciones.
Si ya se ha comprobado anteriormente (su valor es distinto del inicial, es decir, de -1), se busca
este valor cuál es.
Bibliografía
[1] J.M. Rius, D. Burgos, A. Cardama, Discretization errors in the graphical computation of the
physical optics surface integral, Applied Computational Electromagnetics Society (ACES)
Journal, Vol. 13, No. 3, pp. 255-263, Noviembre 1998
[2] E. Arias; �Visualización en 3D de la difracción electromagnética en alta frecuencia�. PFC,
ETSETB, Barcelona 1999
[3] J.M. Rius; RCS, Scattering and High-Frequency Techniques, ENGINEERING ELECTRO-
MAGNETICS FOR HIGH FREQUENCY APPLICATIONS, Master MERIT, UPC, 2011
[4] Averse en la Wikipedia Germánica (Creative Commons). Disponible en
<http://en.wikipedia.org/wiki/File:Sigma_invader_RCS.png>
[5] A. Cardama [et al.]; Antenas. Ediciones UPC, Barcelona 1993
[6] J.M. Rius, M. Ferrando, Ll. Jofre, RCS of complex radar targets in real time, IEEE Trans.
on Antennas and Propag., 41, no.9, pp. 1308-1319, Septiembre 1993
[7] J.S. Asvestas, The Physical Optics integral and computer craphics, IEEE Trans. on Antennas
and Propag., 43, no. 12, pp. 1459-1460., Diciembre 1995
[8] Yuanhong Zhao, Fast Physical Optics Calculation for SAR Imaging of Complex Scatterers,
MSc. Thesis (Director: Prof. Jin-Fa Lee), The Ohio State University, 2012
[9] W. Gordon, Far-�eld approximations to the kircho�-helmholtz representations of scattered
�elds, Antennas and Propagation, IEEE Transactions on, vol. 23, no. 4, pp. 590�592, 1975
[10] Universitat Politècnica de Catalunya. Departament de Teoria de la Senyal i Comunicacions.
Manual del GRECO. Barcelona, 2013
95
Índice alfabético
Algoritmo de división, 47
Algoritmo de proyección, 34
Algoritmo de visibilidad, 31
Conclusiones, 67
Coordenadas
De�nición, 31
Modelo, 32
Pantalla, 32
Ejecución del GRECO, 20
Errores en el cálculo, 24
Cálculo de los bu�ers, 26
Introducción, 24
Modelo de píxeles, 25
Modelo geométrico, 24
Modelo para la representación grá�ca, 25
Resolución del bu�er de normales, 28
Resolución del Frame-Bu�er, 26
Resolución del Z-bu�er, 28
GRECO, 15
Archivos de parámetros, 71
Cálculo de la Óptica Física, 17
Fichero(s) de datos, 73
Flags, 69
Nuevos �ags, 60
Parámetros GRECO, 59, 69, 74
Ventana de imágenes y de datos, 20
Implementación en el GRECO, 53
Diagrama de �ujo, 53
Integrales, 31
Óptica física, 14
Integral de Asvestas, 19
Integral de Gordon, 31
Introducción, 4
Estructura de la memoria, 5
Motivación, 4
Objetivos, 5
Mejoras
Detección de vértices repetidos, 55
Diagrama de �ujo, 56
Normal al píxel, 54
Normal al píxel sin signo, 54
Paralelización, 58
Velocidad, 54
Normal al píxel, 17
Problemas del algoritmo, 49
Procesado grá�co, 16
Procesado híbrido, 29
Proyección de coordenadas 3D en pantalla, 33
RCS y difracción electromagnética, 7
Condiciones de partida, 7
Difracción electromagnética, 7
Fenómenos de difracción, 10
Difracción en discontinuidades, 10
Ejemplo caso real, 12
Otros fenómenos, 11
Re�exión en grandes super�cies, 10
Re�exiones en múltiples super�cies, 10
Métodos de cálculo, 12
Óptica física, 13
Difracción de aristas, 14
Trazado de rayos, 14
Sección Recta Radar, 8
96
ALGORITMO DE DETECCIÓN DE VISIBILIDAD DE FACETAS 97
Valores medios típicos, 9
Resultados, 61
Diedro de 60º, 62
Optimización, 58, 65
Placa de 5λ, 61
Precisión, 61
Triedro 90º, 64
Velocidad, 64
Resumen del proyecto
Castellano, 1
Catalán, 2
Inglés, 3
Ruido de procesado grá�co, 5, 22, 24
Super�cies
De�nición, 22
Diedro de 60º, 22
Helicóptero, 23
Misil, 23
Placa de 5λ, 22
Triedro de 90º, 23
Test de visibilidad, 36
Algoritmo, 36
Código fuente, 77
Problemas, 39
Umbral de comparación ε, 46