proyecto final de carrera algoritmo de detección de visibilidad de

107
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

Upload: trandiep

Post on 02-Jan-2017

218 views

Category:

Documents


0 download

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 =

λ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?

FacetaDdesechada

NONO

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?

Facetardesechada

NONO

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