UNPKG

@arcgis/core

Version:

ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API

6 lines (5 loc) 2.04 kB
/* All material copyright ESRI, All Rights Reserved, unless otherwise specified. See https://js.arcgis.com/4.32/esri/copyright.txt for details. */ import{floatEqualAbsolute as t}from"../../core/mathUtils.js";import{distance as n,dot as r,squaredLength as e,scale as s,subtract as o,add as c,scaleAndAdd as u,copy as i,length as f}from"../../core/libs/gl-matrix-2/math/vec2.js";import{clone as a,create as p}from"../../core/libs/gl-matrix-2/factories/vec2f64.js";function m(t,n){return t[0]*n[1]-t[1]*n[0]}function h(t,r,e){const s=(r[0]-t[0])*(e[1]-t[1])-(r[1]-t[1])*(e[0]-t[0]);return Math.abs(s)/n(r,e)}function E(t,n,o){const c=r(o,n)/e(o);return s(t,o,c)}function I(t,n,r,e,s=r){return o(x,e,r),o(g,n,s),E(A,g,x),c(t,s,A)}function L(t,n,s,c){o(x,c,s),o(g,n,s);const f=r(x,g)/e(x);return f>0?u(t,s,x,f):i(t,s)}function N(t,n,r,e){o(x,n,r);const s=e/f(x);return u(t,r,x,s)}function l(n,r){return I(g,r,n.start,n.end),t(g[0],r[0])&&t(g[1],r[1])?[a(r)]:[]}function y(n,r,e){return N(g,e,n,r),t(g[0],e[0])&&t(g[1],e[1])?[a(e)]:[]}function b(t,n){const r=t.start,e=t.end,s=n.start,c=n.end,i=o(x,e,r),f=o(M,c,s),a=m(i,f);if(Math.abs(a)<=v)return[];const p=o(g,r,s),h=m(f,p)/a,E=m(i,p)/a;if(h>=0){if(E>=0||n.type===j.LINE)return[u(A,r,i,h)]}else if(t.type===j.LINE&&(E>=0||n.type===j.LINE))return[u(A,r,i,h)];return[]}function d(t,n,s){const c=[],i=o(x,t.end,t.start),f=o(M,t.start,n),a=e(i),p=2*r(i,f),m=p*p-4*a*(e(f)-s*s);if(0===m){const n=-p/(2*a);(t.type===j.LINE||n>=0)&&c.push(u(A,t.start,i,n))}else if(m>0){const n=Math.sqrt(m),r=(-p+n)/(2*a);(t.type===j.LINE||r>=0)&&c.push(u(A,t.start,i,r));const e=(-p-n)/(2*a);(t.type===j.LINE||e>=0)&&c.push(u(g,t.start,i,e))}return c}var j;!function(t){t[t.RAY=0]="RAY",t[t.LINE=1]="LINE"}(j||(j={}));const v=1e-6,x=p(),M=p(),g=p(),A=p();export{j as LineType,m as cross,y as intersectCircleAndPoint,l as intersectLineAndPoint,b as intersectLineAndRay,d as intersectLineLikeAndCircle,h as pointToLineDistance,E as projectPoint,N as projectPointToCircle,I as projectPointToLine,L as projectPointToRay};