0% encontró este documento útil (0 votos)
32 vistas3 páginas

Fractales Python OpenGL

El documento describe un enfoque procedural para crear una esfera dimensional compleja utilizando niveles de triángulos en OpenGL. Aunque no se logra una esfera perfecta, se aproxima al resultado deseado mediante un código fuente que define cómo dibujar triángulos y niveles. Se incluyen detalles sobre la configuración de colores y la estructura del código para la visualización.

Cargado por

Emilio Chávez
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
32 vistas3 páginas

Fractales Python OpenGL

El documento describe un enfoque procedural para crear una esfera dimensional compleja utilizando niveles de triángulos en OpenGL. Aunque no se logra una esfera perfecta, se aproxima al resultado deseado mediante un código fuente que define cómo dibujar triángulos y niveles. Se incluyen detalles sobre la configuración de colores y la estructura del código para la visualización.

Cargado por

Emilio Chávez
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 3

EXAMEN PRIMERA UNIDAD:

ESFERA DIMENSIONAL COMPLEJA.

No pude realizar una esfera perfecta, pero tomé un camino algo procedural usando
niveles de triángulos, cada nivel tomando de referencia las medidas del nivel
anterior. No se logra una esfera perfecta sin embargo el resultado se aproxima a lo
pedido, no dibujando todos los triángulos a mano
5 Niveles: 4 Niveles:

3 Niveles:

CÓDIGO FUENTE:
from OpenGL.GL import *
from OpenGL.GLUT import *
import math

h_c = 0.6 # Hipotenusa central (ajustar de 0.1 a 1.0)


nlvl = 4 # Niveles (5 es similar a una esfera)
fp_base = 0.85 # Factor de ponderación base (ajusta el tamaño de los triangulos
circundantes)

def draw_triangle(x1, y1, x2, y2, x3, y3):


glBegin(GL_TRIANGLES)
glVertex2f(x1, y1)
glVertex2f(x2, y2)
glVertex2f(x3, y3)
glEnd()

def draw_sphere():
glClear(GL_COLOR_BUFFER_BIT)
glColor3f(1.0, 1.0, 1.0) # Color base (blanco)

ca_c = h_c / math.sqrt(2)

# Colores en array
colores = [
[(1.0, 0.0, 0.0), (0.0, 1.0, 0.0), (0.0, 0.0, 1.0), (1.0, 0.5, 0.0)],
[(0.0, 0.5, 1.0), (0.5, 0.0, 1.0), (1.0, 0.0, 0.5), (0.0, 1.0, 0.5)],
[(0.5, 0.8, 0.2), (0.2, 0.8, 0.5), (0.8, 0.2, 0.5), (0.8, 0.5, 0.2)],
[(0.7, 0.3, 0.8), (0.8, 0.7, 0.3), (0.3, 0.8, 0.7), (0.7, 0.8, 0.3)],
]

def draw_level(nivel, vertices_prev):


fp = fp_base ** nivel
ca = ca_c * fp
colores_nivel = colores[nivel % len(colores)]

vertex_now = [] # Vértices actuales

if nivel == 0:
glColor3fv(colores_nivel[0])
draw_triangle(0.0, 0.0, ca, ca, ca, -ca)
glColor3fv(colores_nivel[1])
draw_triangle(0.0, 0.0, -ca, ca, ca, ca)
glColor3fv(colores_nivel[2])
draw_triangle(0.0, 0.0, -ca, -ca, -ca, ca)
glColor3fv(colores_nivel[3])
draw_triangle(0.0, 0.0, ca, -ca, -ca, -ca)

vertex_now = [(ca, ca), (-ca, ca), (-ca, -ca), (ca, -ca)] # Guardado de
vértices

else:
for i in range(0, len(vertices_prev)):
v1x, v1y = vertices_prev[i]
v2x, v2y = vertices_prev[(i + 1) % len(vertices_prev)]
mid_x = (v1x + v2x) / 2
mid_y = (v1y + v2y) / 2
dist = math.sqrt(mid_x ** 2 + mid_y ** 2)
norm_x = mid_x / dist
norm_y = mid_y / dist
nuevo_x = norm_x * (dist + (ca / math.sqrt(2)))
nuevo_y = norm_y * (dist + (ca / math.sqrt(2)))
glColor3fv(colores_nivel[i % len(colores_nivel)])
draw_triangle(v1x, v1y, v2x, v2y, nuevo_x, nuevo_y)
vertex_now.append((v1x, v1y))
vertex_now.append((nuevo_x, nuevo_y))

return ca, vertex_now

vertices = []
for n in range(nlvl):
cateto, vertices = draw_level(n, vertices)
glFlush()

def main():
glutInit(sys.argv)
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB)
glutInitWindowSize(500, 500)
glutInitWindowPosition(100, 100)
glutCreateWindow(b"Esfera Dimensional Mas o Menos :(")
glClearColor(0.0, 0.0, 0.0, 1.0)
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
glOrtho(-1.5, 1.5, -1.5, 1.5, -1.0, 1.0)
glMatrixMode(GL_MODELVIEW)
glutDisplayFunc(draw_sphere)
glutMainLoop()

if __name__ == "__main__":
main()

También podría gustarte