1 line
78 KiB
Plaintext
1 line
78 KiB
Plaintext
{"version":3,"file":"OrientedBoundingBox-1e433348.js","sources":["../../../../Source/Core/OrientedBoundingBox.js"],"sourcesContent":["import BoundingSphere from \"./BoundingSphere.js\";\nimport Cartesian2 from \"./Cartesian2.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Cartographic from \"./Cartographic.js\";\nimport Check from \"./Check.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport EllipsoidTangentPlane from \"./EllipsoidTangentPlane.js\";\nimport Intersect from \"./Intersect.js\";\nimport Interval from \"./Interval.js\";\nimport CesiumMath from \"./Math.js\";\nimport Matrix3 from \"./Matrix3.js\";\nimport Matrix4 from \"./Matrix4.js\";\nimport Plane from \"./Plane.js\";\nimport Rectangle from \"./Rectangle.js\";\n\n/**\n * Creates an instance of an OrientedBoundingBox.\n * An OrientedBoundingBox of some object is a closed and convex cuboid. It can provide a tighter bounding volume than {@link BoundingSphere} or {@link AxisAlignedBoundingBox} in many cases.\n * @alias OrientedBoundingBox\n * @constructor\n *\n * @param {Cartesian3} [center=Cartesian3.ZERO] The center of the box.\n * @param {Matrix3} [halfAxes=Matrix3.ZERO] The three orthogonal half-axes of the bounding box.\n * Equivalently, the transformation matrix, to rotate and scale a 0x0x0\n * cube centered at the origin.\n *\n *\n * @example\n * // Create an OrientedBoundingBox using a transformation matrix, a position where the box will be translated, and a scale.\n * const center = new Cesium.Cartesian3(1.0, 0.0, 0.0);\n * const halfAxes = Cesium.Matrix3.fromScale(new Cesium.Cartesian3(1.0, 3.0, 2.0), new Cesium.Matrix3());\n *\n * const obb = new Cesium.OrientedBoundingBox(center, halfAxes);\n *\n * @see BoundingSphere\n * @see BoundingRectangle\n */\nfunction OrientedBoundingBox(center, halfAxes) {\n /**\n * The center of the box.\n * @type {Cartesian3}\n * @default {@link Cartesian3.ZERO}\n */\n this.center = Cartesian3.clone(defaultValue(center, Cartesian3.ZERO));\n /**\n * The transformation matrix, to rotate the box to the right position.\n * @type {Matrix3}\n * @default {@link Matrix3.ZERO}\n */\n this.halfAxes = Matrix3.clone(defaultValue(halfAxes, Matrix3.ZERO));\n}\n\n/**\n * The number of elements used to pack the object into an array.\n * @type {Number}\n */\nOrientedBoundingBox.packedLength =\n Cartesian3.packedLength + Matrix3.packedLength;\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {OrientedBoundingBox} value The value to pack.\n * @param {Number[]} array The array to pack into.\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {Number[]} The array that was packed into\n */\nOrientedBoundingBox.pack = function (value, array, startingIndex) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"value\", value);\n Check.defined(\"array\", array);\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n Cartesian3.pack(value.center, array, startingIndex);\n Matrix3.pack(value.halfAxes, array, startingIndex + Cartesian3.packedLength);\n\n return array;\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {Number[]} array The packed array.\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {OrientedBoundingBox} [result] The object into which to store the result.\n * @returns {OrientedBoundingBox} The modified result parameter or a new OrientedBoundingBox instance if one was not provided.\n */\nOrientedBoundingBox.unpack = function (array, startingIndex, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"array\", array);\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n if (!defined(result)) {\n result = new OrientedBoundingBox();\n }\n\n Cartesian3.unpack(array, startingIndex, result.center);\n Matrix3.unpack(\n array,\n startingIndex + Cartesian3.packedLength,\n result.halfAxes\n );\n return result;\n};\n\nconst scratchCartesian1 = new Cartesian3();\nconst scratchCartesian2 = new Cartesian3();\nconst scratchCartesian3 = new Cartesian3();\nconst scratchCartesian4 = new Cartesian3();\nconst scratchCartesian5 = new Cartesian3();\nconst scratchCartesian6 = new Cartesian3();\nconst scratchCovarianceResult = new Matrix3();\nconst scratchEigenResult = {\n unitary: new Matrix3(),\n diagonal: new Matrix3(),\n};\n\n/**\n * Computes an instance of an OrientedBoundingBox of the given positions.\n * This is an implementation of Stefan Gottschalk's Collision Queries using Oriented Bounding Boxes solution (PHD thesis).\n * Reference: http://gamma.cs.unc.edu/users/gottschalk/main.pdf\n *\n * @param {Cartesian3[]} [positions] List of {@link Cartesian3} points that the bounding box will enclose.\n * @param {OrientedBoundingBox} [result] The object onto which to store the result.\n * @returns {OrientedBoundingBox} The modified result parameter or a new OrientedBoundingBox instance if one was not provided.\n *\n * @example\n * // Compute an object oriented bounding box enclosing two points.\n * const box = Cesium.OrientedBoundingBox.fromPoints([new Cesium.Cartesian3(2, 0, 0), new Cesium.Cartesian3(-2, 0, 0)]);\n */\nOrientedBoundingBox.fromPoints = function (positions, result) {\n if (!defined(result)) {\n result = new OrientedBoundingBox();\n }\n\n if (!defined(positions) || positions.length === 0) {\n result.halfAxes = Matrix3.ZERO;\n result.center = Cartesian3.ZERO;\n return result;\n }\n\n let i;\n const length = positions.length;\n\n const meanPoint = Cartesian3.clone(positions[0], scratchCartesian1);\n for (i = 1; i < length; i++) {\n Cartesian3.add(meanPoint, positions[i], meanPoint);\n }\n const invLength = 1.0 / length;\n Cartesian3.multiplyByScalar(meanPoint, invLength, meanPoint);\n\n let exx = 0.0;\n let exy = 0.0;\n let exz = 0.0;\n let eyy = 0.0;\n let eyz = 0.0;\n let ezz = 0.0;\n let p;\n\n for (i = 0; i < length; i++) {\n p = Cartesian3.subtract(positions[i], meanPoint, scratchCartesian2);\n exx += p.x * p.x;\n exy += p.x * p.y;\n exz += p.x * p.z;\n eyy += p.y * p.y;\n eyz += p.y * p.z;\n ezz += p.z * p.z;\n }\n\n exx *= invLength;\n exy *= invLength;\n exz *= invLength;\n eyy *= invLength;\n eyz *= invLength;\n ezz *= invLength;\n\n const covarianceMatrix = scratchCovarianceResult;\n covarianceMatrix[0] = exx;\n covarianceMatrix[1] = exy;\n covarianceMatrix[2] = exz;\n covarianceMatrix[3] = exy;\n covarianceMatrix[4] = eyy;\n covarianceMatrix[5] = eyz;\n covarianceMatrix[6] = exz;\n covarianceMatrix[7] = eyz;\n covarianceMatrix[8] = ezz;\n\n const eigenDecomposition = Matrix3.computeEigenDecomposition(\n covarianceMatrix,\n scratchEigenResult\n );\n const rotation = Matrix3.clone(eigenDecomposition.unitary, result.halfAxes);\n\n let v1 = Matrix3.getColumn(rotation, 0, scratchCartesian4);\n let v2 = Matrix3.getColumn(rotation, 1, scratchCartesian5);\n let v3 = Matrix3.getColumn(rotation, 2, scratchCartesian6);\n\n let u1 = -Number.MAX_VALUE;\n let u2 = -Number.MAX_VALUE;\n let u3 = -Number.MAX_VALUE;\n let l1 = Number.MAX_VALUE;\n let l2 = Number.MAX_VALUE;\n let l3 = Number.MAX_VALUE;\n\n for (i = 0; i < length; i++) {\n p = positions[i];\n u1 = Math.max(Cartesian3.dot(v1, p), u1);\n u2 = Math.max(Cartesian3.dot(v2, p), u2);\n u3 = Math.max(Cartesian3.dot(v3, p), u3);\n\n l1 = Math.min(Cartesian3.dot(v1, p), l1);\n l2 = Math.min(Cartesian3.dot(v2, p), l2);\n l3 = Math.min(Cartesian3.dot(v3, p), l3);\n }\n\n v1 = Cartesian3.multiplyByScalar(v1, 0.5 * (l1 + u1), v1);\n v2 = Cartesian3.multiplyByScalar(v2, 0.5 * (l2 + u2), v2);\n v3 = Cartesian3.multiplyByScalar(v3, 0.5 * (l3 + u3), v3);\n\n const center = Cartesian3.add(v1, v2, result.center);\n Cartesian3.add(center, v3, center);\n\n const scale = scratchCartesian3;\n scale.x = u1 - l1;\n scale.y = u2 - l2;\n scale.z = u3 - l3;\n Cartesian3.multiplyByScalar(scale, 0.5, scale);\n Matrix3.multiplyByScale(result.halfAxes, scale, result.halfAxes);\n\n return result;\n};\n\nconst scratchOffset = new Cartesian3();\nconst scratchScale = new Cartesian3();\nfunction fromPlaneExtents(\n planeOrigin,\n planeXAxis,\n planeYAxis,\n planeZAxis,\n minimumX,\n maximumX,\n minimumY,\n maximumY,\n minimumZ,\n maximumZ,\n result\n) {\n //>>includeStart('debug', pragmas.debug);\n if (\n !defined(minimumX) ||\n !defined(maximumX) ||\n !defined(minimumY) ||\n !defined(maximumY) ||\n !defined(minimumZ) ||\n !defined(maximumZ)\n ) {\n throw new DeveloperError(\n \"all extents (minimum/maximum X/Y/Z) are required.\"\n );\n }\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n result = new OrientedBoundingBox();\n }\n\n const halfAxes = result.halfAxes;\n Matrix3.setColumn(halfAxes, 0, planeXAxis, halfAxes);\n Matrix3.setColumn(halfAxes, 1, planeYAxis, halfAxes);\n Matrix3.setColumn(halfAxes, 2, planeZAxis, halfAxes);\n\n let centerOffset = scratchOffset;\n centerOffset.x = (minimumX + maximumX) / 2.0;\n centerOffset.y = (minimumY + maximumY) / 2.0;\n centerOffset.z = (minimumZ + maximumZ) / 2.0;\n\n const scale = scratchScale;\n scale.x = (maximumX - minimumX) / 2.0;\n scale.y = (maximumY - minimumY) / 2.0;\n scale.z = (maximumZ - minimumZ) / 2.0;\n\n const center = result.center;\n centerOffset = Matrix3.multiplyByVector(halfAxes, centerOffset, centerOffset);\n Cartesian3.add(planeOrigin, centerOffset, center);\n Matrix3.multiplyByScale(halfAxes, scale, halfAxes);\n\n return result;\n}\n\nconst scratchRectangleCenterCartographic = new Cartographic();\nconst scratchRectangleCenter = new Cartesian3();\nconst scratchPerimeterCartographicNC = new Cartographic();\nconst scratchPerimeterCartographicNW = new Cartographic();\nconst scratchPerimeterCartographicCW = new Cartographic();\nconst scratchPerimeterCartographicSW = new Cartographic();\nconst scratchPerimeterCartographicSC = new Cartographic();\nconst scratchPerimeterCartesianNC = new Cartesian3();\nconst scratchPerimeterCartesianNW = new Cartesian3();\nconst scratchPerimeterCartesianCW = new Cartesian3();\nconst scratchPerimeterCartesianSW = new Cartesian3();\nconst scratchPerimeterCartesianSC = new Cartesian3();\nconst scratchPerimeterProjectedNC = new Cartesian2();\nconst scratchPerimeterProjectedNW = new Cartesian2();\nconst scratchPerimeterProjectedCW = new Cartesian2();\nconst scratchPerimeterProjectedSW = new Cartesian2();\nconst scratchPerimeterProjectedSC = new Cartesian2();\n\nconst scratchPlaneOrigin = new Cartesian3();\nconst scratchPlaneNormal = new Cartesian3();\nconst scratchPlaneXAxis = new Cartesian3();\nconst scratchHorizonCartesian = new Cartesian3();\nconst scratchHorizonProjected = new Cartesian2();\nconst scratchMaxY = new Cartesian3();\nconst scratchMinY = new Cartesian3();\nconst scratchZ = new Cartesian3();\nconst scratchPlane = new Plane(Cartesian3.UNIT_X, 0.0);\n\n/**\n * Computes an OrientedBoundingBox that bounds a {@link Rectangle} on the surface of an {@link Ellipsoid}.\n * There are no guarantees about the orientation of the bounding box.\n *\n * @param {Rectangle} rectangle The cartographic rectangle on the surface of the ellipsoid.\n * @param {Number} [minimumHeight=0.0] The minimum height (elevation) within the tile.\n * @param {Number} [maximumHeight=0.0] The maximum height (elevation) within the tile.\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid on which the rectangle is defined.\n * @param {OrientedBoundingBox} [result] The object onto which to store the result.\n * @returns {OrientedBoundingBox} The modified result parameter or a new OrientedBoundingBox instance if none was provided.\n *\n * @exception {DeveloperError} rectangle.width must be between 0 and pi.\n * @exception {DeveloperError} rectangle.height must be between 0 and pi.\n * @exception {DeveloperError} ellipsoid must be an ellipsoid of revolution (<code>radii.x == radii.y</code>)\n */\nOrientedBoundingBox.fromRectangle = function (\n rectangle,\n minimumHeight,\n maximumHeight,\n ellipsoid,\n result\n) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(rectangle)) {\n throw new DeveloperError(\"rectangle is required\");\n }\n if (rectangle.width < 0.0 || rectangle.width > CesiumMath.TWO_PI) {\n throw new DeveloperError(\"Rectangle width must be between 0 and 2*pi\");\n }\n if (rectangle.height < 0.0 || rectangle.height > CesiumMath.PI) {\n throw new DeveloperError(\"Rectangle height must be between 0 and pi\");\n }\n if (\n defined(ellipsoid) &&\n !CesiumMath.equalsEpsilon(\n ellipsoid.radii.x,\n ellipsoid.radii.y,\n CesiumMath.EPSILON15\n )\n ) {\n throw new DeveloperError(\n \"Ellipsoid must be an ellipsoid of revolution (radii.x == radii.y)\"\n );\n }\n //>>includeEnd('debug');\n\n minimumHeight = defaultValue(minimumHeight, 0.0);\n maximumHeight = defaultValue(maximumHeight, 0.0);\n ellipsoid = defaultValue(ellipsoid, Ellipsoid.WGS84);\n\n let minX, maxX, minY, maxY, minZ, maxZ, plane;\n\n if (rectangle.width <= CesiumMath.PI) {\n // The bounding box will be aligned with the tangent plane at the center of the rectangle.\n const tangentPointCartographic = Rectangle.center(\n rectangle,\n scratchRectangleCenterCartographic\n );\n const tangentPoint = ellipsoid.cartographicToCartesian(\n tangentPointCartographic,\n scratchRectangleCenter\n );\n const tangentPlane = new EllipsoidTangentPlane(tangentPoint, ellipsoid);\n plane = tangentPlane.plane;\n\n // If the rectangle spans the equator, CW is instead aligned with the equator (because it sticks out the farthest at the equator).\n const lonCenter = tangentPointCartographic.longitude;\n const latCenter =\n rectangle.south < 0.0 && rectangle.north > 0.0\n ? 0.0\n : tangentPointCartographic.latitude;\n\n // Compute XY extents using the rectangle at maximum height\n const perimeterCartographicNC = Cartographic.fromRadians(\n lonCenter,\n rectangle.north,\n maximumHeight,\n scratchPerimeterCartographicNC\n );\n const perimeterCartographicNW = Cartographic.fromRadians(\n rectangle.west,\n rectangle.north,\n maximumHeight,\n scratchPerimeterCartographicNW\n );\n const perimeterCartographicCW = Cartographic.fromRadians(\n rectangle.west,\n latCenter,\n maximumHeight,\n scratchPerimeterCartographicCW\n );\n const perimeterCartographicSW = Cartographic.fromRadians(\n rectangle.west,\n rectangle.south,\n maximumHeight,\n scratchPerimeterCartographicSW\n );\n const perimeterCartographicSC = Cartographic.fromRadians(\n lonCenter,\n rectangle.south,\n maximumHeight,\n scratchPerimeterCartographicSC\n );\n\n const perimeterCartesianNC = ellipsoid.cartographicToCartesian(\n perimeterCartographicNC,\n scratchPerimeterCartesianNC\n );\n let perimeterCartesianNW = ellipsoid.cartographicToCartesian(\n perimeterCartographicNW,\n scratchPerimeterCartesianNW\n );\n const perimeterCartesianCW = ellipsoid.cartographicToCartesian(\n perimeterCartographicCW,\n scratchPerimeterCartesianCW\n );\n let perimeterCartesianSW = ellipsoid.cartographicToCartesian(\n perimeterCartographicSW,\n scratchPerimeterCartesianSW\n );\n const perimeterCartesianSC = ellipsoid.cartographicToCartesian(\n perimeterCartographicSC,\n scratchPerimeterCartesianSC\n );\n\n const perimeterProjectedNC = tangentPlane.projectPointToNearestOnPlane(\n perimeterCartesianNC,\n scratchPerimeterProjectedNC\n );\n const perimeterProjectedNW = tangentPlane.projectPointToNearestOnPlane(\n perimeterCartesianNW,\n scratchPerimeterProjectedNW\n );\n const perimeterProjectedCW = tangentPlane.projectPointToNearestOnPlane(\n perimeterCartesianCW,\n scratchPerimeterProjectedCW\n );\n const perimeterProjectedSW = tangentPlane.projectPointToNearestOnPlane(\n perimeterCartesianSW,\n scratchPerimeterProjectedSW\n );\n const perimeterProjectedSC = tangentPlane.projectPointToNearestOnPlane(\n perimeterCartesianSC,\n scratchPerimeterProjectedSC\n );\n\n minX = Math.min(\n perimeterProjectedNW.x,\n perimeterProjectedCW.x,\n perimeterProjectedSW.x\n );\n maxX = -minX; // symmetrical\n\n maxY = Math.max(perimeterProjectedNW.y, perimeterProjectedNC.y);\n minY = Math.min(perimeterProjectedSW.y, perimeterProjectedSC.y);\n\n // Compute minimum Z using the rectangle at minimum height, since it will be deeper than the maximum height\n perimeterCartographicNW.height = perimeterCartographicSW.height = minimumHeight;\n perimeterCartesianNW = ellipsoid.cartographicToCartesian(\n perimeterCartographicNW,\n scratchPerimeterCartesianNW\n );\n perimeterCartesianSW = ellipsoid.cartographicToCartesian(\n perimeterCartographicSW,\n scratchPerimeterCartesianSW\n );\n\n minZ = Math.min(\n Plane.getPointDistance(plane, perimeterCartesianNW),\n Plane.getPointDistance(plane, perimeterCartesianSW)\n );\n maxZ = maximumHeight; // Since the tangent plane touches the surface at height = 0, this is okay\n\n return fromPlaneExtents(\n tangentPlane.origin,\n tangentPlane.xAxis,\n tangentPlane.yAxis,\n tangentPlane.zAxis,\n minX,\n maxX,\n minY,\n maxY,\n minZ,\n maxZ,\n result\n );\n }\n\n // Handle the case where rectangle width is greater than PI (wraps around more than half the ellipsoid).\n const fullyAboveEquator = rectangle.south > 0.0;\n const fullyBelowEquator = rectangle.north < 0.0;\n const latitudeNearestToEquator = fullyAboveEquator\n ? rectangle.south\n : fullyBelowEquator\n ? rectangle.north\n : 0.0;\n const centerLongitude = Rectangle.center(\n rectangle,\n scratchRectangleCenterCartographic\n ).longitude;\n\n // Plane is located at the rectangle's center longitude and the rectangle's latitude that is closest to the equator. It rotates around the Z axis.\n // This results in a better fit than the obb approach for smaller rectangles, which orients with the rectangle's center normal.\n const planeOrigin = Cartesian3.fromRadians(\n centerLongitude,\n latitudeNearestToEquator,\n maximumHeight,\n ellipsoid,\n scratchPlaneOrigin\n );\n planeOrigin.z = 0.0; // center the plane on the equator to simpify plane normal calculation\n const isPole =\n Math.abs(planeOrigin.x) < CesiumMath.EPSILON10 &&\n Math.abs(planeOrigin.y) < CesiumMath.EPSILON10;\n const planeNormal = !isPole\n ? Cartesian3.normalize(planeOrigin, scratchPlaneNormal)\n : Cartesian3.UNIT_X;\n const planeYAxis = Cartesian3.UNIT_Z;\n const planeXAxis = Cartesian3.cross(\n planeNormal,\n planeYAxis,\n scratchPlaneXAxis\n );\n plane = Plane.fromPointNormal(planeOrigin, planeNormal, scratchPlane);\n\n // Get the horizon point relative to the center. This will be the farthest extent in the plane's X dimension.\n const horizonCartesian = Cartesian3.fromRadians(\n centerLongitude + CesiumMath.PI_OVER_TWO,\n latitudeNearestToEquator,\n maximumHeight,\n ellipsoid,\n scratchHorizonCartesian\n );\n maxX = Cartesian3.dot(\n Plane.projectPointOntoPlane(\n plane,\n horizonCartesian,\n scratchHorizonProjected\n ),\n planeXAxis\n );\n minX = -maxX; // symmetrical\n\n // Get the min and max Y, using the height that will give the largest extent\n maxY = Cartesian3.fromRadians(\n 0.0,\n rectangle.north,\n fullyBelowEquator ? minimumHeight : maximumHeight,\n ellipsoid,\n scratchMaxY\n ).z;\n minY = Cartesian3.fromRadians(\n 0.0,\n rectangle.south,\n fullyAboveEquator ? minimumHeight : maximumHeight,\n ellipsoid,\n scratchMinY\n ).z;\n\n const farZ = Cartesian3.fromRadians(\n rectangle.east,\n latitudeNearestToEquator,\n maximumHeight,\n ellipsoid,\n scratchZ\n );\n minZ = Plane.getPointDistance(plane, farZ);\n maxZ = 0.0; // plane origin starts at maxZ already\n\n // min and max are local to the plane axes\n return fromPlaneExtents(\n planeOrigin,\n planeXAxis,\n planeYAxis,\n planeNormal,\n minX,\n maxX,\n minY,\n maxY,\n minZ,\n maxZ,\n result\n );\n};\n\n/**\n * Computes an OrientedBoundingBox that bounds an affine transformation.\n *\n * @param {Matrix4} transformation The affine transformation.\n * @param {OrientedBoundingBox} [result] The object onto which to store the result.\n * @returns {OrientedBoundingBox} The modified result parameter or a new OrientedBoundingBox instance if none was provided.\n */\nOrientedBoundingBox.fromTransformation = function (transformation, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"transformation\", transformation);\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n result = new OrientedBoundingBox();\n }\n\n result.center = Matrix4.getTranslation(transformation, result.center);\n result.halfAxes = Matrix4.getMatrix3(transformation, result.halfAxes);\n result.halfAxes = Matrix3.multiplyByScalar(\n result.halfAxes,\n 0.5,\n result.halfAxes\n );\n return result;\n};\n\n/**\n * Duplicates a OrientedBoundingBox instance.\n *\n * @param {OrientedBoundingBox} box The bounding box to duplicate.\n * @param {OrientedBoundingBox} [result] The object onto which to store the result.\n * @returns {OrientedBoundingBox} The modified result parameter or a new OrientedBoundingBox instance if none was provided. (Returns undefined if box is undefined)\n */\nOrientedBoundingBox.clone = function (box, result) {\n if (!defined(box)) {\n return undefined;\n }\n\n if (!defined(result)) {\n return new OrientedBoundingBox(box.center, box.halfAxes);\n }\n\n Cartesian3.clone(box.center, result.center);\n Matrix3.clone(box.halfAxes, result.halfAxes);\n\n return result;\n};\n\n/**\n * Determines which side of a plane the oriented bounding box is located.\n *\n * @param {OrientedBoundingBox} box The oriented bounding box to test.\n * @param {Plane} plane The plane to test against.\n * @returns {Intersect} {@link Intersect.INSIDE} if the entire box is on the side of the plane\n * the normal is pointing, {@link Intersect.OUTSIDE} if the entire box is\n * on the opposite side, and {@link Intersect.INTERSECTING} if the box\n * intersects the plane.\n */\nOrientedBoundingBox.intersectPlane = function (box, plane) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(box)) {\n throw new DeveloperError(\"box is required.\");\n }\n\n if (!defined(plane)) {\n throw new DeveloperError(\"plane is required.\");\n }\n //>>includeEnd('debug');\n\n const center = box.center;\n const normal = plane.normal;\n const halfAxes = box.halfAxes;\n const normalX = normal.x,\n normalY = normal.y,\n normalZ = normal.z;\n // plane is used as if it is its normal; the first three components are assumed to be normalized\n const radEffective =\n Math.abs(\n normalX * halfAxes[Matrix3.COLUMN0ROW0] +\n normalY * halfAxes[Matrix3.COLUMN0ROW1] +\n normalZ * halfAxes[Matrix3.COLUMN0ROW2]\n ) +\n Math.abs(\n normalX * halfAxes[Matrix3.COLUMN1ROW0] +\n normalY * halfAxes[Matrix3.COLUMN1ROW1] +\n normalZ * halfAxes[Matrix3.COLUMN1ROW2]\n ) +\n Math.abs(\n normalX * halfAxes[Matrix3.COLUMN2ROW0] +\n normalY * halfAxes[Matrix3.COLUMN2ROW1] +\n normalZ * halfAxes[Matrix3.COLUMN2ROW2]\n );\n const distanceToPlane = Cartesian3.dot(normal, center) + plane.distance;\n\n if (distanceToPlane <= -radEffective) {\n // The entire box is on the negative side of the plane normal\n return Intersect.OUTSIDE;\n } else if (distanceToPlane >= radEffective) {\n // The entire box is on the positive side of the plane normal\n return Intersect.INSIDE;\n }\n return Intersect.INTERSECTING;\n};\n\nconst scratchCartesianU = new Cartesian3();\nconst scratchCartesianV = new Cartesian3();\nconst scratchCartesianW = new Cartesian3();\nconst scratchValidAxis2 = new Cartesian3();\nconst scratchValidAxis3 = new Cartesian3();\nconst scratchPPrime = new Cartesian3();\n\n/**\n * Computes the estimated distance squared from the closest point on a bounding box to a point.\n *\n * @param {OrientedBoundingBox} box The box.\n * @param {Cartesian3} cartesian The point\n * @returns {Number} The distance squared from the oriented bounding box to the point. Returns 0 if the point is inside the box.\n *\n * @example\n * // Sort bounding boxes from back to front\n * boxes.sort(function(a, b) {\n * return Cesium.OrientedBoundingBox.distanceSquaredTo(b, camera.positionWC) - Cesium.OrientedBoundingBox.distanceSquaredTo(a, camera.positionWC);\n * });\n */\nOrientedBoundingBox.distanceSquaredTo = function (box, cartesian) {\n // See Geometric Tools for Computer Graphics 10.4.2\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(box)) {\n throw new DeveloperError(\"box is required.\");\n }\n if (!defined(cartesian)) {\n throw new DeveloperError(\"cartesian is required.\");\n }\n //>>includeEnd('debug');\n\n const offset = Cartesian3.subtract(cartesian, box.center, scratchOffset);\n\n const halfAxes = box.halfAxes;\n let u = Matrix3.getColumn(halfAxes, 0, scratchCartesianU);\n let v = Matrix3.getColumn(halfAxes, 1, scratchCartesianV);\n let w = Matrix3.getColumn(halfAxes, 2, scratchCartesianW);\n\n const uHalf = Cartesian3.magnitude(u);\n const vHalf = Cartesian3.magnitude(v);\n const wHalf = Cartesian3.magnitude(w);\n\n let uValid = true;\n let vValid = true;\n let wValid = true;\n\n if (uHalf > 0) {\n Cartesian3.divideByScalar(u, uHalf, u);\n } else {\n uValid = false;\n }\n\n if (vHalf > 0) {\n Cartesian3.divideByScalar(v, vHalf, v);\n } else {\n vValid = false;\n }\n\n if (wHalf > 0) {\n Cartesian3.divideByScalar(w, wHalf, w);\n } else {\n wValid = false;\n }\n\n const numberOfDegenerateAxes = !uValid + !vValid + !wValid;\n let validAxis1;\n let validAxis2;\n let validAxis3;\n\n if (numberOfDegenerateAxes === 1) {\n let degenerateAxis = u;\n validAxis1 = v;\n validAxis2 = w;\n if (!vValid) {\n degenerateAxis = v;\n validAxis1 = u;\n } else if (!wValid) {\n degenerateAxis = w;\n validAxis2 = u;\n }\n\n validAxis3 = Cartesian3.cross(validAxis1, validAxis2, scratchValidAxis3);\n\n if (degenerateAxis === u) {\n u = validAxis3;\n } else if (degenerateAxis === v) {\n v = validAxis3;\n } else if (degenerateAxis === w) {\n w = validAxis3;\n }\n } else if (numberOfDegenerateAxes === 2) {\n validAxis1 = u;\n if (vValid) {\n validAxis1 = v;\n } else if (wValid) {\n validAxis1 = w;\n }\n\n let crossVector = Cartesian3.UNIT_Y;\n if (crossVector.equalsEpsilon(validAxis1, CesiumMath.EPSILON3)) {\n crossVector = Cartesian3.UNIT_X;\n }\n\n validAxis2 = Cartesian3.cross(validAxis1, crossVector, scratchValidAxis2);\n Cartesian3.normalize(validAxis2, validAxis2);\n validAxis3 = Cartesian3.cross(validAxis1, validAxis2, scratchValidAxis3);\n Cartesian3.normalize(validAxis3, validAxis3);\n\n if (validAxis1 === u) {\n v = validAxis2;\n w = validAxis3;\n } else if (validAxis1 === v) {\n w = validAxis2;\n u = validAxis3;\n } else if (validAxis1 === w) {\n u = validAxis2;\n v = validAxis3;\n }\n } else if (numberOfDegenerateAxes === 3) {\n u = Cartesian3.UNIT_X;\n v = Cartesian3.UNIT_Y;\n w = Cartesian3.UNIT_Z;\n }\n\n const pPrime = scratchPPrime;\n pPrime.x = Cartesian3.dot(offset, u);\n pPrime.y = Cartesian3.dot(offset, v);\n pPrime.z = Cartesian3.dot(offset, w);\n\n let distanceSquared = 0.0;\n let d;\n\n if (pPrime.x < -uHalf) {\n d = pPrime.x + uHalf;\n distanceSquared += d * d;\n } else if (pPrime.x > uHalf) {\n d = pPrime.x - uHalf;\n distanceSquared += d * d;\n }\n\n if (pPrime.y < -vHalf) {\n d = pPrime.y + vHalf;\n distanceSquared += d * d;\n } else if (pPrime.y > vHalf) {\n d = pPrime.y - vHalf;\n distanceSquared += d * d;\n }\n\n if (pPrime.z < -wHalf) {\n d = pPrime.z + wHalf;\n distanceSquared += d * d;\n } else if (pPrime.z > wHalf) {\n d = pPrime.z - wHalf;\n distanceSquared += d * d;\n }\n\n return distanceSquared;\n};\n\nconst scratchCorner = new Cartesian3();\nconst scratchToCenter = new Cartesian3();\n\n/**\n * The distances calculated by the vector from the center of the bounding box to position projected onto direction.\n * <br>\n * If you imagine the infinite number of planes with normal direction, this computes the smallest distance to the\n * closest and farthest planes from position that intersect the bounding box.\n *\n * @param {OrientedBoundingBox} box The bounding box to calculate the distance to.\n * @param {Cartesian3} position The position to calculate the distance from.\n * @param {Cartesian3} direction The direction from position.\n * @param {Interval} [result] A Interval to store the nearest and farthest distances.\n * @returns {Interval} The nearest and farthest distances on the bounding box from position in direction.\n */\nOrientedBoundingBox.computePlaneDistances = function (\n box,\n position,\n direction,\n result\n) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(box)) {\n throw new DeveloperError(\"box is required.\");\n }\n\n if (!defined(position)) {\n throw new DeveloperError(\"position is required.\");\n }\n\n if (!defined(direction)) {\n throw new DeveloperError(\"direction is required.\");\n }\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n result = new Interval();\n }\n\n let minDist = Number.POSITIVE_INFINITY;\n let maxDist = Number.NEGATIVE_INFINITY;\n\n const center = box.center;\n const halfAxes = box.halfAxes;\n\n const u = Matrix3.getColumn(halfAxes, 0, scratchCartesianU);\n const v = Matrix3.getColumn(halfAxes, 1, scratchCartesianV);\n const w = Matrix3.getColumn(halfAxes, 2, scratchCartesianW);\n\n // project first corner\n const corner = Cartesian3.add(u, v, scratchCorner);\n Cartesian3.add(corner, w, corner);\n Cartesian3.add(corner, center, corner);\n\n const toCenter = Cartesian3.subtract(corner, position, scratchToCenter);\n let mag = Cartesian3.dot(direction, toCenter);\n\n minDist = Math.min(mag, minDist);\n maxDist = Math.max(mag, maxDist);\n\n // project second corner\n Cartesian3.add(center, u, corner);\n Cartesian3.add(corner, v, corner);\n Cartesian3.subtract(corner, w, corner);\n\n Cartesian3.subtract(corner, position, toCenter);\n mag = Cartesian3.dot(direction, toCenter);\n\n minDist = Math.min(mag, minDist);\n maxDist = Math.max(mag, maxDist);\n\n // project third corner\n Cartesian3.add(center, u, corner);\n Cartesian3.subtract(corner, v, corner);\n Cartesian3.add(corner, w, corner);\n\n Cartesian3.subtract(corner, position, toCenter);\n mag = Cartesian3.dot(direction, toCenter);\n\n minDist = Math.min(mag, minDist);\n maxDist = Math.max(mag, maxDist);\n\n // project fourth corner\n Cartesian3.add(center, u, corner);\n Cartesian3.subtract(corner, v, corner);\n Cartesian3.subtract(corner, w, corner);\n\n Cartesian3.subtract(corner, position, toCenter);\n mag = Cartesian3.dot(direction, toCenter);\n\n minDist = Math.min(mag, minDist);\n maxDist = Math.max(mag, maxDist);\n\n // project fifth corner\n Cartesian3.subtract(center, u, corner);\n Cartesian3.add(corner, v, corner);\n Cartesian3.add(corner, w, corner);\n\n Cartesian3.subtract(corner, position, toCenter);\n mag = Cartesian3.dot(direction, toCenter);\n\n minDist = Math.min(mag, minDist);\n maxDist = Math.max(mag, maxDist);\n\n // project sixth corner\n Cartesian3.subtract(center, u, corner);\n Cartesian3.add(corner, v, corner);\n Cartesian3.subtract(corner, w, corner);\n\n Cartesian3.subtract(corner, position, toCenter);\n mag = Cartesian3.dot(direction, toCenter);\n\n minDist = Math.min(mag, minDist);\n maxDist = Math.max(mag, maxDist);\n\n // project seventh corner\n Cartesian3.subtract(center, u, corner);\n Cartesian3.subtract(corner, v, corner);\n Cartesian3.add(corner, w, corner);\n\n Cartesian3.subtract(corner, position, toCenter);\n mag = Cartesian3.dot(direction, toCenter);\n\n minDist = Math.min(mag, minDist);\n maxDist = Math.max(mag, maxDist);\n\n // project eighth corner\n Cartesian3.subtract(center, u, corner);\n Cartesian3.subtract(corner, v, corner);\n Cartesian3.subtract(corner, w, corner);\n\n Cartesian3.subtract(corner, position, toCenter);\n mag = Cartesian3.dot(direction, toCenter);\n\n minDist = Math.min(mag, minDist);\n maxDist = Math.max(mag, maxDist);\n\n result.start = minDist;\n result.stop = maxDist;\n return result;\n};\n\nconst scratchXAxis = new Cartesian3();\nconst scratchYAxis = new Cartesian3();\nconst scratchZAxis = new Cartesian3();\n\n/**\n * Computes the eight corners of an oriented bounding box. The corners are ordered by (-X, -Y, -Z), (-X, -Y, +Z), (-X, +Y, -Z), (-X, +Y, +Z), (+X, -Y, -Z), (+X, -Y, +Z), (+X, +Y, -Z), (+X, +Y, +Z).\n *\n * @param {OrientedBoundingBox} box The oriented bounding box.\n * @param {Cartesian3[]} [result] An array of eight {@link Cartesian3} instances onto which to store the corners.\n * @returns {Cartesian3[]} The modified result parameter or a new array if none was provided.\n */\nOrientedBoundingBox.computeCorners = function (box, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"box\", box);\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n result = [\n new Cartesian3(),\n new Cartesian3(),\n new Cartesian3(),\n new Cartesian3(),\n new Cartesian3(),\n new Cartesian3(),\n new Cartesian3(),\n new Cartesian3(),\n ];\n }\n\n const center = box.center;\n const halfAxes = box.halfAxes;\n const xAxis = Matrix3.getColumn(halfAxes, 0, scratchXAxis);\n const yAxis = Matrix3.getColumn(halfAxes, 1, scratchYAxis);\n const zAxis = Matrix3.getColumn(halfAxes, 2, scratchZAxis);\n\n Cartesian3.clone(center, result[0]);\n Cartesian3.subtract(result[0], xAxis, result[0]);\n Cartesian3.subtract(result[0], yAxis, result[0]);\n Cartesian3.subtract(result[0], zAxis, result[0]);\n\n Cartesian3.clone(center, result[1]);\n Cartesian3.subtract(result[1], xAxis, result[1]);\n Cartesian3.subtract(result[1], yAxis, result[1]);\n Cartesian3.add(result[1], zAxis, result[1]);\n\n Cartesian3.clone(center, result[2]);\n Cartesian3.subtract(result[2], xAxis, result[2]);\n Cartesian3.add(result[2], yAxis, result[2]);\n Cartesian3.subtract(result[2], zAxis, result[2]);\n\n Cartesian3.clone(center, result[3]);\n Cartesian3.subtract(result[3], xAxis, result[3]);\n Cartesian3.add(result[3], yAxis, result[3]);\n Cartesian3.add(result[3], zAxis, result[3]);\n\n Cartesian3.clone(center, result[4]);\n Cartesian3.add(result[4], xAxis, result[4]);\n Cartesian3.subtract(result[4], yAxis, result[4]);\n Cartesian3.subtract(result[4], zAxis, result[4]);\n\n Cartesian3.clone(center, result[5]);\n Cartesian3.add(result[5], xAxis, result[5]);\n Cartesian3.subtract(result[5], yAxis, result[5]);\n Cartesian3.add(result[5], zAxis, result[5]);\n\n Cartesian3.clone(center, result[6]);\n Cartesian3.add(result[6], xAxis, result[6]);\n Cartesian3.add(result[6], yAxis, result[6]);\n Cartesian3.subtract(result[6], zAxis, result[6]);\n\n Cartesian3.clone(center, result[7]);\n Cartesian3.add(result[7], xAxis, result[7]);\n Cartesian3.add(result[7], yAxis, result[7]);\n Cartesian3.add(result[7], zAxis, result[7]);\n\n return result;\n};\n\nconst scratchRotationScale = new Matrix3();\n\n/**\n * Computes a transformation matrix from an oriented bounding box.\n *\n * @param {OrientedBoundingBox} box The oriented bounding box.\n * @param {Matrix4} result The object onto which to store the result.\n * @returns {Matrix4} The modified result parameter or a new {@link Matrix4} instance if none was provided.\n */\nOrientedBoundingBox.computeTransformation = function (box, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"box\", box);\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n result = new Matrix4();\n }\n\n const translation = box.center;\n const rotationScale = Matrix3.multiplyByUniformScale(\n box.halfAxes,\n 2.0,\n scratchRotationScale\n );\n return Matrix4.fromRotationTranslation(rotationScale, translation, result);\n};\n\nconst scratchBoundingSphere = new BoundingSphere();\n\n/**\n * Determines whether or not a bounding box is hidden from view by the occluder.\n *\n * @param {OrientedBoundingBox} box The bounding box surrounding the occludee object.\n * @param {Occluder} occluder The occluder.\n * @returns {Boolean} <code>true</code> if the box is not visible; otherwise <code>false</code>.\n */\nOrientedBoundingBox.isOccluded = function (box, occluder) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(box)) {\n throw new DeveloperError(\"box is required.\");\n }\n if (!defined(occluder)) {\n throw new DeveloperError(\"occluder is required.\");\n }\n //>>includeEnd('debug');\n\n const sphere = BoundingSphere.fromOrientedBoundingBox(\n box,\n scratchBoundingSphere\n );\n\n return !occluder.isBoundingSphereVisible(sphere);\n};\n\n/**\n * Determines which side of a plane the oriented bounding box is located.\n *\n * @param {Plane} plane The plane to test against.\n * @returns {Intersect} {@link Intersect.INSIDE} if the entire box is on the side of the plane\n * the normal is pointing, {@link Intersect.OUTSIDE} if the entire box is\n * on the opposite side, and {@link Intersect.INTERSECTING} if the box\n * intersects the plane.\n */\nOrientedBoundingBox.prototype.intersectPlane = function (plane) {\n return OrientedBoundingBox.intersectPlane(this, plane);\n};\n\n/**\n * Computes the estimated distance squared from the closest point on a bounding box to a point.\n *\n * @param {Cartesian3} cartesian The point\n * @returns {Number} The estimated distance squared from the bounding sphere to the point.\n *\n * @example\n * // Sort bounding boxes from back to front\n * boxes.sort(function(a, b) {\n * return b.distanceSquaredTo(camera.positionWC) - a.distanceSquaredTo(camera.positionWC);\n * });\n */\nOrientedBoundingBox.prototype.distanceSquaredTo = function (cartesian) {\n return OrientedBoundingBox.distanceSquaredTo(this, cartesian);\n};\n\n/**\n * The distances calculated by the vector from the center of the bounding box to position projected onto direction.\n * <br>\n * If you imagine the infinite number of planes with normal direction, this computes the smallest distance to the\n * closest and farthest planes from position that intersect the bounding box.\n *\n * @param {Cartesian3} position The position to calculate the distance from.\n * @param {Cartesian3} direction The direction from position.\n * @param {Interval} [result] A Interval to store the nearest and farthest distances.\n * @returns {Interval} The nearest and farthest distances on the bounding box from position in direction.\n */\nOrientedBoundingBox.prototype.computePlaneDistances = function (\n position,\n direction,\n result\n) {\n return OrientedBoundingBox.computePlaneDistances(\n this,\n position,\n direction,\n result\n );\n};\n\n/**\n * Computes the eight corners of an oriented bounding box. The corners are ordered by (-X, -Y, -Z), (-X, -Y, +Z), (-X, +Y, -Z), (-X, +Y, +Z), (+X, -Y, -Z), (+X, -Y, +Z), (+X, +Y, -Z), (+X, +Y, +Z).\n *\n * @param {Cartesian3[]} [result] An array of eight {@link Cartesian3} instances onto which to store the corners.\n * @returns {Cartesian3[]} The modified result parameter or a new array if none was provided.\n */\nOrientedBoundingBox.prototype.computeCorners = function (result) {\n return OrientedBoundingBox.computeCorners(this, result);\n};\n\n/**\n * Computes a transformation matrix from an oriented bounding box.\n *\n * @param {Matrix4} result The object onto which to store the result.\n * @returns {Matrix4} The modified result parameter or a new {@link Matrix4} instance if none was provided.\n */\nOrientedBoundingBox.prototype.computeTransformation = function (result) {\n return OrientedBoundingBox.computeTransformation(this, result);\n};\n\n/**\n * Determines whether or not a bounding box is hidden from view by the occluder.\n *\n * @param {Occluder} occluder The occluder.\n * @returns {Boolean} <code>true</code> if the sphere is not visible; otherwise <code>false</code>.\n */\nOrientedBoundingBox.prototype.isOccluded = function (occluder) {\n return OrientedBoundingBox.isOccluded(this, occluder);\n};\n\n/**\n * Compares the provided OrientedBoundingBox componentwise and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {OrientedBoundingBox} left The first OrientedBoundingBox.\n * @param {OrientedBoundingBox} right The second OrientedBoundingBox.\n * @returns {Boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nOrientedBoundingBox.equals = function (left, right) {\n return (\n left === right ||\n (defined(left) &&\n defined(right) &&\n Cartesian3.equals(left.center, right.center) &&\n Matrix3.equals(left.halfAxes, right.halfAxes))\n );\n};\n\n/**\n * Duplicates this OrientedBoundingBox instance.\n *\n * @param {OrientedBoundingBox} [result] The object onto which to store the result.\n * @returns {OrientedBoundingBox} The modified result parameter or a new OrientedBoundingBox instance if one was not provided.\n */\nOrientedBoundingBox.prototype.clone = function (result) {\n return OrientedBoundingBox.clone(this, result);\n};\n\n/**\n * Compares this OrientedBoundingBox against the provided OrientedBoundingBox componentwise and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {OrientedBoundingBox} [right] The right hand side OrientedBoundingBox.\n * @returns {Boolean} <code>true</code> if they are equal, <code>false</code> otherwise.\n */\nOrientedBoundingBox.prototype.equals = function (right) {\n return OrientedBoundingBox.equals(this, right);\n};\nexport default OrientedBoundingBox;\n"],"names":["Cartesian3","defaultValue","Matrix3","Check","defined","DeveloperError","Cartographic","Cartesian2","Plane","CesiumMath","Ellipsoid","Rectangle","EllipsoidTangentPlane","Matrix4","Intersect","Interval","BoundingSphere"],"mappings":"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"} |