Una biblioteca de Python para hacer manipulaciones geométricas de puntos y vectores de dimensiones arbitrarias, y herramientas CGI para representar una escena 4D como una imagen 2D.
main.py contiene la definición de una escena y código 4D simple para convertirlo en una imagen 2D.
Point(list[float]) - un punto o vector
Poly(list[list[float]]) - una colección de puntos o vectores
Span(org:Point, basis:Poly) : una basis o marco de vectores anclados en un punto específico ( org ) en el espacio. Puede representar un subespacio, o (a través de subclases) un paralelótopo o un simplex.
Body(org:Point, basis:Poly) - una subclase del tramo. Contiene operaciones comunes a los simples y paralelótopos.
Simplex(org:Point, basis:Poly) - una subclase del cuerpo. Un simplex n-dimensional (generalización del triángulo y el tetraedro), que es la colección de puntos alrededor de org a lo largo de los vectores en basis con coeficientes positivos cuya suma es como máximo 1.
Parallelotope(org:Point, basis:Poly) - una subclase del cuerpo. Un paralelótopo n-dimensional (generalización del paralelogramo y el paralelepipado) que es la recolección de puntos alrededor de org a lo largo de los vectores en basis con coeficientes entre 0 y 1.
ObjectFace (
body : Simplex ,
normal : Point ,
color : ( R , G , B ),
surface : str
)Los objetos de la cara de objetos son los bloques de construcción de nuestro paisaje. Trabajamos con caras triangulares (simplex) que son una dimensión más baja que la dimensión de la escena, por lo que en una escena 4D, trabajamos con caras 3D que cubren las superficies de los objetos 4D. Las caras también deben orientarse, por lo que almacenamos su vector normal, así como su color, y el tipo de superficie que determina el cálculo utilizado para los efectos de iluminación (por ejemplo, mate, translúcido, etc.)
Camera(space:Span, focd:float) - Define una cámara. Una cámara se define por un tramo que abarca todo el espacio con una base ortonormal. Los primeros vectores D-1 forman el panel de imagen, mientras que el punto focal está focd (distancia focal) a lo largo del último vector.
Light(p:Point) - Define una luz de punto.
Renderer (
objects : list [ ObjectFace ],
cameras : list [ Camera ], # one for each dimension reduction
lights : list [ Light ],
img_range : float , # the maximum 2D coordinate in the 2D image
img_step : float # the resolution of the 2D image
)Agrupe objetos, cámaras y luces y contiene lógica para convertir una escena 4D en una imagen 2D.
Lea explicaciones detalladas e información de fondo en el wiki en https://github.com/csirmaz/hypergeometry/wiki