Uma biblioteca Python para fazer manipulações geométricas de pontos e vetores arbitrariamente-administrativos e vetores e ferramentas CGI para renderizar uma cena 4D como uma imagem 2D.
main.py contém a definição de uma cena e código 4D simples para renderizá -la em uma imagem 2D.
Point(list[float]) - Um ponto ou vetor
Poly(list[list[float]]) - Uma coleção de pontos ou vetores
Span(org:Point, basis:Poly) - Uma basis ou quadro de vetores ancorados em um ponto específico ( org ) no espaço. Pode representar um subespaço, ou (via subclasses) um paralletopope ou um simplex.
Body(org:Point, basis:Poly) - Uma subclasse de extensão. Contém operações comuns a simplificadores e paralleótopos.
Simplex(org:Point, basis:Poly) - Uma subclasse do corpo. Um simplex n-dimensional (generalização do triângulo e do tetraedro), que é a coleta de pontos em torno org ao longo dos vetores em basis com coeficientes positivos cuja soma é no máximo 1.
Parallelotope(org:Point, basis:Poly) - Uma subclasse do corpo. Um paralelotopo N-dimensional (generalização do paralelogramo e do paralelepípede), que é a coleta de pontos ao redor org ao longo dos vetores em basis com coeficientes entre 0 e 1.
ObjectFace (
body : Simplex ,
normal : Point ,
color : ( R , G , B ),
surface : str
)Objetos Objectface são os blocos de construção de nosso cenário. Trabalhamos com faces triangulares (simplex) que são uma dimensão menor que a dimensão da cena; portanto, em uma cena 4D, trabalhamos com rostos 3D que cobrem as superfícies dos objetos 4D. Os rostos também precisam ser orientados, por isso armazenamos seu vetor normal, bem como sua cor, e o tipo de superfície que determina o cálculo usado para efeitos de iluminação (por exemplo, fosco, translúcido etc.)
Camera(space:Span, focd:float) - Define uma câmera. Uma câmera é definida por um espaço de abrangência de todo o espaço com uma base ortonormal. Os primeiros vetores D-1 formam o painel de imagem, enquanto o ponto focal está focd (distância focal) ao longo do último vetor.
Light(p:Point) - define uma luz pontual.
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
)Grupos objetos, câmeras e luzes e contém lógica para renderizar uma cena 4D em uma imagem 2D.
Leia explicações detalhadas e informações de fundo no wiki em https://github.com/csirmaz/hypergeometry/wiki