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

Add ratio of rays that are incident for both

Browse files
app.py CHANGED
@@ -16,7 +16,10 @@ iface1 = gr.Interface(
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,
21
  title="Non-Reflective Ray Tracing",
22
  description=description1,
@@ -32,9 +35,12 @@ iface2 = gr.Interface(
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,
39
  title="Reflective Ray Tracing",
40
  description=description2,
 
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=[
20
+ gr.Image(label="Ray Tracing Output"),
21
+ gr.Number(label="Fraction of Incident Rays", info="Out of 100 rays, how many are incident on the surface"),
22
+ ],
23
  live=True,
24
  title="Non-Reflective Ray Tracing",
25
  description=description1,
 
35
  gr.Number(label="Circle Center Y (b)", value=20, info="Y coordinate of Circle center"),
36
  gr.Number(label="Radius (r)", value=15, info="Radius of the circle"),
37
  gr.Slider(minimum=3, maximum=1000, step=1, label="Number of Rays", value=50, info="Number of rays to be plotted in total"),
38
+ gr.Radio(label="Remove Clutter", choices=["Yes", "No"], value="No", info="Only keep rays that are REFLECTED to the surface."),
39
+ ],
40
+ outputs=[
41
+ gr.Image(label="Ray Tracing Output"),
42
+ gr.Number(label="Fraction of Reflected Rays", info="Out of 100 rays, how many get reflected by the surface"),
43
  ],
 
44
  live=True,
45
  title="Reflective Ray Tracing",
46
  description=description2,
backend/nonreflecting_ray_tracing.py CHANGED
@@ -78,7 +78,7 @@ def nonreflecting_plotter(a = 20, b = 20, r = 15, ray_count = 50, clutter = "No"
78
  delta = mt.asin(r / d)
79
  except:
80
  inside_circle_plotter()
81
- ax.set_title(f'Rays origin - (0,0). From inside a perfectly absorbing circle\nCenter - ({a},{b}), Radius {r}')
82
  plt.grid(True)
83
  plt.show()
84
 
@@ -95,11 +95,12 @@ def nonreflecting_plotter(a = 20, b = 20, r = 15, ray_count = 50, clutter = "No"
95
  upper_angle = normalize(upper_angle)
96
 
97
  increment = 2*mt.pi/ray_count
98
-
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
@@ -130,11 +131,12 @@ def nonreflecting_plotter(a = 20, b = 20, r = 15, ray_count = 50, clutter = "No"
130
  ax.plot(x1, y1, color='green', lw=2, linestyle='--')
131
  ax.plot(x2, y2, color='green', lw=2, linestyle='--')
132
 
133
- ax.set_title(f'Rays with shadow from a perfectly absorbing circle\nCenter - ({a},{b}), Radius {r}')
134
  plt.grid(True)
135
  plt.show()
136
 
137
  fig.canvas.draw()
138
  image_array = np.array(fig.canvas.renderer.buffer_rgba())
139
  plt.close(fig)
140
- return image_array
 
 
78
  delta = mt.asin(r / d)
79
  except:
80
  inside_circle_plotter()
81
+ ax.set_title(f'Rays origin - (0,0). From inside a perfectly absorbing circle\nCenter-({a},{b}), Radius-{r}')
82
  plt.grid(True)
83
  plt.show()
84
 
 
95
  upper_angle = normalize(upper_angle)
96
 
97
  increment = 2*mt.pi/ray_count
98
+ total_hits = 0
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
+ total_hits += 1
104
  A = dx**2 + dy**2
105
  B = -2 * (a * dx + b * dy)
106
  C = a**2 + b**2 - r**2
 
131
  ax.plot(x1, y1, color='green', lw=2, linestyle='--')
132
  ax.plot(x2, y2, color='green', lw=2, linestyle='--')
133
 
134
+ ax.set_title(f'Rays with shadow from a perfectly absorbing circle\nCenter-({a},{b}), Radius-{r}')
135
  plt.grid(True)
136
  plt.show()
137
 
138
  fig.canvas.draw()
139
  image_array = np.array(fig.canvas.renderer.buffer_rgba())
140
  plt.close(fig)
141
+ hit_ratio = (total_hits / ray_count) * 100
142
+ return image_array, f"{hit_ratio:.2f}"
backend/reflecting_ray_tracing.py CHANGED
@@ -101,14 +101,14 @@ def reflecting_plotter(a = 20, b = 20, r = 15, ray_count = 15, clutter = "No"):
101
  delta = mt.asin(r / d)
102
  except:
103
  inside_circle_plotter()
104
- ax.set_title(f'Rays origin - (0,0). From inside a perfectly reflective circle\nCenter - ({a},{b}), Radius {r}')
105
  plt.grid(True)
106
  plt.show()
107
 
108
  fig.canvas.draw()
109
  image_array = np.array(fig.canvas.renderer.buffer_rgba())
110
  plt.close(fig)
111
- return image_array
112
 
113
  # raise ValueError("Circle radius is too large for the given center coordinates.")
114
 
@@ -137,10 +137,12 @@ def reflecting_plotter(a = 20, b = 20, r = 15, ray_count = 15, clutter = "No"):
137
  return [x_0, x_1], [y_0, y_1]
138
 
139
  increment = 2*mt.pi/ray_count
 
140
  for angle in np.arange(0, 2 * np.pi, increment):
141
  # dx = mt.cos(angle)
142
  # dy = mt.sin(angle)
143
  if is_angle_between(angle, lower_angle, upper_angle):
 
144
  plot_reflection_on_circle(ax, angle, center=(a, b), radius=r)
145
 
146
  else:
@@ -148,10 +150,12 @@ def reflecting_plotter(a = 20, b = 20, r = 15, ray_count = 15, 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)
153
  plt.show()
154
  fig.canvas.draw()
155
  image_array = np.array(fig.canvas.renderer.buffer_rgba())
156
  plt.close(fig)
157
- return image_array
 
 
 
101
  delta = mt.asin(r / d)
102
  except:
103
  inside_circle_plotter()
104
+ ax.set_title(f'Rays origin - (0,0). From inside a perfectly reflective circle\nCenter-({a},{b}), Radius-{r}')
105
  plt.grid(True)
106
  plt.show()
107
 
108
  fig.canvas.draw()
109
  image_array = np.array(fig.canvas.renderer.buffer_rgba())
110
  plt.close(fig)
111
+ return image_array, 100
112
 
113
  # raise ValueError("Circle radius is too large for the given center coordinates.")
114
 
 
137
  return [x_0, x_1], [y_0, y_1]
138
 
139
  increment = 2*mt.pi/ray_count
140
+ total_hits = 0
141
  for angle in np.arange(0, 2 * np.pi, increment):
142
  # dx = mt.cos(angle)
143
  # dy = mt.sin(angle)
144
  if is_angle_between(angle, lower_angle, upper_angle):
145
+ total_hits += 1
146
  plot_reflection_on_circle(ax, angle, center=(a, b), radius=r)
147
 
148
  else:
 
150
  x, y = draw_line(angle)
151
  ax.plot(x, y, color='red', lw=1, zorder=5)
152
  # plot_reflection_on_circle(ax, angle, center=(a, b), radius=r)
153
+ ax.set_title(f'Rays with shadow from a perfectly reflective circle,\nCenter-({a},{b}), Radius-{r}')
154
  plt.grid(True)
155
  plt.show()
156
  fig.canvas.draw()
157
  image_array = np.array(fig.canvas.renderer.buffer_rgba())
158
  plt.close(fig)
159
+
160
+ hit_ratio = 100*total_hits / ray_count
161
+ return image_array, f"{hit_ratio:.1f}"