@antv/g-math
Version:
Geometry util
11 lines (10 loc) • 9.65 kB
JavaScript
/*!
* @antv/g-math
* @description Geometry util
* @version 3.1.0
* @date 12/22/2025, 3:02:36 AM
* @author AntVis
* @docs https://g.antv.antgroup.com/
*/
!function(n,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t(((n="undefined"!=typeof globalThis?globalThis:n||self).G=n.G||{},n.G.Math={}))}(this,function(n){"use strict";function t(n,t){(null==t||t>n.length)&&(t=n.length);for(var r=0,a=Array(t);t>r;r++)a[r]=n[r];return a}function r(n,r){if(n){if("string"==typeof n)return t(n,r);var a={}.toString.call(n).slice(8,-1);return"Object"===a&&n.constructor&&(a=n.constructor.name),"Map"===a||"Set"===a?Array.from(n):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?t(n,r):void 0}}function a(n,t){return function(n){if(Array.isArray(n))return n}(n)||function(n,t){var r=null==n?null:"undefined"!=typeof Symbol&&n[Symbol.iterator]||n["@@iterator"];if(null!=r){var a,e,o,u,i=[],c=!0,f=!1;try{if(o=(r=r.call(n)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(a=o.call(r)).done)&&(i.push(a.value),i.length!==t);c=!0);}catch(n){f=!0,e=n}finally{try{if(!c&&null!=r.return&&(u=r.return(),Object(u)!==u))return}finally{if(f)throw e}}return i}}(n,t)||r(n,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function e(n){return function(n){if(Array.isArray(n))return t(n)}(n)||function(n){if("undefined"!=typeof Symbol&&null!=n[Symbol.iterator]||null!=n["@@iterator"])return Array.from(n)}(n)||r(n)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function o(n,t,r,a){var e=n-r,o=t-a;return Math.sqrt(e*e+o*o)}function u(n,t){var r=Math.min.apply(Math,e(n)),a=Math.min.apply(Math,e(t));return{x:r,y:a,width:Math.max.apply(Math,e(n))-r,height:Math.max.apply(Math,e(t))-a}}function i(n){return(n+2*Math.PI)%(2*Math.PI)}function c(n,t){var r=Math.abs(n);return t>0?r:-1*r}function f(n,t,r,a,e,o){return r*Math.cos(e)*Math.cos(o)-a*Math.sin(e)*Math.sin(o)+n}function h(n,t,r,a,e,o){return r*Math.sin(e)*Math.cos(o)+a*Math.cos(e)*Math.sin(o)+t}function l(n,t,r){return{x:n*Math.cos(r),y:t*Math.sin(r)}}function s(n,t,r){var a=Math.cos(r),e=Math.sin(r);return[n*a-t*e,n*e+t*a]}function y(n,t,r){return void 0===r&&(r=1e-5),n===t||r>Math.abs(n-t)}var v,p="undefined"!=typeof Float32Array?Float32Array:Array;v=new p(2),p!=Float32Array&&(v[0]=0,v[1]=0);function M(n,t,r,a,u,i){var c=-1,f=1/0,h=[r,a],l=20;i&&i>200&&(l=i/10);for(var s=1/l,y=s/10,v=0;l>=v;v++){var p=v*s,M=[u.apply(void 0,e(n.concat([p]))),u.apply(void 0,e(t.concat([p])))],g=o(h[0],h[1],M[0],M[1]);f>g&&(c=p,f=g)}if(0===c)return{x:n[0],y:t[0]};if(1===c){var d=n.length;return{x:n[d-1],y:t[d-1]}}f=1/0;for(var x=0;32>x&&1e-4<=y;x++){var b=c-y,m=c+y,P=[u.apply(void 0,e(n.concat([b]))),u.apply(void 0,e(t.concat([b])))],A=o(h[0],h[1],P[0],P[1]);if(b>=0&&f>A)c=b,f=A;else{var I=[u.apply(void 0,e(n.concat([m]))),u.apply(void 0,e(t.concat([m])))],w=o(h[0],h[1],I[0],I[1]);1>=m&&f>w?(c=m,f=w):y*=.5}}return{x:u.apply(void 0,e(n.concat([c]))),y:u.apply(void 0,e(t.concat([c])))}}function g(n,t,r,a,e){return{x:(1-e)*n+e*r,y:(1-e)*t+e*a}}function d(n,t,r,a,e,u){var i=(r-n)*(e-n)+(a-t)*(u-t);return 0>i?o(n,t,e,u):i>(r-n)*(r-n)+(a-t)*(a-t)?o(r,a,e,u):x(n,t,r,a,e,u)}function x(n,t,r,a,e,o){var u=[r-n,a-t];if(function(n,t){return n[0]===t[0]&&n[1]===t[1]}(u,[0,0]))return Math.sqrt((e-n)*(e-n)+(o-t)*(o-t));var i=[-u[1],u[0]];return function(n,t){var r=t[0],a=t[1],e=r*r+a*a;e>0&&(e=1/Math.sqrt(e)),n[0]=t[0]*e,n[1]=t[1]*e}(i,i),Math.abs(function(n,t){return n[0]*t[0]+n[1]*t[1]}([e-n,o-t],i))}function b(n,t,r,a,e){var o=1-e;return o*o*o*n+3*t*e*o*o+3*r*e*e*o+a*e*e*e}function m(n,t,r,a,e){var o=1-e;return 3*(o*o*(t-n)+2*o*e*(r-t)+e*e*(a-r))}function P(n,t,r,a){var e,o,u,i=-3*n+9*t-9*r+3*a,c=6*n-12*t+6*r,f=3*t-3*n,h=[];if(y(i,0))y(c,0)||0>(e=-f/c)||e>1||h.push(e);else{var l=c*c-4*i*f;y(l,0)?h.push(-c/(2*i)):l>0&&(o=(-c-(u=Math.sqrt(l)))/(2*i),0>(e=(-c+u)/(2*i))||e>1||h.push(e),0>o||o>1||h.push(o))}return h}function A(n,t,r,a,u,i,c,f,h){if(0===h)return function(n,t){for(var r=0,a=n.length,e=0;a>e;e++)r+=o(n[e],t[e],n[(e+1)%a],t[(e+1)%a]);return r/2}([n,r,u,c],[t,a,i,f]);var l=function(n,t,r,a,e,o,u,i,c){var f=b(n,r,e,u,c),h=b(t,a,o,i,c),l=g(n,t,r,a,c),s=g(r,a,e,o,c),y=g(e,o,u,i,c),v=g(l.x,l.y,s.x,s.y,c),p=g(s.x,s.y,y.x,y.y,c);return[[n,t,l.x,l.y,v.x,v.y,f,h],[f,h,p.x,p.y,y.x,y.y,u,i]]}(n,t,r,a,u,i,c,f,.5),s=[].concat(e(l[0]),[h-1]),y=[].concat(e(l[1]),[h-1]);return A.apply(void 0,e(s))+A.apply(void 0,e(y))}function I(n,t,r,a,e,o,u,i,c,f,h){return M([n,r,e,u],[t,a,o,i],c,f,b,h)}function w(n){for(var t=0,r=[],a=0;n.length-1>a;a++){var e=n[a],u=n[a+1],i=o(e[0],e[1],u[0],u[1]);r.push({from:e,to:u,length:i}),t+=i}return{segments:r,totalLength:t}}function T(n){if(2>n.length)return 0;for(var t=0,r=0;n.length-1>r;r++){var a=n[r],e=n[r+1];t+=o(a[0],a[1],e[0],e[1])}return t}function q(n,t){if(t>1||0>t||2>n.length)return null;var r=w(n),a=r.segments,e=r.totalLength;if(0===e)return{x:n[0][0],y:n[0][1]};for(var o=0,u=null,i=0;a.length>i;i++){var c=a[i],f=c.from,h=c.to,l=c.length/e;if(t>=o&&o+l>=t){u=g(f[0],f[1],h[0],h[1],(t-o)/l);break}o+=l}return u}function L(n,t){if(t>1||0>t||2>n.length)return 0;for(var r=w(n),a=r.segments,e=r.totalLength,o=0,u=0,i=0;a.length>i;i++){var c=a[i],f=c.from,h=c.to,l=c.length/e;if(t>=o&&o+l>=t){u=Math.atan2(h[1]-f[1],h[0]-f[0]);break}o+=l}return u}function S(n,t,r){for(var a=1/0,e=0;n.length-1>e;e++){var o=n[e],u=n[e+1],i=d(o[0],o[1],u[0],u[1],t,r);a>i&&(a=i)}return a}function j(n){for(var t=[],r=[],a=0;n.length>a;a++){var e=n[a];t.push(e[0]),r.push(e[1])}return u(t,r)}function B(n){var t=n.slice(0);return n.length&&t.push(n[0]),t}function D(n,t,r,a){var e=1-a;return e*e*n+2*a*e*t+a*a*r}function F(n,t,r){var a=n+r-2*t;if(y(a,0))return[.5];var e=(n-t)/a;return e>1||0>e?[]:[e]}function G(n,t,r,a,u,i,c){if(0===c)return(o(n,t,r,a)+o(r,a,u,i)+o(n,t,u,i))/2;var f=function(n,t,r,a,e,o,u){var i=D(n,r,e,u),c=D(t,a,o,u),f=g(n,t,r,a,u),h=g(r,a,e,o,u);return[[n,t,f.x,f.y,i,c],[i,c,h.x,h.y,e,o]]}(n,t,r,a,u,i,.5),h=f[0],l=f[1];return h.push(c-1),l.push(c-1),G.apply(void 0,e(h))+G.apply(void 0,e(l))}function N(n,t,r,a,e,o,u,i){return M([n,r,e],[t,a,o],u,i,D)}n.arcBox=function(n,t,r,a,e,o,u){for(var i=function(n,t,r){return Math.atan(-t/n*Math.tan(r))}(r,a,e),c=1/0,l=-1/0,s=[o,u],y=2*-Math.PI;2*Math.PI>=y;y+=Math.PI){var v=i+y;u>o?v>o&&u>v&&s.push(v):v>u&&o>v&&s.push(v)}for(var p=0;s.length>p;p++){var M=f(n,0,r,a,e,s[p]);c>M&&(c=M),M>l&&(l=M)}for(var g=function(n,t,r){return Math.atan(t/(n*Math.tan(r)))}(r,a,e),d=1/0,x=-1/0,b=[o,u],m=2*-Math.PI;2*Math.PI>=m;m+=Math.PI){var P=g+m;u>o?P>o&&u>P&&b.push(P):P>u&&o>P&&b.push(P)}for(var A=0;b.length>A;A++){var I=h(0,t,r,a,e,b[A]);d>I&&(d=I),I>x&&(x=I)}return{x:c,y:d,width:l-c,height:x-d}},n.arcNearestPoint=function(n,t,r,e,o,u,i,f,h){var y=a(s(f-n,h-t,-o),2),v=function(n,t,r,a,e,o){var u=r,i=a;if(0===u||0===i)return{x:n,y:t};for(var f=e-n,h=o-t,l=Math.abs(f),s=Math.abs(h),y=u*u,v=i*i,p=Math.PI/4,M=0,g=0,d=0;4>d;d++){M=u*Math.cos(p),g=i*Math.sin(p);var x=(y-v)*Math.pow(Math.cos(p),3)/u,b=(v-y)*Math.pow(Math.sin(p),3)/i,m=M-x,P=g-b,A=l-x,I=s-b,w=Math.hypot(P,m),T=Math.hypot(I,A);p=Math.min(Math.PI/2,Math.max(0,p+=w*Math.asin((m*I-P*A)/(w*T))/Math.sqrt(y+v-M*M-g*g)))}return{x:n+c(M,f),y:t+c(g,h)}}(0,0,r,e,y[0],y[1]),p=function(n,t,r,a){return(Math.atan2(a*n,r*t)+2*Math.PI)%(2*Math.PI)}(r,e,v.x,v.y);u>p?v=l(r,e,u):p>i&&(v=l(r,e,i));var M=s(v.x,v.y,o);return{x:M[0]+n,y:M[1]+t}},n.arcTangentAngle=function(n,t,r,a,e,o,u,c){var f=(u-o)*c+o,h=function(n,t,r,a,e,o,u,i){return-1*r*Math.cos(e)*Math.sin(i)-a*Math.sin(e)*Math.cos(i)}(0,0,r,a,e,0,0,f),l=function(n,t,r,a,e,o,u,i){return-1*r*Math.sin(e)*Math.sin(i)+a*Math.cos(e)*Math.cos(i)}(0,0,r,a,e,0,0,f);return i(Math.atan2(l,h))},n.cubicBox=function(n,t,r,a,e,o,i,c){for(var f=[n,i],h=[t,c],l=P(n,r,e,i),s=P(t,a,o,c),y=0;l.length>y;y++)f.push(b(n,r,e,i,l[y]));for(var v=0;s.length>v;v++)h.push(b(t,a,o,c,s[v]));return u(f,h)},n.cubicLength=function(n,t,r,a,e,o,u,i){return A(n,t,r,a,e,o,u,i,3)},n.cubicNearestPoint=I,n.cubicPointAt=function(n,t,r,a,e,o,u,i,c){return{x:b(n,r,e,u,c),y:b(t,a,o,i,c)}},n.cubicPointDistance=function(n,t,r,a,e,u,i,c,f,h,l){var s=I(n,t,r,a,e,u,i,c,f,h,l);return o(s.x,s.y,f,h)},n.cubicTangentAngle=function(n,t,r,a,e,o,u,c,f){var h=m(n,r,e,u,f),l=m(t,a,o,c,f);return i(Math.atan2(l,h))},n.distance=o,n.lineBox=function(n,t,r,a){return u([n,r],[t,a])},n.lineLength=function(n,t,r,a){return o(n,t,r,a)},n.linePointAt=g,n.linePointDistance=d,n.linePointToLine=x,n.lineTangentAngle=function(n,t,r,a){return Math.atan2(a-t,r-n)},n.polygonBox=function(n){return j(n)},n.polygonLength=function(n){return T(B(n))},n.polygonPointAt=function(n,t){return q(B(n),t)},n.polygonPointDistance=function(n,t,r){return S(B(n),t,r)},n.polygonTangentAngle=function(n,t){return L(B(n),t)},n.polylineBox=j,n.polylineLength=function(n){return T(n)},n.polylinePointAt=function(n,t){return q(n,t)},n.polylinePointDistance=function(n,t,r){return S(n,t,r)},n.polylineTangentAngle=function(n,t){return L(n,t)},n.quadBox=function(n,t,r,a,e,o){var i=F(n,r,e)[0],c=F(t,a,o)[0],f=[n,e],h=[t,o];return void 0!==i&&f.push(D(n,r,e,i)),void 0!==c&&h.push(D(t,a,o,c)),u(f,h)},n.quadLength=function(n,t,r,a,e,o){return G(n,t,r,a,e,o,3)},n.quadNearestPoint=N,n.quadPointDistance=function(n,t,r,a,e,u,i,c){var f=N(n,t,r,a,e,u,i,c);return o(f.x,f.y,i,c)}});
//# sourceMappingURL=index.umd.min.js.map