atr-components 0.2.228 → 0.2.229

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -210,6 +210,57 @@ class ToolsUtil {
210
210
  static httpSucces(res) {
211
211
  return ['200', '201'].some(v => res.status == v);
212
212
  }
213
+ /**
214
+ *判断点是否在坐标区域内
215
+ * @param p 判定的点
216
+ * @param pointsArr
217
+ */
218
+ static judgeInRec(p, pointsArr) {
219
+ let px = p.x1, py = p.y1, flag = false, //穿越边框
220
+ inRect = false; //是否在多边形的边或者端点上
221
+ let start = pointsArr[0];
222
+ let end = pointsArr[pointsArr.length - 1];
223
+ //如果数组首尾没有相连,手动添加
224
+ pointsArr = start.x1 != end.x1 || start.y1 != start.y1 ? pointsArr.concat(start) : pointsArr;
225
+ //射线选取Y坐标不变,x正方向
226
+ pointsArr.forEach((item, index) => {
227
+ if (index == pointsArr.length - 1
228
+ || inRect //在多边形的边或者端点上视为在区域内
229
+ ) {
230
+ return;
231
+ }
232
+ let endPoint = pointsArr[index + 1];
233
+ const startX = item.x1, startY = item.y1, endX = endPoint.x1, endY = endPoint.y1;
234
+ //判断点是否在端点上
235
+ if ((px == startX && py == startY)
236
+ || (px == endX && px == endY)) {
237
+ inRect = true;
238
+ return;
239
+ }
240
+ //判断射线重合并且点在边上
241
+ if ((startY == endY)
242
+ && ((px > endX && px < startX
243
+ || (px < endX && px > startX)))) {
244
+ inRect = true;
245
+ return;
246
+ }
247
+ if ((startY < py && endY >= py)
248
+ || (startY >= py && endY < py)) {
249
+ //求射线与线段交点的x坐标,y坐标还是py
250
+ let x = startX + (py - startY) * (endX - startX) / (endY - startY);
251
+ //点在边上
252
+ if (x == px) {
253
+ inRect = true;
254
+ return;
255
+ }
256
+ //x大于px来保证射线朝右
257
+ if (x > px) {
258
+ flag = !flag;
259
+ }
260
+ }
261
+ });
262
+ return inRect || flag;
263
+ }
213
264
  static diffInput(chng, action) {
214
265
  if (chng === undefined)
215
266
  return;