3b0b93e1f9502a5040891a2e300a24b8e43fb9d0341e182b881a72243572312736a6c7a663faabbd548836286bfdb1c52ee6769a3834099bfea62600c41eb3 838 B

123456789101112131415161718192021222324252627282930
  1. import * as curve from '../core/curve';
  2. /**
  3. * 三次贝塞尔曲线描边包含判断
  4. */
  5. export function containStroke(
  6. x0: number, y0: number, x1: number, y1: number,
  7. x2: number, y2: number, x3: number, y3: number,
  8. lineWidth: number, x: number, y: number
  9. ): boolean {
  10. if (lineWidth === 0) {
  11. return false;
  12. }
  13. const _l = lineWidth;
  14. // Quick reject
  15. if (
  16. (y > y0 + _l && y > y1 + _l && y > y2 + _l && y > y3 + _l)
  17. || (y < y0 - _l && y < y1 - _l && y < y2 - _l && y < y3 - _l)
  18. || (x > x0 + _l && x > x1 + _l && x > x2 + _l && x > x3 + _l)
  19. || (x < x0 - _l && x < x1 - _l && x < x2 - _l && x < x3 - _l)
  20. ) {
  21. return false;
  22. }
  23. const d = curve.cubicProjectPoint(
  24. x0, y0, x1, y1, x2, y2, x3, y3,
  25. x, y, null
  26. );
  27. return d <= _l / 2;
  28. }