distance.py 611 B

12345678910111213141516171819202122232425262728293031323334
  1. import numpy as np
  2. def normSquared(v):
  3. s = 0
  4. for x in v:
  5. s += x * x
  6. return s
  7. def distSquared(u, v):
  8. return normSquared(u - v)
  9. def distToCloud(v, cloud):
  10. di = None
  11. for p in cloud:
  12. d = distSquared(v, p)
  13. if di is None:
  14. di = d
  15. else:
  16. di = min(di, d)
  17. return di
  18. def cloudDist(cloudA, cloudB):
  19. di = None
  20. dx = None
  21. for v in cloudA:
  22. d = distToCloud(v, cloudB)
  23. if di is None:
  24. di = d
  25. dx = d
  26. else:
  27. di = min(di, d)
  28. dx = max(dx, d)
  29. return (di, dx)