Une bibliothèque Python pour faire des manipulations géométriques de points et vecteurs arbitrairement dimensionnels, et des outils CGI pour rendre une scène 4D en tant qu'image 2D.
main.py contient la définition d'une scène 4D simple et de code pour la rendre en une image 2D.
Point(list[float]) - un point ou un vecteur
Poly(list[list[float]]) - une collection de points ou de vecteurs
Span(org:Point, basis:Poly) - une basis ou un cadre de vecteurs ancré à un point spécifique ( org ) dans l'espace. Peut représenter un sous-espace, ou (via les sous-classes) un parallelotope ou un simplex.
Body(org:Point, basis:Poly) - une sous-classe de portée. Contient des opérations communes aux simplices et aux parallélotopes.
Simplex(org:Point, basis:Poly) - une sous-classe de corps. Un simplex à n dimensions (généralisation du triangle et du tétraèdre) qui est la collection de points autour de org le long des vecteurs en basis avec des coefficients positifs dont la réception le plus 1.
Parallelotope(org:Point, basis:Poly) - une sous-classe de corps. Un parallélotope à n dimensions (généralisation du parallélogramme et du parallélipped) qui est la collecte de points autour de org le long des vecteurs en basis avec des coefficients entre 0 et 1.
ObjectFace (
body : Simplex ,
normal : Point ,
color : ( R , G , B ),
surface : str
)Les objets Objectface sont les éléments constitutifs de nos paysages. Nous travaillons avec des faces triangulaires (simplex) qui sont une dimension inférieure à la dimension de la scène, donc dans une scène 4D, nous travaillons avec des faces 3D couvrant les surfaces des objets 4D. Les faces doivent également être orientées, nous stockons donc leur vecteur normal, ainsi que leur couleur, et le type de leur surface qui détermine le calcul utilisé pour les effets d'éclairage (par exemple mate, translucide, etc.)
Camera(space:Span, focd:float) - définit une caméra. Une caméra est définie par une portée de tout l'espace avec une base orthonormale. Les premiers vecteurs D-1 forment le volet d'image, tandis que le point focal est focd (distance focale) le long du dernier vecteur.
Light(p:Point) - Définit une lumière ponctuelle.
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
)Groupe les objets, les caméras et les lumières et contient une logique pour rendre une scène 4D dans une image 2D.
Veuillez lire des explications détaillées et des informations de fond dans le wiki à https://github.com/csirmaz/hypergeometry/wiki