Giter VIP home page Giter VIP logo

hypercube-py's Introduction

hypercube

Es un script muy simple escrito en python que hace uso de las bibliotecas numpy y matplotlib par proyectar y visualizar un cubo 4D en 3 dimensiones. Inspirado en el muy buen video del canal Mathologer. Link

uso

simplemente ejecutar python main.py

Teoría

La idea de proyectar un cubo de N-dimensiones a (N-1)-dimensiones es imaginar una luz encima del cubo que emite rayos de luz que luego crean una sombra en un plano debajo del cubo, donde este plano es de (N-1)-dimensiones.

Matematicamente esto consta de calcular la recta que une a la luz con cada vértice del cubo para luego determinar la intersección del plano con esa recta.

En base a la clase en UC Davis sobre raytracing, podemos optimizar esta cuenta teniendo en cuenta que la diferencia entre un vértice y la luz forman un vector director de esa recta. Luego, pensando en el punto Q que es la intersección de la recta con el plano, sabemos que Q es perpendicular a la normal del plano (por ser un punto del plano) y por lo tanto el producto interno entre Q y la normal del plano es 0. Además, Q es un múltiplo del vector que dirige a la recta y por lo tanto es un múltiplo de (vertice - luz). En otras palabras, Q = t*(vertice - luz) donde t es un número real. De aquí solo queda despejar t para obtener a Q, que es un simple cociente entre dos productos internos.

Mejoras a futuro

  • Hacer posible crear cubos de N-dimensiones y proyectarlos a 3D con llamadas recursivas.
  • Implementar la versión 4D como un shader de OpenGL.
  • Tener una interfaz de comandos para permitir elegir las dimensiones, si se guarda un video, y cosas similares.

hypercube-py's People

Contributors

tombpotochek avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.