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.33/esri/copyright.txt for details. */ import{floatEqualAbsolute as t}from"../../core/mathUtils.js";import{subtract as n,scaleAndAdd as r,add as e,length as s,dot as o,squaredLength as c,scale as u,distance as i,copy as f}from"../../core/libs/gl-matrix-2/math/vec2.js";import{create as a,clone 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,n,r){const e=(n[0]-t[0])*(r[1]-t[1])-(n[1]-t[1])*(r[0]-t[0]);return Math.abs(e)/i(n,r)}function E(t,n,r){const e=o(r,n)/c(r);return u(t,r,e)}function I(t,r,s,o,c=s){return n(x,o,s),n(g,r,c),E(A,g,x),e(t,c,A)}function L(t,e,s,u){n(x,u,s),n(g,e,s);const i=o(x,g)/c(x);return i>0?r(t,s,x,i):f(t,s)}function N(t,e,o,c){n(x,e,o);const u=c/s(x);return r(t,o,x,u)}function l(n,r){return I(g,r,n.start,n.end),t(g[0],r[0])&&t(g[1],r[1])?[p(r)]:[]}function y(n,r,e){return N(g,e,n,r),t(g[0],e[0])&&t(g[1],e[1])?[p(e)]:[]}function b(t,e){const s=t.start,o=t.end,c=e.start,u=e.end,i=n(x,o,s),f=n(M,u,c),a=m(i,f);if(Math.abs(a)<=v)return[];const p=n(g,s,c),h=m(f,p)/a,E=m(i,p)/a;if(h>=0){if(E>=0||e.type===j.LINE)return[r(A,s,i,h)]}else if(t.type===j.LINE&&(E>=0||e.type===j.LINE))return[r(A,s,i,h)];return[]}function d(t,e,s){const u=[],i=n(x,t.end,t.start),f=n(M,t.start,e),a=c(i),p=2*o(i,f),m=p*p-4*a*(c(f)-s*s);if(0===m){const n=-p/(2*a);(t.type===j.LINE||n>=0)&&u.push(r(A,t.start,i,n))}else if(m>0){const n=Math.sqrt(m),e=(-p+n)/(2*a);(t.type===j.LINE||e>=0)&&u.push(r(A,t.start,i,e));const s=(-p-n)/(2*a);(t.type===j.LINE||s>=0)&&u.push(r(g,t.start,i,s))}return u}var j;!function(t){t[t.RAY=0]="RAY",t[t.LINE=1]="LINE"}(j||(j={}));const v=1e-6,x=a(),M=a(),g=a(),A=a();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};