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 :de:

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

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

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.2.3.2.2.7.tar.gz (307.4 kB view details)

Uploaded Source

File details

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

File metadata

  • Download URL: merlict-0.2.3.2.2.7.tar.gz
  • Upload date:
  • Size: 307.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.5

File hashes

Hashes for merlict-0.2.3.2.2.7.tar.gz
Algorithm Hash digest
SHA256 1cdfed39d120ad557478bb31cadc33cff564c4871fb35bce7eec77ff5927e96a
MD5 f5ba23fafc31288689cb33c8e3175f44
BLAKE2b-256 ad9fc19af18a88ecec2565dab9561604ada1f5467bb6dc428da6095e575cc1e4

See more details on using hashes here.

Supported by

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