test_overlap.py 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import sys
  2. sys.path.insert(0, '/media/dage/KESU/temp/floorplan')
  3. from pixel_to_world import segment_bbox_intersections
  4. # 测试用例:seg[28] 和 seg[29] 与门 bbox 的重叠
  5. # 门 bbox: [-3.41, -2.0, -3.17, -0.7]
  6. # seg[28]: (-3.33,-0.18)->(-3.33,-1.40) 垂直线段
  7. # seg[29]: (-3.33,-1.08)->(-3.33,-2.02) 垂直线段
  8. bbox = [-3.41, -2.0, -3.17, -0.7]
  9. # seg[28]
  10. va = (-3.33, -0.18)
  11. vb = (-3.33, -1.40)
  12. dx, dy = vb[0] - va[0], vb[1] - va[1]
  13. seg_len = (dx*dx + dy*dy) ** 0.5
  14. print(f'seg[28]: {va}->{vb}, len={seg_len:.3f}')
  15. pts = segment_bbox_intersections([va[0], va[1], vb[0], vb[1]], bbox)
  16. print(f' 交点数:{len(pts)}')
  17. if len(pts) >= 2:
  18. dx0 = pts[0][0]-pts[1][0]
  19. dy0 = pts[0][1]-pts[1][1]
  20. overlap = (dx0*dx0 + dy0*dy0) ** 0.5
  21. print(f' 重叠长度:{overlap:.3f}')
  22. elif len(pts) == 1:
  23. print(f' 只有一个交点,需要特殊处理')
  24. else:
  25. print(f' 无交点,可能线段完全在 bbox 内或完全在外')
  26. # seg[29]
  27. va = (-3.33, -1.08)
  28. vb = (-3.33, -2.02)
  29. dx, dy = vb[0] - va[0], vb[1] - va[1]
  30. seg_len = (dx*dx + dy*dy) ** 0.5
  31. print(f'seg[29]: {va}->{vb}, len={seg_len:.3f}')
  32. pts = segment_bbox_intersections([va[0], va[1], vb[0], vb[1]], bbox)
  33. print(f' 交点数:{len(pts)}')
  34. if len(pts) >= 2:
  35. dx0 = pts[0][0]-pts[1][0]
  36. dy0 = pts[0][1]-pts[1][1]
  37. overlap = (dx0*dx0 + dy0*dy0) ** 0.5
  38. print(f' 重叠长度:{overlap:.3f}')
  39. elif len(pts) == 1:
  40. print(f' 只有一个交点,需要特殊处理')
  41. else:
  42. print(f' 无交点,可能线段完全在 bbox 内或完全在外')