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

Uploaded Source

File details

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

File metadata

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

File hashes

Hashes for merlict-0.2.5.2.2.7.tar.gz
Algorithm Hash digest
SHA256 c3f98b108c5eefdf07f938f4ebf3d65d866d4ed7c1f1bec4fb7c4a0f71a5fe55
MD5 fed83fd86cb547d8be11068915973346
BLAKE2b-256 27f2be086d310db31d423c076778191531354f9039b66eca567bd1c77a5bb869

See more details on using hashes here.

Supported by

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