250 likes | 382 Views
Graficaci ón IA7200-T. Líneas Ocultas. Introducción Visibilidad Representación 3D Figuras con hoyos Caras y líneas (estructura de datos) Interfaz gráfica Gráficas de Tortuga. Líneas Ocultas. Segmentos y Triángulos. Segmentos y Triángulos. Visibilidad.
E N D
GraficaciónIA7200-T Líneas Ocultas
Introducción Visibilidad Representación 3D Figuras con hoyos Caras y líneas (estructura de datos) Interfaz gráfica Gráficas de Tortuga Líneas Ocultas
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);
Caso 1 (2D) • Minimax Test • Max(P,Q)<=Min(A,B,C) • ABC no obstruye a PQ • = para el caso simétrico
Caso 2 (3D) • Igualdad de vértices • ABC no obstruye a PQ • Comparación por # vértice - eficiente • No siempre es posible
Caso 3 (3D) • Minimax 3D en z • Min(P,Q)<=Max(A,B,C) • ABC no obstruye a PQ • = para el caso simétrico
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)
Caso 5 (2D) • PQA = área del tríangulo PQA • PQA < 0 si PQA es CW • ABC no obstruye a PQ
Caso 6 (3D) • Funciona cuando el caso 3 falla • ABC no obstruye a PQ
Caso 7 (2D) • PQ dentro de ABC • Si todos los demás casos no decidieron, ABC oculta completamente a PQ • boolean pInside = Tools2D.insideTriangle(aScr, bScr, cScr, pScr);boolean qInside = Tools2D.insideTriangle(aScr, bScr, cScr, qScr);
Caso 8 (3D) • P más cerca que ABC (o Q) • pNear: hP > hqNear: hQ > h • pNear && pInside || qNear && qInside • ABC no obstruye a PQ
Caso 9 (3D) • ABC obstruye parcialmente a PQ • Calcular (las proyecciones 2D de) I y J en la pantalla. • Calcular los valores z de I y J (interpolación lineal de 1/z). • Calcular distancia de I y J en dirección del plano.
Caso 9-1 • Esto se cumple para dos lados • u=PQ, v=AB, w=A-P B A C
Caso 9-2 • Se debe usar 1/z en lugar de z
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?
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
Gráficas de Tortuga • Mostrar Gráficas de Tortuga en Java
Gráficas de Tortuga • 3D: 3 ángulos para especificar la dirección (H, L, U) • 6 Comandos de Giro
Gráficas de Tortuga • Comandos de Tortuga 3D
Gráficas de Tortuga • Ejemplo: