bmh_cesium/public/lib/cesiumjs/CesiumUnminified/Workers/OrientedBoundingBox-5e0b7a7c.js
2025-03-10 07:23:50 +08:00

2 lines
10 KiB
JavaScript

/* 2020-9-22 15:23:25 | 版权所有 军懋国兴 */
define(["exports","./when-cbf8cd21","./Check-35e1a91d","./Math-69007a69","./Cartesian2-43e3a3be","./Transforms-2d1ac5ec","./Plane-46b5436f","./EllipsoidTangentPlane-b5927ee3"],function(a,W,X,j,Z,N,G,Y){"use strict";function A(a,e){this.center=Z.Cartesian3.clone(W.defaultValue(a,Z.Cartesian3.ZERO)),this.halfAxes=N.Matrix3.clone(W.defaultValue(e,N.Matrix3.ZERO))}A.packedLength=Z.Cartesian3.packedLength+N.Matrix3.packedLength,A.pack=function(a,e,t){return X.Check.typeOf.object("value",a),X.Check.defined("array",e),t=W.defaultValue(t,0),Z.Cartesian3.pack(a.center,e,t),N.Matrix3.pack(a.halfAxes,e,t+Z.Cartesian3.packedLength),e},A.unpack=function(a,e,t){return X.Check.defined("array",a),e=W.defaultValue(e,0),W.defined(t)||(t=new A),Z.Cartesian3.unpack(a,e,t.center),N.Matrix3.unpack(a,e+Z.Cartesian3.packedLength,t.halfAxes),t};var T=new Z.Cartesian3,R=new Z.Cartesian3,I=new Z.Cartesian3,D=new Z.Cartesian3,L=new Z.Cartesian3,z=new Z.Cartesian3,S=new N.Matrix3,q={unitary:new N.Matrix3,diagonal:new N.Matrix3};A.fromPoints=function(a,e){if(W.defined(e)||(e=new A),!W.defined(a)||0===a.length)return e.halfAxes=N.Matrix3.ZERO,e.center=Z.Cartesian3.ZERO,e;for(var t=a.length,r=Z.Cartesian3.clone(a[0],T),n=1;n<t;n++)Z.Cartesian3.add(r,a[n],r);var i=1/t;Z.Cartesian3.multiplyByScalar(r,i,r);var s,o=0,d=0,C=0,u=0,c=0,l=0;for(n=0;n<t;n++)o+=(s=Z.Cartesian3.subtract(a[n],r,R)).x*s.x,d+=s.x*s.y,C+=s.x*s.z,u+=s.y*s.y,c+=s.y*s.z,l+=s.z*s.z;o*=i,d*=i,C*=i,u*=i,c*=i,l*=i;var h=S;h[0]=o,h[1]=d,h[2]=C,h[3]=d,h[4]=u,h[5]=c,h[6]=C,h[7]=c,h[8]=l;var f=N.Matrix3.computeEigenDecomposition(h,q),m=N.Matrix3.clone(f.unitary,e.halfAxes),x=N.Matrix3.getColumn(m,0,D),p=N.Matrix3.getColumn(m,1,L),M=N.Matrix3.getColumn(m,2,z),w=-Number.MAX_VALUE,g=-Number.MAX_VALUE,b=-Number.MAX_VALUE,y=Number.MAX_VALUE,v=Number.MAX_VALUE,O=Number.MAX_VALUE;for(n=0;n<t;n++)s=a[n],w=Math.max(Z.Cartesian3.dot(x,s),w),g=Math.max(Z.Cartesian3.dot(p,s),g),b=Math.max(Z.Cartesian3.dot(M,s),b),y=Math.min(Z.Cartesian3.dot(x,s),y),v=Math.min(Z.Cartesian3.dot(p,s),v),O=Math.min(Z.Cartesian3.dot(M,s),O);x=Z.Cartesian3.multiplyByScalar(x,.5*(y+w),x),p=Z.Cartesian3.multiplyByScalar(p,.5*(v+g),p),M=Z.Cartesian3.multiplyByScalar(M,.5*(O+b),M);var E=Z.Cartesian3.add(x,p,e.center);Z.Cartesian3.add(E,M,E);var P=I;return P.x=w-y,P.y=g-v,P.z=b-O,Z.Cartesian3.multiplyByScalar(P,.5,P),N.Matrix3.multiplyByScale(e.halfAxes,P,e.halfAxes),e};var m=new Z.Cartesian3,x=new Z.Cartesian3;function F(a,e,t,r,n,i,s,o,d,C,u){if(!(W.defined(n)&&W.defined(i)&&W.defined(s)&&W.defined(o)&&W.defined(d)&&W.defined(C)))throw new X.DeveloperError("all extents (minimum/maximum X/Y/Z) are required.");W.defined(u)||(u=new A);var c=u.halfAxes;N.Matrix3.setColumn(c,0,e,c),N.Matrix3.setColumn(c,1,t,c),N.Matrix3.setColumn(c,2,r,c),(f=m).x=(n+i)/2,f.y=(s+o)/2,f.z=(d+C)/2;var l=x;l.x=(i-n)/2,l.y=(o-s)/2,l.z=(C-d)/2;var h=u.center,f=N.Matrix3.multiplyByVector(c,f,f);return Z.Cartesian3.add(a,f,h),N.Matrix3.multiplyByScale(c,l,c),u}var H=new Z.Cartographic,J=new Z.Cartesian3,K=new Z.Cartographic,Q=new Z.Cartographic,$=new Z.Cartographic,aa=new Z.Cartographic,ea=new Z.Cartographic,ta=new Z.Cartesian3,ra=new Z.Cartesian3,na=new Z.Cartesian3,ia=new Z.Cartesian3,sa=new Z.Cartesian3,oa=new Z.Cartesian2,da=new Z.Cartesian2,Ca=new Z.Cartesian2,ua=new Z.Cartesian2,ca=new Z.Cartesian2,la=new Z.Cartesian3,ha=new Z.Cartesian3,fa=new Z.Cartesian3,ma=new Z.Cartesian3,xa=new Z.Cartesian2,pa=new Z.Cartesian3,Ma=new Z.Cartesian3,wa=new Z.Cartesian3,ga=new G.Plane(Z.Cartesian3.UNIT_X,0);A.fromRectangle=function(a,e,t,r,n){if(!W.defined(a))throw new X.DeveloperError("rectangle is required");if(a.width<0||a.width>j.CesiumMath.TWO_PI)throw new X.DeveloperError("Rectangle width must be between 0 and 2*pi");if(a.height<0||a.height>j.CesiumMath.PI)throw new X.DeveloperError("Rectangle height must be between 0 and pi");if(W.defined(r)&&!j.CesiumMath.equalsEpsilon(r.radii.x,r.radii.y,j.CesiumMath.EPSILON15))throw new X.DeveloperError("Ellipsoid must be an ellipsoid of revolution (radii.x == radii.y)");if(e=W.defaultValue(e,0),t=W.defaultValue(t,0),r=W.defaultValue(r,Z.Ellipsoid.WGS84),a.width<=j.CesiumMath.PI){var i,s=Z.Rectangle.center(a,H),o=r.cartographicToCartesian(s,J),d=new Y.EllipsoidTangentPlane(o,r),C=d.plane,u=s.longitude,c=a.south<0&&0<a.north?0:s.latitude,l=Z.Cartographic.fromRadians(u,a.north,t,K),h=Z.Cartographic.fromRadians(a.west,a.north,t,Q),f=Z.Cartographic.fromRadians(a.west,c,t,$),m=Z.Cartographic.fromRadians(a.west,a.south,t,aa),x=Z.Cartographic.fromRadians(u,a.south,t,ea),p=r.cartographicToCartesian(l,ta),M=r.cartographicToCartesian(h,ra),w=r.cartographicToCartesian(f,na),g=r.cartographicToCartesian(m,ia),b=r.cartographicToCartesian(x,sa),y=d.projectPointToNearestOnPlane(p,oa),v=d.projectPointToNearestOnPlane(M,da),O=d.projectPointToNearestOnPlane(w,Ca),E=d.projectPointToNearestOnPlane(g,ua),P=d.projectPointToNearestOnPlane(b,ca),N=-(i=Math.min(v.x,O.x,E.x)),A=Math.max(v.y,y.y),T=Math.min(E.y,P.y);return h.height=m.height=e,M=r.cartographicToCartesian(h,ra),g=r.cartographicToCartesian(m,ia),k=Math.min(G.Plane.getPointDistance(C,M),G.Plane.getPointDistance(C,g)),B=t,F(d.origin,d.xAxis,d.yAxis,d.zAxis,i,N,T,A,k,B,n)}var R=0<a.south,I=a.north<0,D=R?a.south:I?a.north:0,L=Z.Rectangle.center(a,H).longitude,z=Z.Cartesian3.fromRadians(L,D,t,r,la);z.z=0;var S=Math.abs(z.x)<j.CesiumMath.EPSILON10&&Math.abs(z.y)<j.CesiumMath.EPSILON10?Z.Cartesian3.UNIT_X:Z.Cartesian3.normalize(z,ha),q=Z.Cartesian3.UNIT_Z,U=Z.Cartesian3.cross(S,q,fa);C=G.Plane.fromPointNormal(z,S,ga);var V=Z.Cartesian3.fromRadians(L+j.CesiumMath.PI_OVER_TWO,D,t,r,ma);i=-(N=Z.Cartesian3.dot(G.Plane.projectPointOntoPlane(C,V,xa),U)),A=Z.Cartesian3.fromRadians(0,a.north,I?e:t,r,pa).z,T=Z.Cartesian3.fromRadians(0,a.south,R?e:t,r,Ma).z;var k,B,_=Z.Cartesian3.fromRadians(a.east,D,t,r,wa);return F(z,U,q,S,i,N,T,A,k=G.Plane.getPointDistance(C,_),B=0,n)},A.clone=function(a,e){if(W.defined(a))return W.defined(e)?(Z.Cartesian3.clone(a.center,e.center),N.Matrix3.clone(a.halfAxes,e.halfAxes),e):new A(a.center,a.halfAxes)},A.intersectPlane=function(a,e){if(!W.defined(a))throw new X.DeveloperError("box is required.");if(!W.defined(e))throw new X.DeveloperError("plane is required.");var t=a.center,r=e.normal,n=a.halfAxes,i=r.x,s=r.y,o=r.z,d=Math.abs(i*n[N.Matrix3.COLUMN0ROW0]+s*n[N.Matrix3.COLUMN0ROW1]+o*n[N.Matrix3.COLUMN0ROW2])+Math.abs(i*n[N.Matrix3.COLUMN1ROW0]+s*n[N.Matrix3.COLUMN1ROW1]+o*n[N.Matrix3.COLUMN1ROW2])+Math.abs(i*n[N.Matrix3.COLUMN2ROW0]+s*n[N.Matrix3.COLUMN2ROW1]+o*n[N.Matrix3.COLUMN2ROW2]),C=Z.Cartesian3.dot(r,t)+e.distance;return C<=-d?N.Intersect.OUTSIDE:d<=C?N.Intersect.INSIDE:N.Intersect.INTERSECTING};var f=new Z.Cartesian3,p=new Z.Cartesian3,M=new Z.Cartesian3,h=new Z.Cartesian3;A.distanceSquaredTo=function(a,e){if(!W.defined(a))throw new X.DeveloperError("box is required.");if(!W.defined(e))throw new X.DeveloperError("cartesian is required.");var t=Z.Cartesian3.subtract(e,a.center,m),r=a.halfAxes,n=N.Matrix3.getColumn(r,0,f),i=N.Matrix3.getColumn(r,1,p),s=N.Matrix3.getColumn(r,2,M),o=Z.Cartesian3.magnitude(n),d=Z.Cartesian3.magnitude(i),C=Z.Cartesian3.magnitude(s);Z.Cartesian3.normalize(n,n),Z.Cartesian3.normalize(i,i),Z.Cartesian3.normalize(s,s);var u=h;u.x=Z.Cartesian3.dot(t,n),u.y=Z.Cartesian3.dot(t,i),u.z=Z.Cartesian3.dot(t,s);var c,l=0;return u.x<-o?l+=(c=u.x+o)*c:u.x>o&&(l+=(c=u.x-o)*c),u.y<-d?l+=(c=u.y+d)*c:u.y>d&&(l+=(c=u.y-d)*c),u.z<-C?l+=(c=u.z+C)*c:u.z>C&&(l+=(c=u.z-C)*c),l};var w=new Z.Cartesian3,g=new Z.Cartesian3;A.computePlaneDistances=function(a,e,t,r){if(!W.defined(a))throw new X.DeveloperError("box is required.");if(!W.defined(e))throw new X.DeveloperError("position is required.");if(!W.defined(t))throw new X.DeveloperError("direction is required.");W.defined(r)||(r=new N.Interval);var n=Number.POSITIVE_INFINITY,i=Number.NEGATIVE_INFINITY,s=a.center,o=a.halfAxes,d=N.Matrix3.getColumn(o,0,f),C=N.Matrix3.getColumn(o,1,p),u=N.Matrix3.getColumn(o,2,M),c=Z.Cartesian3.add(d,C,w);Z.Cartesian3.add(c,u,c),Z.Cartesian3.add(c,s,c);var l=Z.Cartesian3.subtract(c,e,g),h=Z.Cartesian3.dot(t,l),n=Math.min(h,n),i=Math.max(h,i);return Z.Cartesian3.add(s,d,c),Z.Cartesian3.add(c,C,c),Z.Cartesian3.subtract(c,u,c),Z.Cartesian3.subtract(c,e,l),h=Z.Cartesian3.dot(t,l),n=Math.min(h,n),i=Math.max(h,i),Z.Cartesian3.add(s,d,c),Z.Cartesian3.subtract(c,C,c),Z.Cartesian3.add(c,u,c),Z.Cartesian3.subtract(c,e,l),h=Z.Cartesian3.dot(t,l),n=Math.min(h,n),i=Math.max(h,i),Z.Cartesian3.add(s,d,c),Z.Cartesian3.subtract(c,C,c),Z.Cartesian3.subtract(c,u,c),Z.Cartesian3.subtract(c,e,l),h=Z.Cartesian3.dot(t,l),n=Math.min(h,n),i=Math.max(h,i),Z.Cartesian3.subtract(s,d,c),Z.Cartesian3.add(c,C,c),Z.Cartesian3.add(c,u,c),Z.Cartesian3.subtract(c,e,l),h=Z.Cartesian3.dot(t,l),n=Math.min(h,n),i=Math.max(h,i),Z.Cartesian3.subtract(s,d,c),Z.Cartesian3.add(c,C,c),Z.Cartesian3.subtract(c,u,c),Z.Cartesian3.subtract(c,e,l),h=Z.Cartesian3.dot(t,l),n=Math.min(h,n),i=Math.max(h,i),Z.Cartesian3.subtract(s,d,c),Z.Cartesian3.subtract(c,C,c),Z.Cartesian3.add(c,u,c),Z.Cartesian3.subtract(c,e,l),h=Z.Cartesian3.dot(t,l),n=Math.min(h,n),i=Math.max(h,i),Z.Cartesian3.subtract(s,d,c),Z.Cartesian3.subtract(c,C,c),Z.Cartesian3.subtract(c,u,c),Z.Cartesian3.subtract(c,e,l),h=Z.Cartesian3.dot(t,l),n=Math.min(h,n),i=Math.max(h,i),r.start=n,r.stop=i,r};var r=new N.BoundingSphere;A.isOccluded=function(a,e){if(!W.defined(a))throw new X.DeveloperError("box is required.");if(!W.defined(e))throw new X.DeveloperError("occluder is required.");var t=N.BoundingSphere.fromOrientedBoundingBox(a,r);return!e.isBoundingSphereVisible(t)},A.prototype.intersectPlane=function(a){return A.intersectPlane(this,a)},A.prototype.distanceSquaredTo=function(a){return A.distanceSquaredTo(this,a)},A.prototype.computePlaneDistances=function(a,e,t){return A.computePlaneDistances(this,a,e,t)},A.prototype.isOccluded=function(a){return A.isOccluded(this,a)},A.equals=function(a,e){return a===e||W.defined(a)&&W.defined(e)&&Z.Cartesian3.equals(a.center,e.center)&&N.Matrix3.equals(a.halfAxes,e.halfAxes)},A.prototype.clone=function(a){return A.clone(this,a)},A.prototype.equals=function(a){return A.equals(this,a)},a.OrientedBoundingBox=A});