Graficación
IA7200-T
Líneas Ocultas
Líneas Ocultas
•
•
•
•
•
•
•
Graficación
Introducción
Visibilidad
Representación 3D
Figuras con hoyos
Caras y líneas (estructura de datos)
Interfaz gráfica
Gráficas de Tortuga
2
Segmentos y Triángulos
Graficación
3
Segmentos y Triángulos
Graficación
4
Visibilidad
lineSegment(line PQ, S set of triangles)
In set S, try to find a triangle ABC that obscures PQ (or part of it)
If no such triangle found,
Draw PQ
Else
If triangle ABC leaves part PI of PQ visible
lineSegment(PI, the remaining triangles of s);
If triangle ABC leaves JQ of PQ visible
lineSegment(JQ, the remaining triangles of s);
Graficación
5
Detalles de Implementación
Graficación
6
Caso 1 (2D)
• Minimax Test
• Max(P,Q)<=Min(A,B,C)
• ABC no obstruye a PQ
• = para el caso simétrico
Graficación
7
Caso 2 (3D)
•
•
•
•
Graficación
Igualdad de vértices
ABC no obstruye a PQ
Comparación por # vértice - eficiente
No siempre es posible
8
Caso 3 (3D)
• Minimax 3D en z
• Min(P,Q)<=Max(A,B,C)
• ABC no obstruye a PQ
Graficación
• = para el caso simétrico
9
Caso 4 (2D)
•
•
•
•
PQ en un lado de AB
C en el otro lado
Si ABC es CCW y ABP y ABQ son CW
ABC no obstruye a PQ
• (= para lados BC y CA)
Graficación
10
Caso 5 (2D)
• PQA = área del tríangulo PQA
• PQA < 0 si PQA es CW
• ABC no obstruye a PQ
Graficación
11
Caso 6 (3D)
• Funciona cuando el caso 3 falla
• ABC no obstruye a PQ
Graficación
12
Caso 7 (2D)
• PQ dentro de ABC
• Si todos los demás casos no decidieron, ABC
oculta completamente a PQ
•
Graficación
boolean pInside = Tools2D.insideTriangle(aScr, bScr, cScr, pScr);
boolean qInside = Tools2D.insideTriangle(aScr, bScr, cScr, qScr);
13
Caso 8 (3D)
• P más cerca que ABC (o Q)
• pNear: hP > h
qNear: hQ > h
• pNear && pInside || qNear && qInside
• ABC no obstruye a PQ
Graficación
14
Caso 9 (3D)
• ABC obstruye parcialmente a PQ
1. Calcular (las proyecciones 2D de) I y J en la pantalla.
2. Calcular los valores z de I y J (interpolación lineal de
1/z).
3. Calcular distancia de I y J en dirección del plano.
Graficación
15
Caso 9-1
• Esto se cumple para dos lados
B
A
• u=PQ, v=AB, w=A-P
Graficación
C
16
Caso 9-2
• Se debe usar 1/z en lugar de z
Graficación
17
Caso 9-3
• n = (a,b,c) – normal al triángulo
• P dentro de ABC?
• Q dentro de ABC?
• P y Q dentro de ABC?
Graficación
18
lineSegment
void lineSegment(Graphics g,
Point3D p, Point3D q,
Point2D PScr, Point2D QScr,
int iP, int iQ,
int iStart)
• Si no se cuenta con número de vértice (iP, iQ),
se usa -1
• iStart indica el índice del triángulo donde
comenzamos
Graficación
19
Gráficas de Tortuga
• Mostrar Gráficas de Tortuga en Java
Graficación
20
Gráficas de Tortuga
• 3D: 3 ángulos para especificar la dirección
(H, L, U)
• 6 Comandos de Giro
Graficación
21
Gráficas de Tortuga
Graficación
22
Gráficas de Tortuga
• Comandos de Tortuga 3D
Graficación
23
Gráficas de Tortuga
• Ejemplo:
Graficación
24
Gráficas de Tortuga
Graficación
25
Descargar

Graphics