Skip to main content

Ray tracing in python

Project description

ImgMerlictPythonLogo

TestStatus PyPiStatus BlackStyle BlackPackStyle GPLv3LicenseBadge

More light than you can handle! Also: This is in beta state. Don’t judge me! Merlict would not exist without the author’s past and present affiliations:

  • Max-Planck-Institute for Nuclear Physics, Saupfercheckweg 1, 69117 Heidelberg, Germany

  • Institute for Particle Physics and Astrophysics, ETH-Zurich, Otto-Stern-Weg 5, 8093 Zurich, Switzerland

  • Experimental Physics Vb, Astroparticle Physics, TU-Dortmund, Otto-Hahn-Str. 4a, 44227 Dortmund, Germany

Install

pip install merlict

Minimal example

Load an existing scenery

import merlict
import importlib
from importlib import resources
import os

path = os.path.join(
    str(importlib.resources.files("merlict")),
    "tests",
    "resources",
    "segmented_reflector.tar"
)

sceneryPy = merlict.scenery.read_tar(path)

mli = merlict.compile(sceneryPy)
mli.view()

Query the intersection of rays with the scenery

rays = merlict.ray.init(size=1)  # only one ray for demonstration

rays["support.x"] = 0.3
rays["support.y"] = 0.1
rays["support.z"] = 2.3

rays["direction.x"] = 0
rays["direction.y"] = 0
rays["direction.z"] = -1

hits, intersections = mli.query_intersectionSurfaceNormal(rays)

if hits[0]:
    print("The ray intersects with the surface")
    print("of (object, face): ({:d}, {:d}),".format(
            intersections[0]["geometry_id.robj"],
            intersections[0]["geometry_id.face"],
        )
    )
    print("in distance: {:f},".format(intersections[0]["distance_of_ray"]))
    print("at position: ({:f}, {:f}, {:f}),".format(
            intersections[0]["position.x"],
            intersections[0]["position.y"],
            intersections[0]["position.z"],
        )
    )
    print("and with surface-normal: ({:f}, {:f}, {:f}).".format(
            intersections[0]["surface_normal.x"],
            intersections[0]["surface_normal.y"],
            intersections[0]["surface_normal.z"],
        )
    )
    print(
        "With respect to the frame "
        "of the intersected object the ray intersected"
    )
    print("at position: ({:f}, {:f}, {:f}),".format(
            intersections[0]["position_local.x"],
            intersections[0]["position_local.y"],
            intersections[0]["position_local.z"],
        )
    )
    print("and with surface-normal: ({:f}, {:f}, {:f}).".format(
            intersections[0]["surface_normal_local.x"],
            intersections[0]["surface_normal_local.y"],
            intersections[0]["surface_normal_local.z"],
        )
    )
else:
    print("The ray does not intersect with any surface.")

will yield

The ray intersects with the surface
of (object, face): (28, 35),
in distance: 2.287463,
at position: (0.300000, 0.100000, 0.012537),
and with surface-normal: (-0.075000, -0.025000, 0.996870).
With respect to the frame of the intersected object the ray intersected
at position: (0.009082, 0.044013, 0.000270),
and with surface-normal: (-0.002270, -0.011003, 0.999937).

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

merlict-0.1.7.1.9.9.tar.gz (251.9 kB view details)

Uploaded Source

File details

Details for the file merlict-0.1.7.1.9.9.tar.gz.

File metadata

  • Download URL: merlict-0.1.7.1.9.9.tar.gz
  • Upload date:
  • Size: 251.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.12.4

File hashes

Hashes for merlict-0.1.7.1.9.9.tar.gz
Algorithm Hash digest
SHA256 07c31a2d70d38a7e435370a3f9a4eb8ec7f458f29c22e4bee8bb5c5b63b7b17c
MD5 c0929ffa8f0413d80794d48197bbe68f
BLAKE2b-256 70cee10355164a97d1174a6b5e63ae08c655cc5da031e90a28197cb823409fe6

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page