-
Notifications
You must be signed in to change notification settings - Fork 50
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Implementation of Off-Axis Parabolic Mirrors #23
Comments
That should work using |
Yes, with the offset I can bring the shape to the right position, but the active area is still at the pole. Here is an example:
|
I see. You'd want both an off-axis vertex and an off-vertex shape/aperture. That's not implemented yet. You can either subclass |
Thanks for the quick reply. Overwriting the clip method does not seem to have the expected effect, at least on the way the rays are drawn. I tried to use a simple translation, which did not seem to change anything:
I also tried to use some air interfaces with the actual geometry, but now it does not seem to trace correctly:
Is there a way I can simply trace one straight ray to see where it is going wrong? |
Sure. Something like this (tweaking your first snippet): s = ro.system_from_yaml("""
description: three lens monochromatic focusing f/1 50mm
stop: 2
wavelengths: [550.0e-9]
object: {angle_deg: 9.0, pupil: {radius: 25}}
elements:
- {material: air, radius: 25}
- {material: mirror, radius: 100, roc: -50.0, offset: [0, -25, 150], angles: [-1.1, 0, 0], conic: -1}
- {material: glass/SCHOTT-SF|N-SF5, roc: 247.7, distance: 150, radius: 25, direction: [0, 1, 0]}
- {material: glass/SCHOTT-BK|N-BK7HT, roc: 72.1, distance: 3, radius: 25, direction: [0, 1, 0]}
- {material: air, roc: -83.2, distance: 12, radius: 25, direction: [0, 1, 0]}
- {material: air, distance: 2, radius: 22.0, direction: [0, 1, 0]}
- {material: glass/HIKARI-BaF|E-BAF11, roc: 50.8, distance: 3.8, radius: 25, direction: [0, 1, 0]}
- {material: glass/SCHOTT-SF|N-SF11, roc: -41.7, distance: 20, radius: 25, direction: [0, 1, 0]}
- {material: air, roc: -247.7, distance: 3, radius: 25, direction: [0, 1, 0]}
- {material: air, distance: 100, radius: 1, direction: [0, 1, 0]}
""")
s.object = ro.FiniteConjugate(radius=25.0, pupil=dict(radius=25.0))
s.update()
g = ro.GeometricTrace(s)
g.rays_given(y=[(0., 0)], u=[(0., 0)])
g.propagate()
fig, ax = plt.subplots(figsize=(15, 15))
s.plot(ax)
g.plot(ax)
print(g)
|
Hmm. Not immediately. That does look like a bug. |
Hi,
thanks for providing this great library.
I'm trying to test and optimize an optical system that uses off-axis parabolic mirrors under 90° to relay an image. I did manage to get an imaging system with 90° reflection to work and also to produce the correct parabolic shape with conic constant=-1, but the optical axis is always at the pole of the parabola.
Is there any way to implement this component in rayopt correctly? And if not, how hard would it be to adapt the API to allow for this shape to be used?
Kind regards,
Artur
The text was updated successfully, but these errors were encountered: