util.ts 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import { max, min } from '@antv/util';
  2. import { BBox } from './types';
  3. /**
  4. * 两点之间的距离
  5. * @param {number} x1 起始点 x
  6. * @param {number} y1 起始点 y
  7. * @param {number} x2 结束点 x
  8. * @param {number} y2 结束点 y
  9. * @return {number} 距离
  10. */
  11. export function distance(x1: number, y1: number, x2: number, y2: number) {
  12. const dx = x1 - x2;
  13. const dy = y1 - y2;
  14. return Math.sqrt(dx * dx + dy * dy);
  15. }
  16. export function isNumberEqual(v1: number, v2: number) {
  17. return Math.abs(v1 - v2) < 0.001;
  18. }
  19. export function getBBoxByArray(xArr: number[], yArr: number[]): BBox {
  20. const minX = min(xArr);
  21. const minY = min(yArr);
  22. const maxX = max(xArr);
  23. const maxY = max(yArr);
  24. return {
  25. x: minX,
  26. y: minY,
  27. width: maxX - minX,
  28. height: maxY - minY,
  29. };
  30. }
  31. export function getBBoxRange(x1: number, y1: number, x2: number, y2: number) {
  32. return {
  33. minX: min([x1, x2]),
  34. maxX: max([x1, x2]),
  35. minY: min([y1, y2]),
  36. maxY: max([y1, y2]),
  37. };
  38. }
  39. export function piMod(angle: number) {
  40. return (angle + Math.PI * 2) % (Math.PI * 2);
  41. }