source = sources.PointSource( 2, (0, -4.02), .7, angles, [drawing.YELLOW], rank_type=None )""" sample_count = 100 angles = distributions.RandomLambertianAngularDistribution( -.4 * PI, .4 * PI, sample_count) beam_points = distributions.RandomUniformBeam(-.09, .09, sample_count) source = sources.AngularSource(2, (0, -4.001), PI / 2, angles, beam_points, [drawing.YELLOW] * sample_count, rank_type=None, dense=False) # build the system system = eng.OpticalSystem2D() system.optical_segments = [boundary] system.sources = [source] system.materials = [{"n": materials.vacuum}, {"n": materials.acrylic}] trace_engine = eng.OpticalEngine(2, [op.StandardReaction()], compile_dead_rays=True, dead_ray_length=10, simple_ray_inheritance={"wavelength"}) trace_engine.optical_system = system system.update() trace_engine.validate_system() trace_engine.ray_trace(max_iterations=50) # set up drawers segment_drawer = drawing.SegmentDrawer(ax,
(1.0, -1.0), (1.0, 1.0), point_count ) boundary = boundaries.ParametricMultiSegmentBoundary( zero_points, one_points, constraints=[ boundaries.ThicknessConstraint(0.0, "min"), boundaries.ThicknessConstraint(0.5, "min"), boundaries.PointConstraint(0.0, 7, parent="zero") #boundaries.ThicknessConstraint(0.0, "min", parent="zero") #boundaries.PointConstraint(0.0, 0), #boundaries.PointConstraint(0.5, 7) ], flip_norm=[False, True, True] ) system = engine.OpticalSystem2D() system.optical_segments = boundary.surfaces system.update() # set up drawer drawer = drawing.SegmentDrawer(ax, color="cyan", draw_norm_arrows=True) drawer.segments = system.optical_segments drawer.draw() # hand over to user fig.canvas.mpl_connect( "key_press_event", lambda event: on_key(event, drawer, boundary, system), ) plt.show()