comparison trafficintelligence/moving.py @ 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 01c24c1cdb70
children 1f0b1fc172f8
comparison
equal deleted inserted replaced
1216:8356e15fd691 1217:5038c357b57f
422 for i in range(4): 422 for i in range(4):
423 for j in range(4): 423 for j in range(4):
424 p0_x, p0_y = x_bbox_2[i], y_bbox_2[i] 424 p0_x, p0_y = x_bbox_2[i], y_bbox_2[i]
425 p1_x, p1_y = x_bbox_1[line[j][0]], y_bbox_1[line[j][0]] 425 p1_x, p1_y = x_bbox_1[line[j][0]], y_bbox_1[line[j][0]]
426 p2_x, p2_y = x_bbox_1[line[j][1]], y_bbox_1[line[j][1]] 426 p2_x, p2_y = x_bbox_1[line[j][1]], y_bbox_1[line[j][1]]
427 f = (p2_x - p1_x) * (p0_y - p1_y) - (p0_x - p1_x) * (p2_y - p1_y) 427 p0_x_t = p0_x + v_2_x * t
428 p0_y_t = p0_y + v_2_y * t
429 p1_x_t = p1_x + v_1_x * t
430 p1_y_t = p1_y + v_1_y * t
431 p2_x_t = p2_x + v_1_x * t
432 p2_y_t = p2_y + v_1_y * t
433 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)
428 collision_t = solve(f, t, set=True, dict=True) 434 collision_t = solve(f, t, set=True, dict=True)
429 if collision_t and collision_t[0][t] >= 0: 435 if collision_t and collision_t[0][t] >= 0:
430 collision_t = collision_t[0][t] 436 collision_t = collision_t[0][t]
431 print(f'collision_t: {collision_t} >>>>>>>>>') 437 #print(f'collision_t: {collision_t} >>>>>>>>>')
432 x_bbox_1_new, y_bbox_1_new = NewFourPoints(bbox_1, collision_t, v_1_x, v_1_y) 438 x_bbox_1_new, y_bbox_1_new = NewFourPoints(bbox_1, collision_t, v_1_x, v_1_y)
433 x_bbox_2_new, y_bbox_2_new = NewFourPoints(bbox_2, collision_t, v_2_x, v_2_y) 439 x_bbox_2_new, y_bbox_2_new = NewFourPoints(bbox_2, collision_t, v_2_x, v_2_y)
434 p0_x, p0_y = x_bbox_2_new[i], y_bbox_2_new[i] 440 p0_x, p0_y = x_bbox_2_new[i], y_bbox_2_new[i]
435 p1_x, p1_y = x_bbox_1_new[line[j][0]], y_bbox_1_new[line[j][0]] 441 p1_x, p1_y = x_bbox_1_new[line[j][0]], y_bbox_1_new[line[j][0]]
436 p2_x, p2_y = x_bbox_1_new[line[j][1]], y_bbox_1_new[line[j][1]] 442 p2_x, p2_y = x_bbox_1_new[line[j][1]], y_bbox_1_new[line[j][1]]
437 min_x, max_x = min(p1_x, p2_x), max(p1_x, p2_x) 443 min_x, max_x = min(p1_x, p2_x), max(p1_x, p2_x)
438 min_y, max_y = min(p1_y, p2_y), max(p1_y, p2_y) 444 min_y, max_y = min(p1_y, p2_y), max(p1_y, p2_y)
439 if min_x == max_x: 445 if min_x == max_x:
440 if min_y <= p0_y <= max_y: 446 if min_y <= p0_y <= max_y:
441 t_total.append(collision_t) 447 t_total.append(collision_t)
442
443 elif min_y == max_y: 448 elif min_y == max_y:
444 if min_x <= p0_x <= max_x: 449 if min_x <= p0_x <= max_x:
445 t_total.append(collision_t) 450 t_total.append(collision_t)
446
447 else: 451 else:
448 if min_x <= p0_x <= max_x or min_y <= p0_y <= max_y: 452 if min_x <= p0_x <= max_x or min_y <= p0_y <= max_y:
449 t_total.append(collision_t) 453 t_total.append(collision_t)
450 x_temps = x_bbox_2 454
451 x_bbox_2 = x_bbox_1 455 x_temps = x_bbox_2
452 x_bbox_1 = x_temps 456 x_bbox_2 = x_bbox_1
453 # print(f'Change bounding box1 and box2 >>>>>>>>>>>>>>>>>>>\n\n\n') 457 x_bbox_1 = x_temps
458 # print(f'Change bounding box1 and box2 >>>>>>>>>>>>>>>>>>>\n\n\n')
454 for i in range(4): 459 for i in range(4):
455 for j in range(4): 460 for j in range(4):
456 p0_x, p0_y = x_bbox_2[i], y_bbox_2[i] 461 p0_x, p0_y = x_bbox_2[i], y_bbox_2[i]
457 p1_x, p1_y = x_bbox_1[line[j][0]], y_bbox_1[line[j][0]] 462 p1_x, p1_y = x_bbox_1[line[j][0]], y_bbox_1[line[j][0]]
458 p2_x, p2_y = x_bbox_1[line[j][1]], y_bbox_1[line[j][1]] 463 p2_x, p2_y = x_bbox_1[line[j][1]], y_bbox_1[line[j][1]]
459 f = (p2_x - p1_x) * (p0_y - p1_y) - (p0_x - p1_x) * (p2_y - p1_y) 464 p0_x_t = p0_x + v_2_x * t
465 p0_y_t = p0_y + v_2_y * t
466 p1_x_t = p1_x + v_1_x * t
467 p1_y_t = p1_y + v_1_y * t
468 p2_x_t = p2_x + v_1_x * t
469 p2_y_t = p2_y + v_1_y * t
470 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)
460 collision_t = solve(f, t, set=True, dict=True) 471 collision_t = solve(f, t, set=True, dict=True)
461 if collision_t and collision_t[0][t] >= 0: 472 if collision_t and collision_t[0][t] >= 0:
462 collision_t = collision_t[0][t] 473 collision_t = collision_t[0][t]
463 # print(f'collision_t: {collision_t} >>>>>>>>>') 474 # print(f'collision_t: {collision_t} >>>>>>>>>')
464 x_bbox_1_new, y_bbox_1_new = NewFourPoints(bbox_1, collision_t) 475 x_bbox_1_new, y_bbox_1_new = NewFourPoints(bbox_1, collision_t, v_1_x, v_1_y)
465 x_bbox_2_new, y_bbox_2_new = NewFourPoints(bbox_2, collision_t) 476 x_bbox_2_new, y_bbox_2_new = NewFourPoints(bbox_2, collision_t, v_2_x, v_2_y)
466 p0_x, p0_y = x_bbox_2_new[i], y_bbox_2_new[i] 477 p0_x, p0_y = x_bbox_2_new[i], y_bbox_2_new[i]
467 p1_x, p1_y = x_bbox_1_new[line[j][0]], y_bbox_1_new[line[j][0]] 478 p1_x, p1_y = x_bbox_1_new[line[j][0]], y_bbox_1_new[line[j][0]]
468 p2_x, p2_y = x_bbox_1_new[line[j][1]], y_bbox_1_new[line[j][1]] 479 p2_x, p2_y = x_bbox_1_new[line[j][1]], y_bbox_1_new[line[j][1]]
469 min_x, max_x = min(p1_x, p2_x), max(p1_x, p2_x) 480 min_x, max_x = min(p1_x, p2_x), max(p1_x, p2_x)
470 min_y, max_y = min(p1_y, p2_y), max(p1_y, p2_y) 481 min_y, max_y = min(p1_y, p2_y), max(p1_y, p2_y)