SPolygonUtil.js 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.SPolygonUtil = void 0;
  4. var SPolygonUtil = (function () {
  5. function SPolygonUtil() {
  6. }
  7. SPolygonUtil.pointIn = function (x, y, pointList) {
  8. var crossNum = 0;
  9. for (var i = 0; i < pointList.length; i++) {
  10. var p1 = pointList[i];
  11. var p2 = pointList[(i + 1) % pointList.length];
  12. if (p1.y == p2.y) {
  13. continue;
  14. }
  15. if (y < Math.min(p1.y, p2.y) || y >= Math.max(p1.y, p2.y)) {
  16. continue;
  17. }
  18. var x0 = ((y - p1.y) * (p2.x - p1.x)) / (p2.y - p1.y) + p1.x;
  19. if (x0 > x) {
  20. crossNum++;
  21. }
  22. }
  23. return crossNum % 2 == 1;
  24. };
  25. SPolygonUtil.clockDir = function (pointList) {
  26. if (pointList.length < 3) {
  27. return 0;
  28. }
  29. var index = 0;
  30. var len = pointList.length;
  31. for (var i = 1; i < len; i++) {
  32. if (pointList[i].x > pointList[index].x) {
  33. index = i;
  34. }
  35. }
  36. var p1 = pointList[index == 0 ? len - 1 : index - 1];
  37. var p2 = pointList[index];
  38. var p3 = pointList[(index + 1) % len];
  39. return (p2.x - p1.x) * (p3.y - p2.y) - (p2.y - p1.y) * (p3.x - p2.x);
  40. };
  41. return SPolygonUtil;
  42. }());
  43. exports.SPolygonUtil = SPolygonUtil;