EnvelopeDistance.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. export default class EnvelopeDistance {
  2. static maxDistance(ax1, ay1, ax2, ay2, bx1, by1, bx2, by2) {
  3. let dist = EnvelopeDistance.distance(ax1, ay1, bx1, by1)
  4. dist = Math.max(dist, EnvelopeDistance.distance(ax1, ay1, bx2, by2))
  5. dist = Math.max(dist, EnvelopeDistance.distance(ax2, ay2, bx1, by1))
  6. dist = Math.max(dist, EnvelopeDistance.distance(ax2, ay2, bx2, by2))
  7. return dist
  8. }
  9. static distance(x1, y1, x2, y2) {
  10. const dx = x2 - x1
  11. const dy = y2 - y1
  12. return Math.sqrt(dx * dx + dy * dy)
  13. }
  14. static maximumDistance(env1, env2) {
  15. const minx = Math.min(env1.getMinX(), env2.getMinX())
  16. const miny = Math.min(env1.getMinY(), env2.getMinY())
  17. const maxx = Math.max(env1.getMaxX(), env2.getMaxX())
  18. const maxy = Math.max(env1.getMaxY(), env2.getMaxY())
  19. return EnvelopeDistance.distance(minx, miny, maxx, maxy)
  20. }
  21. static minMaxDistance(a, b) {
  22. const aminx = a.getMinX()
  23. const aminy = a.getMinY()
  24. const amaxx = a.getMaxX()
  25. const amaxy = a.getMaxY()
  26. const bminx = b.getMinX()
  27. const bminy = b.getMinY()
  28. const bmaxx = b.getMaxX()
  29. const bmaxy = b.getMaxY()
  30. let dist = EnvelopeDistance.maxDistance(aminx, aminy, aminx, amaxy, bminx, bminy, bminx, bmaxy)
  31. dist = Math.min(dist, EnvelopeDistance.maxDistance(aminx, aminy, aminx, amaxy, bminx, bminy, bmaxx, bminy))
  32. dist = Math.min(dist, EnvelopeDistance.maxDistance(aminx, aminy, aminx, amaxy, bmaxx, bmaxy, bminx, bmaxy))
  33. dist = Math.min(dist, EnvelopeDistance.maxDistance(aminx, aminy, aminx, amaxy, bmaxx, bmaxy, bmaxx, bminy))
  34. dist = Math.min(dist, EnvelopeDistance.maxDistance(aminx, aminy, amaxx, aminy, bminx, bminy, bminx, bmaxy))
  35. dist = Math.min(dist, EnvelopeDistance.maxDistance(aminx, aminy, amaxx, aminy, bminx, bminy, bmaxx, bminy))
  36. dist = Math.min(dist, EnvelopeDistance.maxDistance(aminx, aminy, amaxx, aminy, bmaxx, bmaxy, bminx, bmaxy))
  37. dist = Math.min(dist, EnvelopeDistance.maxDistance(aminx, aminy, amaxx, aminy, bmaxx, bmaxy, bmaxx, bminy))
  38. dist = Math.min(dist, EnvelopeDistance.maxDistance(amaxx, amaxy, aminx, amaxy, bminx, bminy, bminx, bmaxy))
  39. dist = Math.min(dist, EnvelopeDistance.maxDistance(amaxx, amaxy, aminx, amaxy, bminx, bminy, bmaxx, bminy))
  40. dist = Math.min(dist, EnvelopeDistance.maxDistance(amaxx, amaxy, aminx, amaxy, bmaxx, bmaxy, bminx, bmaxy))
  41. dist = Math.min(dist, EnvelopeDistance.maxDistance(amaxx, amaxy, aminx, amaxy, bmaxx, bmaxy, bmaxx, bminy))
  42. dist = Math.min(dist, EnvelopeDistance.maxDistance(amaxx, amaxy, amaxx, aminy, bminx, bminy, bminx, bmaxy))
  43. dist = Math.min(dist, EnvelopeDistance.maxDistance(amaxx, amaxy, amaxx, aminy, bminx, bminy, bmaxx, bminy))
  44. dist = Math.min(dist, EnvelopeDistance.maxDistance(amaxx, amaxy, amaxx, aminy, bmaxx, bmaxy, bminx, bmaxy))
  45. dist = Math.min(dist, EnvelopeDistance.maxDistance(amaxx, amaxy, amaxx, aminy, bmaxx, bmaxy, bmaxx, bminy))
  46. return dist
  47. }
  48. }