Quadrant.js 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. import Coordinate from '../geom/Coordinate'
  2. import IllegalArgumentException from '../../../../java/lang/IllegalArgumentException'
  3. export default class Quadrant {
  4. static isNorthern(quad) {
  5. return quad === Quadrant.NE || quad === Quadrant.NW
  6. }
  7. static isOpposite(quad1, quad2) {
  8. if (quad1 === quad2) return false
  9. const diff = (quad1 - quad2 + 4) % 4
  10. if (diff === 2) return true
  11. return false
  12. }
  13. static commonHalfPlane(quad1, quad2) {
  14. if (quad1 === quad2) return quad1
  15. const diff = (quad1 - quad2 + 4) % 4
  16. if (diff === 2) return -1
  17. const min = quad1 < quad2 ? quad1 : quad2
  18. const max = quad1 > quad2 ? quad1 : quad2
  19. if (min === 0 && max === 3) return 3
  20. return min
  21. }
  22. static isInHalfPlane(quad, halfPlane) {
  23. if (halfPlane === Quadrant.SE)
  24. return quad === Quadrant.SE || quad === Quadrant.SW
  25. return quad === halfPlane || quad === halfPlane + 1
  26. }
  27. static quadrant() {
  28. if (typeof arguments[0] === 'number' && typeof arguments[1] === 'number') {
  29. const dx = arguments[0], dy = arguments[1]
  30. if (dx === 0.0 && dy === 0.0) throw new IllegalArgumentException('Cannot compute the quadrant for point ( ' + dx + ', ' + dy + ' )')
  31. if (dx >= 0.0)
  32. if (dy >= 0.0) return Quadrant.NE; else return Quadrant.SE
  33. else
  34. if (dy >= 0.0) return Quadrant.NW; else return Quadrant.SW
  35. } else if (arguments[0] instanceof Coordinate && arguments[1] instanceof Coordinate) {
  36. const p0 = arguments[0], p1 = arguments[1]
  37. if (p1.x === p0.x && p1.y === p0.y) throw new IllegalArgumentException('Cannot compute the quadrant for two identical points ' + p0)
  38. if (p1.x >= p0.x)
  39. if (p1.y >= p0.y) return Quadrant.NE; else return Quadrant.SE
  40. else
  41. if (p1.y >= p0.y) return Quadrant.NW; else return Quadrant.SW
  42. }
  43. }
  44. }
  45. Quadrant.NE = 0
  46. Quadrant.NW = 1
  47. Quadrant.SW = 2
  48. Quadrant.SE = 3