kwasniok / python-nerte Goto Github PK
View Code? Open in Web Editor NEWnon-euclidean ray tracing engine
non-euclidean ray tracing engine
Make all members of the values package immutable.
May not increase performance and blow up code.
e.g. generate sequence of images with increasing resolution, max ray steps etc.
no automation yet, but filters and meta data help
replace by tuple of vector for velocity and vector for acceleration
allow to add vectors to coordinates
CON:
PRO:
an enum is not powerfull enough to provide the representation of the hierachy of miss reasons
hierachy is:
EDIT: Not completely true. Not worth the hasstle.
cylindrical
cylindrical swirl
doc is not up to date
explicit note for ValueError (coordinate restrictions)
branch: feature/ray_depth
This speeds up test renders significantly.
It is also sometimes necessary to limit the domain to a non-rectangular subdomain.
a special type is redundant
check and change invertibility instead
The initial tangent is currently approximated with the coordinate delta between start and target this is wrong in general!
using a set of miss reasons is too cumbersome and does not serve any purpose
segment != tangent:
When using Runge-Kutta the next segments position might not differ from the previous by the direction of the previous. This is because the actual segment is curved while the discrete delta is straight. The direction of the previous direction is just the tangent of the curve at that position.
It is important to avoid this confusion.
The Christoffel symbols do not transform like tensors. This leads to a correction term when dealing with a covariant derivative.
- {\Gamma^\prime}^i_{ab} {u^\prime}^a {u^\prime}^b = \frac{\partial {x^\prime}^i}{\partial x^ j} \left ( -\Gamma^j_{cd} u^c u^d - \frac{\partial^2 x^j}{\partial x^c \partial {x^\prime}^e} \frac{{x^\prime}^e}{\partial x^d} u^c u^d\right )
vec/cector/tan/tan_vec/tangent/tangential_vector
see #51
POSSIBLE-OPTIMIZATION
commentsCalculate the ray once and test against multiple faces/objects at once.
Calculate the (extended) intersection information for each ray first and display it as an image afterwards.
This has the advantage to do post processing and apply filters.
alternative:
is:
IntersectionInfo.miss_reason() -> Optional[MissReason]
should be:
IntersectionInfo.miss_reason() -> MissReason
# precondition: info.misses() == True
# raises RuntimeError
cylindrical
cylindrical swirl
invalid value
edge cases
non-edge cases
This should reduce code duplication.
Make geometry an abstraction of its representations as charts.
--> solved by redesign of geometry and introduction of nerte.values.manifolds
pullback/pushforward
--> solved by nerte.values.submanifolds
see also:
https://docs.python.org/3/library/unittest.html#type-specific-methods
e.g. to highlight specific values like reaching max step
Handle filter domain application inside camera object?
Define a focal point instead of the camera's location, since the latter is not well defined in arbitrary/curved geometries.
Added alternative projection mode: obscura in 0f1cbf7
Obscura is physically more plausible but might also more difficult to to set up a scene with.
linalg.cross
needs completion
requires knowledge of:
add test cases for swirl != 0
part of #42
add another ray from pixel mode or add kwargs
Allow to define a manifold based on another manifold.
The choice of the swirl parameter is currently inconsistent. Make "-a
" the flat to swirled transformation and "+a
" the inverse transformation.
Let p
be a point in space. It is represented by c
and s
in flat and swirled coordinates respectively.
Let f_a(c) = s
, then f_a
maps the flat angle phi
to the swirled alpha = phi - a *r * z
.
The original mistake came from confusing active and passive transformation and assumed .alpha = phi + a *r * z
part of: #52
see POSSIBLE-OPTIMIZATION
comments
add rank3 tensor to linear algebra package
Runge-Kutta-Nystrom may be more efficient than Runge-Kutta for ray propagation.
Scene needs more functionality than adding objects, e.g. removing objects.
rasing an exception unconditionally is not an apropriate way to warn
see: https://docs.python.org/3/library/warnings.html#warnings.warn
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.