DebasishDhal99 commited on
Commit
8949a25
·
1 Parent(s): 46251b7

Add edge case when sphere blocks all the light

Browse files
backend/nonreflecting_ray_tracing.py CHANGED
@@ -48,14 +48,47 @@ def nonreflecting_plotter(a = 20, b = 20, r = 15, ray_count = 50):
48
  y_1 = length * mt.sin(angle) + y_0
49
  return [x_0, x_1], [y_0, y_1]
50
 
51
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
52
  theta_center = mt.atan2(b, a)
53
  d = mt.hypot(a, b)
54
 
55
  try:
56
  delta = mt.asin(r / d)
57
  except:
58
- raise ValueError("Circle radius is too large for the given center coordinates.")
 
 
 
 
 
 
 
 
 
59
 
60
  lower_angle = theta_center - delta
61
  upper_angle = theta_center + delta
 
48
  y_1 = length * mt.sin(angle) + y_0
49
  return [x_0, x_1], [y_0, y_1]
50
 
51
+ def inside_circle_plotter():
52
+ """Function to plot the rays inside the circle"""
53
+ increment = 2 * mt.pi / ray_count
54
+
55
+ for angle in np.arange(0, 2 * mt.pi, increment):
56
+ dx = mt.cos(angle)
57
+ dy = mt.sin(angle)
58
+
59
+ A = dx**2 + dy**2
60
+ B = -2 * (a * dx + b * dy)
61
+ C = a**2 + b**2 - r**2
62
+
63
+ try:
64
+ t1, t2 = quad_solver(A, B, C)
65
+
66
+ valid_ts = [t for t in (t1, t2) if t > 0]
67
+ if not valid_ts:
68
+ continue
69
+ t_hit = min(valid_ts)
70
+
71
+ x = [0, t_hit * dx]
72
+ y = [0, t_hit * dy]
73
+ ax.plot(x, y, color='orange', lw=1)
74
+ except ValueError:
75
+ continue
76
  theta_center = mt.atan2(b, a)
77
  d = mt.hypot(a, b)
78
 
79
  try:
80
  delta = mt.asin(r / d)
81
  except:
82
+ inside_circle_plotter()
83
+ ax.set_title(f'Rays origin - (0,0). From inside a perfectly absorbing circle\nCenter - ({a},{b}), Radius {r}')
84
+ plt.grid(True)
85
+ plt.show()
86
+
87
+ fig.canvas.draw()
88
+ image_array = np.array(fig.canvas.renderer.buffer_rgba())
89
+ plt.close(fig)
90
+ return image_array
91
+ # raise ValueError("Circle radius is too large for the given center coordinates.")
92
 
93
  lower_angle = theta_center - delta
94
  upper_angle = theta_center + delta