changeset 1217:5038c357b57f

updating code for direct computation (very slow solver)
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Tue, 16 May 2023 22:12:39 -0400
parents 8356e15fd691
children 1f0b1fc172f8
files trafficintelligence/moving.py
diffstat 1 files changed, 22 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/trafficintelligence/moving.py	Sun May 07 16:24:27 2023 -0400
+++ b/trafficintelligence/moving.py	Tue May 16 22:12:39 2023 -0400
@@ -424,11 +424,17 @@
                 p0_x, p0_y = x_bbox_2[i], y_bbox_2[i]
                 p1_x, p1_y = x_bbox_1[line[j][0]], y_bbox_1[line[j][0]]
                 p2_x, p2_y = x_bbox_1[line[j][1]], y_bbox_1[line[j][1]]
-                f = (p2_x - p1_x) * (p0_y - p1_y) - (p0_x - p1_x) * (p2_y - p1_y)
+                p0_x_t = p0_x + v_2_x * t
+                p0_y_t = p0_y + v_2_y * t
+                p1_x_t = p1_x + v_1_x * t
+                p1_y_t = p1_y + v_1_y * t
+                p2_x_t = p2_x + v_1_x * t
+                p2_y_t = p2_y + v_1_y * t
+                f = (p2_x_t - p1_x_t) * (p0_y_t - p1_y_t) - (p0_x_t - p1_x_t) * (p2_y_t - p1_y_t)
                 collision_t = solve(f, t, set=True, dict=True)
                 if collision_t and collision_t[0][t] >= 0:
                     collision_t = collision_t[0][t]
-                    print(f'collision_t: {collision_t} >>>>>>>>>')
+                    #print(f'collision_t: {collision_t} >>>>>>>>>')
                     x_bbox_1_new, y_bbox_1_new = NewFourPoints(bbox_1, collision_t, v_1_x, v_1_y)
                     x_bbox_2_new, y_bbox_2_new = NewFourPoints(bbox_2, collision_t, v_2_x, v_2_y)
                     p0_x, p0_y = x_bbox_2_new[i], y_bbox_2_new[i]
@@ -439,30 +445,35 @@
                     if min_x == max_x:
                         if min_y <= p0_y <= max_y:
                             t_total.append(collision_t)
-
                     elif min_y == max_y:
                         if min_x <= p0_x <= max_x:
                             t_total.append(collision_t)
-
                     else:
                         if min_x <= p0_x <= max_x or min_y <= p0_y <= max_y:
                             t_total.append(collision_t)
-                            x_temps = x_bbox_2
-                            x_bbox_2 = x_bbox_1
-                            x_bbox_1 = x_temps
-                            # print(f'Change bounding box1 and box2 >>>>>>>>>>>>>>>>>>>\n\n\n')
+        
+        x_temps = x_bbox_2
+        x_bbox_2 = x_bbox_1
+        x_bbox_1 = x_temps
+        # print(f'Change bounding box1 and box2 >>>>>>>>>>>>>>>>>>>\n\n\n')
         for i in range(4):
             for j in range(4):
                 p0_x, p0_y = x_bbox_2[i], y_bbox_2[i]
                 p1_x, p1_y = x_bbox_1[line[j][0]], y_bbox_1[line[j][0]]
                 p2_x, p2_y = x_bbox_1[line[j][1]], y_bbox_1[line[j][1]]
-                f = (p2_x - p1_x) * (p0_y - p1_y) - (p0_x - p1_x) * (p2_y - p1_y)
+                p0_x_t = p0_x + v_2_x * t
+                p0_y_t = p0_y + v_2_y * t
+                p1_x_t = p1_x + v_1_x * t
+                p1_y_t = p1_y + v_1_y * t
+                p2_x_t = p2_x + v_1_x * t
+                p2_y_t = p2_y + v_1_y * t
+                f = (p2_x_t - p1_x_t) * (p0_y_t - p1_y_t) - (p0_x_t - p1_x_t) * (p2_y_t - p1_y_t)
                 collision_t = solve(f, t, set=True, dict=True)
                 if collision_t and collision_t[0][t] >= 0:
                     collision_t = collision_t[0][t]
                     # print(f'collision_t: {collision_t} >>>>>>>>>')
-                    x_bbox_1_new, y_bbox_1_new = NewFourPoints(bbox_1, collision_t)
-                    x_bbox_2_new, y_bbox_2_new = NewFourPoints(bbox_2, collision_t)
+                    x_bbox_1_new, y_bbox_1_new = NewFourPoints(bbox_1, collision_t, v_1_x, v_1_y)
+                    x_bbox_2_new, y_bbox_2_new = NewFourPoints(bbox_2, collision_t, v_2_x, v_2_y)
                     p0_x, p0_y = x_bbox_2_new[i], y_bbox_2_new[i]
                     p1_x, p1_y = x_bbox_1_new[line[j][0]], y_bbox_1_new[line[j][0]]
                     p2_x, p2_y = x_bbox_1_new[line[j][1]], y_bbox_1_new[line[j][1]]