DebasishDhal99 commited on
Commit
adc8d2e
·
1 Parent(s): 64b00ed

Add clutter removal option

Browse files
app.py CHANGED
@@ -10,10 +10,11 @@ description1 = (
10
  iface1 = gr.Interface(
11
  fn = nonreflecting_plotter,
12
  inputs=[
13
- gr.Number(label="Circle Center X (a)", value=20),
14
- gr.Number(label="Circle Center Y (b)", value=20),
15
- gr.Number(label="Radius (r)", value=15),
16
- gr.Slider(minimum=3, maximum=1000, step=1, label="Number of Rays", value=50)
 
17
  ],
18
  outputs="image",
19
  live=True,
@@ -27,10 +28,11 @@ description2 = ("A source of **light** placed at the **origin**. A spherical **R
27
  iface2 = gr.Interface(
28
  fn = reflecting_plotter,
29
  inputs=[
30
- gr.Number(label="Circle Center X (a)", value=20),
31
- gr.Number(label="Circle Center Y (b)", value=20),
32
- gr.Number(label="Radius (r)", value=15),
33
- gr.Slider(minimum=3, maximum=1000, step=1, label="Number of Rays", value=50)
 
34
  ],
35
  outputs="image",
36
  live=True,
 
10
  iface1 = gr.Interface(
11
  fn = nonreflecting_plotter,
12
  inputs=[
13
+ gr.Number(label="Circle Center X (a)", value=20, info="X coordinate of Circle center"),
14
+ gr.Number(label="Circle Center Y (b)", value=20, info="Y coordinate of Circle center"),
15
+ gr.Number(label="Radius (r)", value=15, info="Radius of the circle"),
16
+ gr.Slider(minimum=3, maximum=1000, step=1, label="Number of Rays", value=50, info="Number of rays to be plotted in total"),
17
+ gr.Radio(label="Remove Clutter", choices=["Yes", "No"], value="No", info="Only keep rays that are INCIDENT by the surface."),
18
  ],
19
  outputs="image",
20
  live=True,
 
28
  iface2 = gr.Interface(
29
  fn = reflecting_plotter,
30
  inputs=[
31
+ gr.Number(label="Circle Center X (a)", value=20, info="X coordinate of Circle center"),
32
+ gr.Number(label="Circle Center Y (b)", value=20, info="Y coordinate of Circle center"),
33
+ gr.Number(label="Radius (r)", value=15, info="Radius of the circle"),
34
+ gr.Slider(minimum=3, maximum=1000, step=1, label="Number of Rays", value=50, info="Number of rays to be plotted in total"),
35
+ gr.Radio(label="Remove Clutter", choices=["Yes", "No"], value="No", info="Only keep rays that are REFLECTED by the surface."),
36
  ],
37
  outputs="image",
38
  live=True,
backend/nonreflecting_ray_tracing.py CHANGED
@@ -25,7 +25,7 @@ def is_angle_between(angle, start, end):
25
  return angle >= start or angle <= end
26
 
27
 
28
- def nonreflecting_plotter(a = 20, b = 20, r = 15, ray_count = 50):
29
 
30
  max_dim = max(abs(a), abs(b), r) * 3
31
  fig, ax = plt.subplots()
@@ -99,8 +99,7 @@ def nonreflecting_plotter(a = 20, b = 20, r = 15, ray_count = 50):
99
  for angle in np.arange(0, 2 * mt.pi, increment): # 1° steps
100
  dx = mt.cos(angle)
101
  dy = mt.sin(angle)
102
- if is_angle_between(angle, lower_angle, upper_angle):
103
- # continue
104
  A = dx**2 + dy**2
105
  B = -2 * (a * dx + b * dy)
106
  C = a**2 + b**2 - r**2
@@ -120,6 +119,8 @@ def nonreflecting_plotter(a = 20, b = 20, r = 15, ray_count = 50):
120
  except ValueError:
121
  continue
122
  else:
 
 
123
  x, y = draw_line(angle)
124
  ax.plot(x, y, color='red', lw=1)
125
 
 
25
  return angle >= start or angle <= end
26
 
27
 
28
+ def nonreflecting_plotter(a = 20, b = 20, r = 15, ray_count = 50, clutter = "No"):
29
 
30
  max_dim = max(abs(a), abs(b), r) * 3
31
  fig, ax = plt.subplots()
 
99
  for angle in np.arange(0, 2 * mt.pi, increment): # 1° steps
100
  dx = mt.cos(angle)
101
  dy = mt.sin(angle)
102
+ if is_angle_between(angle, lower_angle, upper_angle):
 
103
  A = dx**2 + dy**2
104
  B = -2 * (a * dx + b * dy)
105
  C = a**2 + b**2 - r**2
 
119
  except ValueError:
120
  continue
121
  else:
122
+ if clutter == "Yes":
123
+ continue
124
  x, y = draw_line(angle)
125
  ax.plot(x, y, color='red', lw=1)
126
 
backend/reflecting_ray_tracing.py CHANGED
@@ -55,7 +55,7 @@ def plot_reflection_on_circle(ax, angle, center, radius, ray_length=50, color='b
55
 
56
 
57
 
58
- def reflecting_plotter(a = 20, b = 20, r = 15, ray_count = 15):
59
  max_dim = max(abs(a), abs(b), r) * 3
60
  fig, ax = plt.subplots()
61
  ax.set_xlim(-max_dim, max_dim)
@@ -66,6 +66,7 @@ def reflecting_plotter(a = 20, b = 20, r = 15, ray_count = 15):
66
 
67
  circle = plt.Circle((a, b), r, color='black', fill=False)
68
  ax.add_artist(circle)
 
69
 
70
  def inside_circle_plotter():
71
  """Function to plot the rays inside the circle"""
@@ -143,8 +144,9 @@ def reflecting_plotter(a = 20, b = 20, r = 15, ray_count = 15):
143
  plot_reflection_on_circle(ax, angle, center=(a, b), radius=r)
144
 
145
  else:
146
- x, y = draw_line(angle)
147
- ax.plot(x, y, color='red', lw=1, zorder=5)
 
148
  # plot_reflection_on_circle(ax, angle, center=(a, b), radius=r)
149
  ax.set_title(f'Rays with shadow from a perfectly reflective circle,\nCenter - ({a},{b}), Radius {r}')
150
  plt.grid(True)
 
55
 
56
 
57
 
58
+ def reflecting_plotter(a = 20, b = 20, r = 15, ray_count = 15, clutter = "No"):
59
  max_dim = max(abs(a), abs(b), r) * 3
60
  fig, ax = plt.subplots()
61
  ax.set_xlim(-max_dim, max_dim)
 
66
 
67
  circle = plt.Circle((a, b), r, color='black', fill=False)
68
  ax.add_artist(circle)
69
+ ax.plot(a, b, 'ro', markersize=5)
70
 
71
  def inside_circle_plotter():
72
  """Function to plot the rays inside the circle"""
 
144
  plot_reflection_on_circle(ax, angle, center=(a, b), radius=r)
145
 
146
  else:
147
+ if clutter == "No":
148
+ x, y = draw_line(angle)
149
+ ax.plot(x, y, color='red', lw=1, zorder=5)
150
  # plot_reflection_on_circle(ax, angle, center=(a, b), radius=r)
151
  ax.set_title(f'Rays with shadow from a perfectly reflective circle,\nCenter - ({a},{b}), Radius {r}')
152
  plt.grid(True)