You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
cesium/Cesium/Workers/OrientedBoundingBox-18b4901...

2 lines
8.6 KiB
JavaScript

define(["exports","./Transforms-a73b3b3b","./Cartesian2-8417ca3d","./Check-d18af7c4","./when-208fe5b0","./EllipsoidTangentPlane-9123a53b","./Math-4e53b694","./Plane-4aa8974d"],function(a,O,P,t,N,g,w,y){"use strict";function A(a,t){this.center=P.Cartesian3.clone(N.defaultValue(a,P.Cartesian3.ZERO)),this.halfAxes=O.Matrix3.clone(N.defaultValue(t,O.Matrix3.ZERO))}A.packedLength=P.Cartesian3.packedLength+O.Matrix3.packedLength,A.pack=function(a,t,e){return e=N.defaultValue(e,0),P.Cartesian3.pack(a.center,t,e),O.Matrix3.pack(a.halfAxes,t,e+P.Cartesian3.packedLength),t},A.unpack=function(a,t,e){return t=N.defaultValue(t,0),N.defined(e)||(e=new A),P.Cartesian3.unpack(a,t,e.center),O.Matrix3.unpack(a,t+P.Cartesian3.packedLength,e.halfAxes),e};var T=new P.Cartesian3,R=new P.Cartesian3,I=new P.Cartesian3,E=new P.Cartesian3,L=new P.Cartesian3,z=new P.Cartesian3,S=new O.Matrix3,U={unitary:new O.Matrix3,diagonal:new O.Matrix3};A.fromPoints=function(a,t){if(N.defined(t)||(t=new A),!N.defined(a)||0===a.length)return t.halfAxes=O.Matrix3.ZERO,t.center=P.Cartesian3.ZERO,t;for(var e=a.length,n=P.Cartesian3.clone(a[0],T),r=1;r<e;r++)P.Cartesian3.add(n,a[r],n);var i=1/e;P.Cartesian3.multiplyByScalar(n,i,n);var s,o=0,C=0,c=0,u=0,l=0,d=0;for(r=0;r<e;r++)o+=(s=P.Cartesian3.subtract(a[r],n,R)).x*s.x,C+=s.x*s.y,c+=s.x*s.z,u+=s.y*s.y,l+=s.y*s.z,d+=s.z*s.z;C*=i,c*=i,u*=i,l*=i,d*=i;var h=S;h[0]=o*=i,h[1]=C,h[2]=c,h[3]=C,h[4]=u,h[5]=l,h[6]=c,h[7]=l,h[8]=d;var h=O.Matrix3.computeEigenDecomposition(h,U),h=O.Matrix3.clone(h.unitary,t.halfAxes),x=O.Matrix3.getColumn(h,0,E),M=O.Matrix3.getColumn(h,1,L),m=O.Matrix3.getColumn(h,2,z),f=-Number.MAX_VALUE,p=-Number.MAX_VALUE,g=-Number.MAX_VALUE,w=Number.MAX_VALUE,y=Number.MAX_VALUE,b=Number.MAX_VALUE;for(r=0;r<e;r++)s=a[r],f=Math.max(P.Cartesian3.dot(x,s),f),p=Math.max(P.Cartesian3.dot(M,s),p),g=Math.max(P.Cartesian3.dot(m,s),g),w=Math.min(P.Cartesian3.dot(x,s),w),y=Math.min(P.Cartesian3.dot(M,s),y),b=Math.min(P.Cartesian3.dot(m,s),b);x=P.Cartesian3.multiplyByScalar(x,.5*(w+f),x),M=P.Cartesian3.multiplyByScalar(M,.5*(y+p),M),m=P.Cartesian3.multiplyByScalar(m,.5*(b+g),m),h=P.Cartesian3.add(x,M,t.center);P.Cartesian3.add(h,m,h);h=I;return h.x=f-w,h.y=p-y,h.z=g-b,P.Cartesian3.multiplyByScalar(h,.5,h),O.Matrix3.multiplyByScale(t.halfAxes,h,t.halfAxes),t};var d=new P.Cartesian3,h=new P.Cartesian3;function b(a,t,e,n,r,i,s,o,C,c,u){var l=(u=!N.defined(u)?new A:u).halfAxes;O.Matrix3.setColumn(l,0,t,l),O.Matrix3.setColumn(l,1,e,l),O.Matrix3.setColumn(l,2,n,l),(e=d).x=(r+i)/2,e.y=(s+o)/2,e.z=(C+c)/2;n=h;n.x=(i-r)/2,n.y=(o-s)/2,n.z=(c-C)/2;C=u.center,e=O.Matrix3.multiplyByVector(l,e,e);return P.Cartesian3.add(a,e,C),O.Matrix3.multiplyByScale(l,n,l),u}var v=new P.Cartographic,V=new P.Cartesian3,B=new P.Cartographic,_=new P.Cartographic,k=new P.Cartographic,W=new P.Cartographic,D=new P.Cartographic,q=new P.Cartesian3,X=new P.Cartesian3,j=new P.Cartesian3,Z=new P.Cartesian3,G=new P.Cartesian3,F=new P.Cartesian2,Y=new P.Cartesian2,H=new P.Cartesian2,J=new P.Cartesian2,K=new P.Cartesian2,Q=new P.Cartesian3,$=new P.Cartesian3,aa=new P.Cartesian3,ta=new P.Cartesian3,ea=new P.Cartesian2,na=new P.Cartesian3,ra=new P.Cartesian3,ia=new P.Cartesian3,sa=new y.Plane(P.Cartesian3.UNIT_X,0);A.fromRectangle=function(a,t,e,n,r){if(t=N.defaultValue(t,0),e=N.defaultValue(e,0),n=N.defaultValue(n,P.Ellipsoid.WGS84),a.width<=w.CesiumMath.PI){var i=P.Rectangle.center(a,v),s=n.cartographicToCartesian(i,V),o=new g.EllipsoidTangentPlane(s,n),C=o.plane,c=i.longitude,u=a.south<0&&0<a.north?0:i.latitude,l=P.Cartographic.fromRadians(c,a.north,e,B),d=P.Cartographic.fromRadians(a.west,a.north,e,_),h=P.Cartographic.fromRadians(a.west,u,e,k),x=P.Cartographic.fromRadians(a.west,a.south,e,W),M=P.Cartographic.fromRadians(c,a.south,e,D),m=n.cartographicToCartesian(l,q),f=n.cartographicToCartesian(d,X),p=n.cartographicToCartesian(h,j),s=n.cartographicToCartesian(x,Z),i=n.cartographicToCartesian(M,G),u=o.projectPointToNearestOnPlane(m,F),c=o.projectPointToNearestOnPlane(f,Y),l=o.projectPointToNearestOnPlane(p,H),h=o.projectPointToNearestOnPlane(s,J),M=o.projectPointToNearestOnPlane(i,K),p=-(m=Math.min(c.x,l.x,h.x)),i=Math.max(c.y,u.y),l=Math.min(h.y,M.y);return d.height=x.height=t,f=n.cartographicToCartesian(d,X),s=n.cartographicToCartesian(x,Z),c=Math.min(y.Plane.getPointDistance(C,f),y.Plane.getPointDistance(C,s)),b(o.origin,o.xAxis,o.yAxis,o.zAxis,m,p,l,i,c,e,r)}u=0<a.south,h=a.north<0,M=u?a.south:h?a.north:0,d=P.Rectangle.center(a,v).longitude,x=P.Cartesian3.fromRadians(d,M,e,n,Q);x.z=0;f=Math.abs(x.x)<w.CesiumMath.EPSILON10&&Math.abs(x.y)<w.CesiumMath.EPSILON10?P.Cartesian3.UNIT_X:P.Cartesian3.normalize(x,$),s=P.Cartesian3.UNIT_Z,o=P.Cartesian3.cross(f,s,aa);C=y.Plane.fromPointNormal(x,f,sa);d=P.Cartesian3.fromRadians(d+w.CesiumMath.PI_OVER_TWO,M,e,n,ta);m=-(p=P.Cartesian3.dot(y.Plane.projectPointOntoPlane(C,d,ea),o)),i=P.Cartesian3.fromRadians(0,a.north,h?t:e,n,na).z,l=P.Cartesian3.fromRadians(0,a.south,u?t:e,n,ra).z;n=P.Cartesian3.fromRadians(a.east,M,e,n,ia);return b(x,o,s,f,m,p,l,i,c=y.Plane.getPointDistance(C,n),0,r)},A.clone=function(a,t){if(N.defined(a))return N.defined(t)?(P.Cartesian3.clone(a.center,t.center),O.Matrix3.clone(a.halfAxes,t.halfAxes),t):new A(a.center,a.halfAxes)},A.intersectPlane=function(a,t){var e=a.center,n=t.normal,r=a.halfAxes,i=n.x,s=n.y,a=n.z,r=Math.abs(i*r[O.Matrix3.COLUMN0ROW0]+s*r[O.Matrix3.COLUMN0ROW1]+a*r[O.Matrix3.COLUMN0ROW2])+Math.abs(i*r[O.Matrix3.COLUMN1ROW0]+s*r[O.Matrix3.COLUMN1ROW1]+a*r[O.Matrix3.COLUMN1ROW2])+Math.abs(i*r[O.Matrix3.COLUMN2ROW0]+s*r[O.Matrix3.COLUMN2ROW1]+a*r[O.Matrix3.COLUMN2ROW2]),t=P.Cartesian3.dot(n,e)+t.distance;return t<=-r?O.Intersect.OUTSIDE:r<=t?O.Intersect.INSIDE:O.Intersect.INTERSECTING};var x=new P.Cartesian3,M=new P.Cartesian3,m=new P.Cartesian3,c=new P.Cartesian3;A.distanceSquaredTo=function(a,t){var e=P.Cartesian3.subtract(t,a.center,d),n=a.halfAxes,r=O.Matrix3.getColumn(n,0,x),i=O.Matrix3.getColumn(n,1,M),s=O.Matrix3.getColumn(n,2,m),o=P.Cartesian3.magnitude(r),t=P.Cartesian3.magnitude(i),a=P.Cartesian3.magnitude(s);P.Cartesian3.normalize(r,r),P.Cartesian3.normalize(i,i),P.Cartesian3.normalize(s,s);n=c;n.x=P.Cartesian3.dot(e,r),n.y=P.Cartesian3.dot(e,i),n.z=P.Cartesian3.dot(e,s);var C,s=0;return n.x<-o?s+=(C=n.x+o)*C:n.x>o&&(s+=(C=n.x-o)*C),n.y<-t?s+=(C=n.y+t)*C:n.y>t&&(s+=(C=n.y-t)*C),n.z<-a?s+=(C=n.z+a)*C:n.z>a&&(s+=(C=n.z-a)*C),s};var f=new P.Cartesian3,p=new P.Cartesian3;A.computePlaneDistances=function(a,t,e,n){N.defined(n)||(n=new O.Interval);var r=Number.POSITIVE_INFINITY,i=Number.NEGATIVE_INFINITY,s=a.center,o=a.halfAxes,C=O.Matrix3.getColumn(o,0,x),c=O.Matrix3.getColumn(o,1,M),u=O.Matrix3.getColumn(o,2,m),l=P.Cartesian3.add(C,c,f);P.Cartesian3.add(l,u,l),P.Cartesian3.add(l,s,l);a=P.Cartesian3.subtract(l,t,p),o=P.Cartesian3.dot(e,a),r=Math.min(o,r),i=Math.max(o,i);return P.Cartesian3.add(s,C,l),P.Cartesian3.add(l,c,l),P.Cartesian3.subtract(l,u,l),P.Cartesian3.subtract(l,t,a),o=P.Cartesian3.dot(e,a),r=Math.min(o,r),i=Math.max(o,i),P.Cartesian3.add(s,C,l),P.Cartesian3.subtract(l,c,l),P.Cartesian3.add(l,u,l),P.Cartesian3.subtract(l,t,a),o=P.Cartesian3.dot(e,a),r=Math.min(o,r),i=Math.max(o,i),P.Cartesian3.add(s,C,l),P.Cartesian3.subtract(l,c,l),P.Cartesian3.subtract(l,u,l),P.Cartesian3.subtract(l,t,a),o=P.Cartesian3.dot(e,a),r=Math.min(o,r),i=Math.max(o,i),P.Cartesian3.subtract(s,C,l),P.Cartesian3.add(l,c,l),P.Cartesian3.add(l,u,l),P.Cartesian3.subtract(l,t,a),o=P.Cartesian3.dot(e,a),r=Math.min(o,r),i=Math.max(o,i),P.Cartesian3.subtract(s,C,l),P.Cartesian3.add(l,c,l),P.Cartesian3.subtract(l,u,l),P.Cartesian3.subtract(l,t,a),o=P.Cartesian3.dot(e,a),r=Math.min(o,r),i=Math.max(o,i),P.Cartesian3.subtract(s,C,l),P.Cartesian3.subtract(l,c,l),P.Cartesian3.add(l,u,l),P.Cartesian3.subtract(l,t,a),o=P.Cartesian3.dot(e,a),r=Math.min(o,r),i=Math.max(o,i),P.Cartesian3.subtract(s,C,l),P.Cartesian3.subtract(l,c,l),P.Cartesian3.subtract(l,u,l),P.Cartesian3.subtract(l,t,a),o=P.Cartesian3.dot(e,a),r=Math.min(o,r),i=Math.max(o,i),n.start=r,n.stop=i,n};var e=new O.BoundingSphere;A.isOccluded=function(a,t){a=O.BoundingSphere.fromOrientedBoundingBox(a,e);return!t.isBoundingSphereVisible(a)},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,t,e){return A.computePlaneDistances(this,a,t,e)},A.prototype.isOccluded=function(a){return A.isOccluded(this,a)},A.equals=function(a,t){return a===t||N.defined(a)&&N.defined(t)&&P.Cartesian3.equals(a.center,t.center)&&O.Matrix3.equals(a.halfAxes,t.halfAxes)},A.prototype.clone=function(a){return A.clone(this,a)},A.prototype.equals=function(a){return A.equals(this,a)},a.OrientedBoundingBox=A});