1 |
- {"version":3,"file":"IntersectionTests-afc38163.js","sources":["../../../../Source/Core/QuadraticRealPolynomial.js","../../../../Source/Core/CubicRealPolynomial.js","../../../../Source/Core/QuarticRealPolynomial.js","../../../../Source/Core/Ray.js","../../../../Source/Core/IntersectionTests.js"],"sourcesContent":["import DeveloperError from \"./DeveloperError.js\";\nimport CesiumMath from \"./Math.js\";\n\n/**\n * Defines functions for 2nd order polynomial functions of one variable with only real coefficients.\n *\n * @namespace QuadraticRealPolynomial\n */\nvar QuadraticRealPolynomial = {};\n\n/**\n * Provides the discriminant of the quadratic equation from the supplied coefficients.\n *\n * @param {Number} a The coefficient of the 2nd order monomial.\n * @param {Number} b The coefficient of the 1st order monomial.\n * @param {Number} c The coefficient of the 0th order monomial.\n * @returns {Number} The value of the discriminant.\n */\nQuadraticRealPolynomial.computeDiscriminant = function (a, b, c) {\n //>>includeStart('debug', pragmas.debug);\n if (typeof a !== \"number\") {\n throw new DeveloperError(\"a is a required number.\");\n }\n if (typeof b !== \"number\") {\n throw new DeveloperError(\"b is a required number.\");\n }\n if (typeof c !== \"number\") {\n throw new DeveloperError(\"c is a required number.\");\n }\n //>>includeEnd('debug');\n\n var discriminant = b * b - 4.0 * a * c;\n return discriminant;\n};\n\nfunction addWithCancellationCheck(left, right, tolerance) {\n var difference = left + right;\n if (\n CesiumMath.sign(left) !== CesiumMath.sign(right) &&\n Math.abs(difference / Math.max(Math.abs(left), Math.abs(right))) < tolerance\n ) {\n return 0.0;\n }\n\n return difference;\n}\n\n/**\n * Provides the real valued roots of the quadratic polynomial with the provided coefficients.\n *\n * @param {Number} a The coefficient of the 2nd order monomial.\n * @param {Number} b The coefficient of the 1st order monomial.\n * @param {Number} c The coefficient of the 0th order monomial.\n * @returns {Number[]} The real valued roots.\n */\nQuadraticRealPolynomial.computeRealRoots = function (a, b, c) {\n //>>includeStart('debug', pragmas.debug);\n if (typeof a !== \"number\") {\n throw new DeveloperError(\"a is a required number.\");\n }\n if (typeof b !== \"number\") {\n throw new DeveloperError(\"b is a required number.\");\n }\n if (typeof c !== \"number\") {\n throw new DeveloperError(\"c is a required number.\");\n }\n //>>includeEnd('debug');\n\n var ratio;\n if (a === 0.0) {\n if (b === 0.0) {\n // Constant function: c = 0.\n return [];\n }\n\n // Linear function: b * x + c = 0.\n return [-c / b];\n } else if (b === 0.0) {\n if (c === 0.0) {\n // 2nd order monomial: a * x^2 = 0.\n return [0.0, 0.0];\n }\n\n var cMagnitude = Math.abs(c);\n var aMagnitude = Math.abs(a);\n\n if (\n cMagnitude < aMagnitude &&\n cMagnitude / aMagnitude < CesiumMath.EPSILON14\n ) {\n // c ~= 0.0.\n // 2nd order monomial: a * x^2 = 0.\n return [0.0, 0.0];\n } else if (\n cMagnitude > aMagnitude &&\n aMagnitude / cMagnitude < CesiumMath.EPSILON14\n ) {\n // a ~= 0.0.\n // Constant function: c = 0.\n return [];\n }\n\n // a * x^2 + c = 0\n ratio = -c / a;\n\n if (ratio < 0.0) {\n // Both roots are complex.\n return [];\n }\n\n // Both roots are real.\n var root = Math.sqrt(ratio);\n return [-root, root];\n } else if (c === 0.0) {\n // a * x^2 + b * x = 0\n ratio = -b / a;\n if (ratio < 0.0) {\n return [ratio, 0.0];\n }\n\n return [0.0, ratio];\n }\n\n // a * x^2 + b * x + c = 0\n var b2 = b * b;\n var four_ac = 4.0 * a * c;\n var radicand = addWithCancellationCheck(b2, -four_ac, CesiumMath.EPSILON14);\n\n if (radicand < 0.0) {\n // Both roots are complex.\n return [];\n }\n\n var q =\n -0.5 *\n addWithCancellationCheck(\n b,\n CesiumMath.sign(b) * Math.sqrt(radicand),\n CesiumMath.EPSILON14\n );\n if (b > 0.0) {\n return [q / a, c / q];\n }\n\n return [c / q, q / a];\n};\nexport default QuadraticRealPolynomial;\n","import DeveloperError from \"./DeveloperError.js\";\nimport QuadraticRealPolynomial from \"./QuadraticRealPolynomial.js\";\n\n/**\n * Defines functions for 3rd order polynomial functions of one variable with only real coefficients.\n *\n * @namespace CubicRealPolynomial\n */\nvar CubicRealPolynomial = {};\n\n/**\n * Provides the discriminant of the cubic equation from the supplied coefficients.\n *\n * @param {Number} a The coefficient of the 3rd order monomial.\n * @param {Number} b The coefficient of the 2nd order monomial.\n * @param {Number} c The coefficient of the 1st order monomial.\n * @param {Number} d The coefficient of the 0th order monomial.\n * @returns {Number} The value of the discriminant.\n */\nCubicRealPolynomial.computeDiscriminant = function (a, b, c, d) {\n //>>includeStart('debug', pragmas.debug);\n if (typeof a !== \"number\") {\n throw new DeveloperError(\"a is a required number.\");\n }\n if (typeof b !== \"number\") {\n throw new DeveloperError(\"b is a required number.\");\n }\n if (typeof c !== \"number\") {\n throw new DeveloperError(\"c is a required number.\");\n }\n if (typeof d !== \"number\") {\n throw new DeveloperError(\"d is a required number.\");\n }\n //>>includeEnd('debug');\n\n var a2 = a * a;\n var b2 = b * b;\n var c2 = c * c;\n var d2 = d * d;\n\n var discriminant =\n 18.0 * a * b * c * d +\n b2 * c2 -\n 27.0 * a2 * d2 -\n 4.0 * (a * c2 * c + b2 * b * d);\n return discriminant;\n};\n\nfunction computeRealRoots(a, b, c, d) {\n var A = a;\n var B = b / 3.0;\n var C = c / 3.0;\n var D = d;\n\n var AC = A * C;\n var BD = B * D;\n var B2 = B * B;\n var C2 = C * C;\n var delta1 = A * C - B2;\n var delta2 = A * D - B * C;\n var delta3 = B * D - C2;\n\n var discriminant = 4.0 * delta1 * delta3 - delta2 * delta2;\n var temp;\n var temp1;\n\n if (discriminant < 0.0) {\n var ABar;\n var CBar;\n var DBar;\n\n if (B2 * BD >= AC * C2) {\n ABar = A;\n CBar = delta1;\n DBar = -2.0 * B * delta1 + A * delta2;\n } else {\n ABar = D;\n CBar = delta3;\n DBar = -D * delta2 + 2.0 * C * delta3;\n }\n\n var s = DBar < 0.0 ? -1.0 : 1.0; // This is not Math.Sign()!\n var temp0 = -s * Math.abs(ABar) * Math.sqrt(-discriminant);\n temp1 = -DBar + temp0;\n\n var x = temp1 / 2.0;\n var p = x < 0.0 ? -Math.pow(-x, 1.0 / 3.0) : Math.pow(x, 1.0 / 3.0);\n var q = temp1 === temp0 ? -p : -CBar / p;\n\n temp = CBar <= 0.0 ? p + q : -DBar / (p * p + q * q + CBar);\n\n if (B2 * BD >= AC * C2) {\n return [(temp - B) / A];\n }\n\n return [-D / (temp + C)];\n }\n\n var CBarA = delta1;\n var DBarA = -2.0 * B * delta1 + A * delta2;\n\n var CBarD = delta3;\n var DBarD = -D * delta2 + 2.0 * C * delta3;\n\n var squareRootOfDiscriminant = Math.sqrt(discriminant);\n var halfSquareRootOf3 = Math.sqrt(3.0) / 2.0;\n\n var theta = Math.abs(Math.atan2(A * squareRootOfDiscriminant, -DBarA) / 3.0);\n temp = 2.0 * Math.sqrt(-CBarA);\n var cosine = Math.cos(theta);\n temp1 = temp * cosine;\n var temp3 = temp * (-cosine / 2.0 - halfSquareRootOf3 * Math.sin(theta));\n\n var numeratorLarge = temp1 + temp3 > 2.0 * B ? temp1 - B : temp3 - B;\n var denominatorLarge = A;\n\n var root1 = numeratorLarge / denominatorLarge;\n\n theta = Math.abs(Math.atan2(D * squareRootOfDiscriminant, -DBarD) / 3.0);\n temp = 2.0 * Math.sqrt(-CBarD);\n cosine = Math.cos(theta);\n temp1 = temp * cosine;\n temp3 = temp * (-cosine / 2.0 - halfSquareRootOf3 * Math.sin(theta));\n\n var numeratorSmall = -D;\n var denominatorSmall = temp1 + temp3 < 2.0 * C ? temp1 + C : temp3 + C;\n\n var root3 = numeratorSmall / denominatorSmall;\n\n var E = denominatorLarge * denominatorSmall;\n var F =\n -numeratorLarge * denominatorSmall - denominatorLarge * numeratorSmall;\n var G = numeratorLarge * numeratorSmall;\n\n var root2 = (C * F - B * G) / (-B * F + C * E);\n\n if (root1 <= root2) {\n if (root1 <= root3) {\n if (root2 <= root3) {\n return [root1, root2, root3];\n }\n return [root1, root3, root2];\n }\n return [root3, root1, root2];\n }\n if (root1 <= root3) {\n return [root2, root1, root3];\n }\n if (root2 <= root3) {\n return [root2, root3, root1];\n }\n return [root3, root2, root1];\n}\n\n/**\n * Provides the real valued roots of the cubic polynomial with the provided coefficients.\n *\n * @param {Number} a The coefficient of the 3rd order monomial.\n * @param {Number} b The coefficient of the 2nd order monomial.\n * @param {Number} c The coefficient of the 1st order monomial.\n * @param {Number} d The coefficient of the 0th order monomial.\n * @returns {Number[]} The real valued roots.\n */\nCubicRealPolynomial.computeRealRoots = function (a, b, c, d) {\n //>>includeStart('debug', pragmas.debug);\n if (typeof a !== \"number\") {\n throw new DeveloperError(\"a is a required number.\");\n }\n if (typeof b !== \"number\") {\n throw new DeveloperError(\"b is a required number.\");\n }\n if (typeof c !== \"number\") {\n throw new DeveloperError(\"c is a required number.\");\n }\n if (typeof d !== \"number\") {\n throw new DeveloperError(\"d is a required number.\");\n }\n //>>includeEnd('debug');\n\n var roots;\n var ratio;\n if (a === 0.0) {\n // Quadratic function: b * x^2 + c * x + d = 0.\n return QuadraticRealPolynomial.computeRealRoots(b, c, d);\n } else if (b === 0.0) {\n if (c === 0.0) {\n if (d === 0.0) {\n // 3rd order monomial: a * x^3 = 0.\n return [0.0, 0.0, 0.0];\n }\n\n // a * x^3 + d = 0\n ratio = -d / a;\n var root =\n ratio < 0.0 ? -Math.pow(-ratio, 1.0 / 3.0) : Math.pow(ratio, 1.0 / 3.0);\n return [root, root, root];\n } else if (d === 0.0) {\n // x * (a * x^2 + c) = 0.\n roots = QuadraticRealPolynomial.computeRealRoots(a, 0, c);\n\n // Return the roots in ascending order.\n if (roots.Length === 0) {\n return [0.0];\n }\n return [roots[0], 0.0, roots[1]];\n }\n\n // Deflated cubic polynomial: a * x^3 + c * x + d= 0.\n return computeRealRoots(a, 0, c, d);\n } else if (c === 0.0) {\n if (d === 0.0) {\n // x^2 * (a * x + b) = 0.\n ratio = -b / a;\n if (ratio < 0.0) {\n return [ratio, 0.0, 0.0];\n }\n return [0.0, 0.0, ratio];\n }\n // a * x^3 + b * x^2 + d = 0.\n return computeRealRoots(a, b, 0, d);\n } else if (d === 0.0) {\n // x * (a * x^2 + b * x + c) = 0\n roots = QuadraticRealPolynomial.computeRealRoots(a, b, c);\n\n // Return the roots in ascending order.\n if (roots.length === 0) {\n return [0.0];\n } else if (roots[1] <= 0.0) {\n return [roots[0], roots[1], 0.0];\n } else if (roots[0] >= 0.0) {\n return [0.0, roots[0], roots[1]];\n }\n return [roots[0], 0.0, roots[1]];\n }\n\n return computeRealRoots(a, b, c, d);\n};\nexport default CubicRealPolynomial;\n","import CubicRealPolynomial from \"./CubicRealPolynomial.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport CesiumMath from \"./Math.js\";\nimport QuadraticRealPolynomial from \"./QuadraticRealPolynomial.js\";\n\n/**\n * Defines functions for 4th order polynomial functions of one variable with only real coefficients.\n *\n * @namespace QuarticRealPolynomial\n */\nvar QuarticRealPolynomial = {};\n\n/**\n * Provides the discriminant of the quartic equation from the supplied coefficients.\n *\n * @param {Number} a The coefficient of the 4th order monomial.\n * @param {Number} b The coefficient of the 3rd order monomial.\n * @param {Number} c The coefficient of the 2nd order monomial.\n * @param {Number} d The coefficient of the 1st order monomial.\n * @param {Number} e The coefficient of the 0th order monomial.\n * @returns {Number} The value of the discriminant.\n */\nQuarticRealPolynomial.computeDiscriminant = function (a, b, c, d, e) {\n //>>includeStart('debug', pragmas.debug);\n if (typeof a !== \"number\") {\n throw new DeveloperError(\"a is a required number.\");\n }\n if (typeof b !== \"number\") {\n throw new DeveloperError(\"b is a required number.\");\n }\n if (typeof c !== \"number\") {\n throw new DeveloperError(\"c is a required number.\");\n }\n if (typeof d !== \"number\") {\n throw new DeveloperError(\"d is a required number.\");\n }\n if (typeof e !== \"number\") {\n throw new DeveloperError(\"e is a required number.\");\n }\n //>>includeEnd('debug');\n\n var a2 = a * a;\n var a3 = a2 * a;\n var b2 = b * b;\n var b3 = b2 * b;\n var c2 = c * c;\n var c3 = c2 * c;\n var d2 = d * d;\n var d3 = d2 * d;\n var e2 = e * e;\n var e3 = e2 * e;\n\n var discriminant =\n b2 * c2 * d2 -\n 4.0 * b3 * d3 -\n 4.0 * a * c3 * d2 +\n 18 * a * b * c * d3 -\n 27.0 * a2 * d2 * d2 +\n 256.0 * a3 * e3 +\n e *\n (18.0 * b3 * c * d -\n 4.0 * b2 * c3 +\n 16.0 * a * c2 * c2 -\n 80.0 * a * b * c2 * d -\n 6.0 * a * b2 * d2 +\n 144.0 * a2 * c * d2) +\n e2 *\n (144.0 * a * b2 * c -\n 27.0 * b2 * b2 -\n 128.0 * a2 * c2 -\n 192.0 * a2 * b * d);\n return discriminant;\n};\n\nfunction original(a3, a2, a1, a0) {\n var a3Squared = a3 * a3;\n\n var p = a2 - (3.0 * a3Squared) / 8.0;\n var q = a1 - (a2 * a3) / 2.0 + (a3Squared * a3) / 8.0;\n var r =\n a0 -\n (a1 * a3) / 4.0 +\n (a2 * a3Squared) / 16.0 -\n (3.0 * a3Squared * a3Squared) / 256.0;\n\n // Find the roots of the cubic equations: h^6 + 2 p h^4 + (p^2 - 4 r) h^2 - q^2 = 0.\n var cubicRoots = CubicRealPolynomial.computeRealRoots(\n 1.0,\n 2.0 * p,\n p * p - 4.0 * r,\n -q * q\n );\n\n if (cubicRoots.length > 0) {\n var temp = -a3 / 4.0;\n\n // Use the largest positive root.\n var hSquared = cubicRoots[cubicRoots.length - 1];\n\n if (Math.abs(hSquared) < CesiumMath.EPSILON14) {\n // y^4 + p y^2 + r = 0.\n var roots = QuadraticRealPolynomial.computeRealRoots(1.0, p, r);\n\n if (roots.length === 2) {\n var root0 = roots[0];\n var root1 = roots[1];\n\n var y;\n if (root0 >= 0.0 && root1 >= 0.0) {\n var y0 = Math.sqrt(root0);\n var y1 = Math.sqrt(root1);\n\n return [temp - y1, temp - y0, temp + y0, temp + y1];\n } else if (root0 >= 0.0 && root1 < 0.0) {\n y = Math.sqrt(root0);\n return [temp - y, temp + y];\n } else if (root0 < 0.0 && root1 >= 0.0) {\n y = Math.sqrt(root1);\n return [temp - y, temp + y];\n }\n }\n return [];\n } else if (hSquared > 0.0) {\n var h = Math.sqrt(hSquared);\n\n var m = (p + hSquared - q / h) / 2.0;\n var n = (p + hSquared + q / h) / 2.0;\n\n // Now solve the two quadratic factors: (y^2 + h y + m)(y^2 - h y + n);\n var roots1 = QuadraticRealPolynomial.computeRealRoots(1.0, h, m);\n var roots2 = QuadraticRealPolynomial.computeRealRoots(1.0, -h, n);\n\n if (roots1.length !== 0) {\n roots1[0] += temp;\n roots1[1] += temp;\n\n if (roots2.length !== 0) {\n roots2[0] += temp;\n roots2[1] += temp;\n\n if (roots1[1] <= roots2[0]) {\n return [roots1[0], roots1[1], roots2[0], roots2[1]];\n } else if (roots2[1] <= roots1[0]) {\n return [roots2[0], roots2[1], roots1[0], roots1[1]];\n } else if (roots1[0] >= roots2[0] && roots1[1] <= roots2[1]) {\n return [roots2[0], roots1[0], roots1[1], roots2[1]];\n } else if (roots2[0] >= roots1[0] && roots2[1] <= roots1[1]) {\n return [roots1[0], roots2[0], roots2[1], roots1[1]];\n } else if (roots1[0] > roots2[0] && roots1[0] < roots2[1]) {\n return [roots2[0], roots1[0], roots2[1], roots1[1]];\n }\n return [roots1[0], roots2[0], roots1[1], roots2[1]];\n }\n return roots1;\n }\n\n if (roots2.length !== 0) {\n roots2[0] += temp;\n roots2[1] += temp;\n\n return roots2;\n }\n return [];\n }\n }\n return [];\n}\n\nfunction neumark(a3, a2, a1, a0) {\n var a1Squared = a1 * a1;\n var a2Squared = a2 * a2;\n var a3Squared = a3 * a3;\n\n var p = -2.0 * a2;\n var q = a1 * a3 + a2Squared - 4.0 * a0;\n var r = a3Squared * a0 - a1 * a2 * a3 + a1Squared;\n\n var cubicRoots = CubicRealPolynomial.computeRealRoots(1.0, p, q, r);\n\n if (cubicRoots.length > 0) {\n // Use the most positive root\n var y = cubicRoots[0];\n\n var temp = a2 - y;\n var tempSquared = temp * temp;\n\n var g1 = a3 / 2.0;\n var h1 = temp / 2.0;\n\n var m = tempSquared - 4.0 * a0;\n var mError = tempSquared + 4.0 * Math.abs(a0);\n\n var n = a3Squared - 4.0 * y;\n var nError = a3Squared + 4.0 * Math.abs(y);\n\n var g2;\n var h2;\n\n if (y < 0.0 || m * nError < n * mError) {\n var squareRootOfN = Math.sqrt(n);\n g2 = squareRootOfN / 2.0;\n h2 = squareRootOfN === 0.0 ? 0.0 : (a3 * h1 - a1) / squareRootOfN;\n } else {\n var squareRootOfM = Math.sqrt(m);\n g2 = squareRootOfM === 0.0 ? 0.0 : (a3 * h1 - a1) / squareRootOfM;\n h2 = squareRootOfM / 2.0;\n }\n\n var G;\n var g;\n if (g1 === 0.0 && g2 === 0.0) {\n G = 0.0;\n g = 0.0;\n } else if (CesiumMath.sign(g1) === CesiumMath.sign(g2)) {\n G = g1 + g2;\n g = y / G;\n } else {\n g = g1 - g2;\n G = y / g;\n }\n\n var H;\n var h;\n if (h1 === 0.0 && h2 === 0.0) {\n H = 0.0;\n h = 0.0;\n } else if (CesiumMath.sign(h1) === CesiumMath.sign(h2)) {\n H = h1 + h2;\n h = a0 / H;\n } else {\n h = h1 - h2;\n H = a0 / h;\n }\n\n // Now solve the two quadratic factors: (y^2 + G y + H)(y^2 + g y + h);\n var roots1 = QuadraticRealPolynomial.computeRealRoots(1.0, G, H);\n var roots2 = QuadraticRealPolynomial.computeRealRoots(1.0, g, h);\n\n if (roots1.length !== 0) {\n if (roots2.length !== 0) {\n if (roots1[1] <= roots2[0]) {\n return [roots1[0], roots1[1], roots2[0], roots2[1]];\n } else if (roots2[1] <= roots1[0]) {\n return [roots2[0], roots2[1], roots1[0], roots1[1]];\n } else if (roots1[0] >= roots2[0] && roots1[1] <= roots2[1]) {\n return [roots2[0], roots1[0], roots1[1], roots2[1]];\n } else if (roots2[0] >= roots1[0] && roots2[1] <= roots1[1]) {\n return [roots1[0], roots2[0], roots2[1], roots1[1]];\n } else if (roots1[0] > roots2[0] && roots1[0] < roots2[1]) {\n return [roots2[0], roots1[0], roots2[1], roots1[1]];\n }\n return [roots1[0], roots2[0], roots1[1], roots2[1]];\n }\n return roots1;\n }\n if (roots2.length !== 0) {\n return roots2;\n }\n }\n return [];\n}\n\n/**\n * Provides the real valued roots of the quartic polynomial with the provided coefficients.\n *\n * @param {Number} a The coefficient of the 4th order monomial.\n * @param {Number} b The coefficient of the 3rd order monomial.\n * @param {Number} c The coefficient of the 2nd order monomial.\n * @param {Number} d The coefficient of the 1st order monomial.\n * @param {Number} e The coefficient of the 0th order monomial.\n * @returns {Number[]} The real valued roots.\n */\nQuarticRealPolynomial.computeRealRoots = function (a, b, c, d, e) {\n //>>includeStart('debug', pragmas.debug);\n if (typeof a !== \"number\") {\n throw new DeveloperError(\"a is a required number.\");\n }\n if (typeof b !== \"number\") {\n throw new DeveloperError(\"b is a required number.\");\n }\n if (typeof c !== \"number\") {\n throw new DeveloperError(\"c is a required number.\");\n }\n if (typeof d !== \"number\") {\n throw new DeveloperError(\"d is a required number.\");\n }\n if (typeof e !== \"number\") {\n throw new DeveloperError(\"e is a required number.\");\n }\n //>>includeEnd('debug');\n\n if (Math.abs(a) < CesiumMath.EPSILON15) {\n return CubicRealPolynomial.computeRealRoots(b, c, d, e);\n }\n var a3 = b / a;\n var a2 = c / a;\n var a1 = d / a;\n var a0 = e / a;\n\n var k = a3 < 0.0 ? 1 : 0;\n k += a2 < 0.0 ? k + 1 : k;\n k += a1 < 0.0 ? k + 1 : k;\n k += a0 < 0.0 ? k + 1 : k;\n\n switch (k) {\n case 0:\n return original(a3, a2, a1, a0);\n case 1:\n return neumark(a3, a2, a1, a0);\n case 2:\n return neumark(a3, a2, a1, a0);\n case 3:\n return original(a3, a2, a1, a0);\n case 4:\n return original(a3, a2, a1, a0);\n case 5:\n return neumark(a3, a2, a1, a0);\n case 6:\n return original(a3, a2, a1, a0);\n case 7:\n return original(a3, a2, a1, a0);\n case 8:\n return neumark(a3, a2, a1, a0);\n case 9:\n return original(a3, a2, a1, a0);\n case 10:\n return original(a3, a2, a1, a0);\n case 11:\n return neumark(a3, a2, a1, a0);\n case 12:\n return original(a3, a2, a1, a0);\n case 13:\n return original(a3, a2, a1, a0);\n case 14:\n return original(a3, a2, a1, a0);\n case 15:\n return original(a3, a2, a1, a0);\n default:\n return undefined;\n }\n};\nexport default QuarticRealPolynomial;\n","import Cartesian3 from \"./Cartesian3.js\";\nimport Check from \"./Check.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\n\n/**\n * Represents a ray that extends infinitely from the provided origin in the provided direction.\n * @alias Ray\n * @constructor\n *\n * @param {Cartesian3} [origin=Cartesian3.ZERO] The origin of the ray.\n * @param {Cartesian3} [direction=Cartesian3.ZERO] The direction of the ray.\n */\nfunction Ray(origin, direction) {\n direction = Cartesian3.clone(defaultValue(direction, Cartesian3.ZERO));\n if (!Cartesian3.equals(direction, Cartesian3.ZERO)) {\n Cartesian3.normalize(direction, direction);\n }\n\n /**\n * The origin of the ray.\n * @type {Cartesian3}\n * @default {@link Cartesian3.ZERO}\n */\n this.origin = Cartesian3.clone(defaultValue(origin, Cartesian3.ZERO));\n\n /**\n * The direction of the ray.\n * @type {Cartesian3}\n */\n this.direction = direction;\n}\n\n/**\n * Duplicates a Ray instance.\n *\n * @param {Ray} ray The ray to duplicate.\n * @param {Ray} [result] The object onto which to store the result.\n * @returns {Ray} The modified result parameter or a new Ray instance if one was not provided. (Returns undefined if ray is undefined)\n */\nRay.clone = function (ray, result) {\n if (!defined(ray)) {\n return undefined;\n }\n if (!defined(result)) {\n return new Ray(ray.origin, ray.direction);\n }\n result.origin = Cartesian3.clone(ray.origin);\n result.direction = Cartesian3.clone(ray.direction);\n return result;\n};\n\n/**\n * Computes the point along the ray given by r(t) = o + t*d,\n * where o is the origin of the ray and d is the direction.\n *\n * @param {Ray} ray The ray.\n * @param {Number} t A scalar value.\n * @param {Cartesian3} [result] The object in which the result will be stored.\n * @returns {Cartesian3} The modified result parameter, or a new instance if none was provided.\n *\n * @example\n * //Get the first intersection point of a ray and an ellipsoid.\n * var intersection = Cesium.IntersectionTests.rayEllipsoid(ray, ellipsoid);\n * var point = Cesium.Ray.getPoint(ray, intersection.start);\n */\nRay.getPoint = function (ray, t, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"ray\", ray);\n Check.typeOf.number(\"t\", t);\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n result = new Cartesian3();\n }\n\n result = Cartesian3.multiplyByScalar(ray.direction, t, result);\n return Cartesian3.add(ray.origin, result, result);\n};\nexport default Ray;\n","import Cartesian3 from \"./Cartesian3.js\";\nimport Cartographic from \"./Cartographic.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Interval from \"./Interval.js\";\nimport CesiumMath from \"./Math.js\";\nimport Matrix3 from \"./Matrix3.js\";\nimport QuadraticRealPolynomial from \"./QuadraticRealPolynomial.js\";\nimport QuarticRealPolynomial from \"./QuarticRealPolynomial.js\";\nimport Ray from \"./Ray.js\";\n\n/**\n * Functions for computing the intersection between geometries such as rays, planes, triangles, and ellipsoids.\n *\n * @namespace IntersectionTests\n */\nvar IntersectionTests = {};\n\n/**\n * Computes the intersection of a ray and a plane.\n *\n * @param {Ray} ray The ray.\n * @param {Plane} plane The plane.\n * @param {Cartesian3} [result] The object onto which to store the result.\n * @returns {Cartesian3} The intersection point or undefined if there is no intersections.\n */\nIntersectionTests.rayPlane = function (ray, plane, result) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(ray)) {\n throw new DeveloperError(\"ray is required.\");\n }\n if (!defined(plane)) {\n throw new DeveloperError(\"plane is required.\");\n }\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n result = new Cartesian3();\n }\n\n var origin = ray.origin;\n var direction = ray.direction;\n var normal = plane.normal;\n var denominator = Cartesian3.dot(normal, direction);\n\n if (Math.abs(denominator) < CesiumMath.EPSILON15) {\n // Ray is parallel to plane. The ray may be in the polygon's plane.\n return undefined;\n }\n\n var t = (-plane.distance - Cartesian3.dot(normal, origin)) / denominator;\n\n if (t < 0) {\n return undefined;\n }\n\n result = Cartesian3.multiplyByScalar(direction, t, result);\n return Cartesian3.add(origin, result, result);\n};\n\nvar scratchEdge0 = new Cartesian3();\nvar scratchEdge1 = new Cartesian3();\nvar scratchPVec = new Cartesian3();\nvar scratchTVec = new Cartesian3();\nvar scratchQVec = new Cartesian3();\n\n/**\n * Computes the intersection of a ray and a triangle as a parametric distance along the input ray. The result is negative when the triangle is behind the ray.\n *\n * Implements {@link https://cadxfem.org/inf/Fast%20MinimumStorage%20RayTriangle%20Intersection.pdf|\n * Fast Minimum Storage Ray/Triangle Intersection} by Tomas Moller and Ben Trumbore.\n *\n * @memberof IntersectionTests\n *\n * @param {Ray} ray The ray.\n * @param {Cartesian3} p0 The first vertex of the triangle.\n * @param {Cartesian3} p1 The second vertex of the triangle.\n * @param {Cartesian3} p2 The third vertex of the triangle.\n * @param {Boolean} [cullBackFaces=false] If <code>true</code>, will only compute an intersection with the front face of the triangle\n * and return undefined for intersections with the back face.\n * @returns {Number} The intersection as a parametric distance along the ray, or undefined if there is no intersection.\n */\nIntersectionTests.rayTriangleParametric = function (\n ray,\n p0,\n p1,\n p2,\n cullBackFaces\n) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(ray)) {\n throw new DeveloperError(\"ray is required.\");\n }\n if (!defined(p0)) {\n throw new DeveloperError(\"p0 is required.\");\n }\n if (!defined(p1)) {\n throw new DeveloperError(\"p1 is required.\");\n }\n if (!defined(p2)) {\n throw new DeveloperError(\"p2 is required.\");\n }\n //>>includeEnd('debug');\n\n cullBackFaces = defaultValue(cullBackFaces, false);\n\n var origin = ray.origin;\n var direction = ray.direction;\n\n var edge0 = Cartesian3.subtract(p1, p0, scratchEdge0);\n var edge1 = Cartesian3.subtract(p2, p0, scratchEdge1);\n\n var p = Cartesian3.cross(direction, edge1, scratchPVec);\n var det = Cartesian3.dot(edge0, p);\n\n var tvec;\n var q;\n\n var u;\n var v;\n var t;\n\n if (cullBackFaces) {\n if (det < CesiumMath.EPSILON6) {\n return undefined;\n }\n\n tvec = Cartesian3.subtract(origin, p0, scratchTVec);\n u = Cartesian3.dot(tvec, p);\n if (u < 0.0 || u > det) {\n return undefined;\n }\n\n q = Cartesian3.cross(tvec, edge0, scratchQVec);\n\n v = Cartesian3.dot(direction, q);\n if (v < 0.0 || u + v > det) {\n return undefined;\n }\n\n t = Cartesian3.dot(edge1, q) / det;\n } else {\n if (Math.abs(det) < CesiumMath.EPSILON6) {\n return undefined;\n }\n var invDet = 1.0 / det;\n\n tvec = Cartesian3.subtract(origin, p0, scratchTVec);\n u = Cartesian3.dot(tvec, p) * invDet;\n if (u < 0.0 || u > 1.0) {\n return undefined;\n }\n\n q = Cartesian3.cross(tvec, edge0, scratchQVec);\n\n v = Cartesian3.dot(direction, q) * invDet;\n if (v < 0.0 || u + v > 1.0) {\n return undefined;\n }\n\n t = Cartesian3.dot(edge1, q) * invDet;\n }\n\n return t;\n};\n\n/**\n * Computes the intersection of a ray and a triangle as a Cartesian3 coordinate.\n *\n * Implements {@link https://cadxfem.org/inf/Fast%20MinimumStorage%20RayTriangle%20Intersection.pdf|\n * Fast Minimum Storage Ray/Triangle Intersection} by Tomas Moller and Ben Trumbore.\n *\n * @memberof IntersectionTests\n *\n * @param {Ray} ray The ray.\n * @param {Cartesian3} p0 The first vertex of the triangle.\n * @param {Cartesian3} p1 The second vertex of the triangle.\n * @param {Cartesian3} p2 The third vertex of the triangle.\n * @param {Boolean} [cullBackFaces=false] If <code>true</code>, will only compute an intersection with the front face of the triangle\n * and return undefined for intersections with the back face.\n * @param {Cartesian3} [result] The <code>Cartesian3</code> onto which to store the result.\n * @returns {Cartesian3} The intersection point or undefined if there is no intersections.\n */\nIntersectionTests.rayTriangle = function (\n ray,\n p0,\n p1,\n p2,\n cullBackFaces,\n result\n) {\n var t = IntersectionTests.rayTriangleParametric(\n ray,\n p0,\n p1,\n p2,\n cullBackFaces\n );\n if (!defined(t) || t < 0.0) {\n return undefined;\n }\n\n if (!defined(result)) {\n result = new Cartesian3();\n }\n\n Cartesian3.multiplyByScalar(ray.direction, t, result);\n return Cartesian3.add(ray.origin, result, result);\n};\n\nvar scratchLineSegmentTriangleRay = new Ray();\n\n/**\n * Computes the intersection of a line segment and a triangle.\n * @memberof IntersectionTests\n *\n * @param {Cartesian3} v0 The an end point of the line segment.\n * @param {Cartesian3} v1 The other end point of the line segment.\n * @param {Cartesian3} p0 The first vertex of the triangle.\n * @param {Cartesian3} p1 The second vertex of the triangle.\n * @param {Cartesian3} p2 The third vertex of the triangle.\n * @param {Boolean} [cullBackFaces=false] If <code>true</code>, will only compute an intersection with the front face of the triangle\n * and return undefined for intersections with the back face.\n * @param {Cartesian3} [result] The <code>Cartesian3</code> onto which to store the result.\n * @returns {Cartesian3} The intersection point or undefined if there is no intersections.\n */\nIntersectionTests.lineSegmentTriangle = function (\n v0,\n v1,\n p0,\n p1,\n p2,\n cullBackFaces,\n result\n) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(v0)) {\n throw new DeveloperError(\"v0 is required.\");\n }\n if (!defined(v1)) {\n throw new DeveloperError(\"v1 is required.\");\n }\n if (!defined(p0)) {\n throw new DeveloperError(\"p0 is required.\");\n }\n if (!defined(p1)) {\n throw new DeveloperError(\"p1 is required.\");\n }\n if (!defined(p2)) {\n throw new DeveloperError(\"p2 is required.\");\n }\n //>>includeEnd('debug');\n\n var ray = scratchLineSegmentTriangleRay;\n Cartesian3.clone(v0, ray.origin);\n Cartesian3.subtract(v1, v0, ray.direction);\n Cartesian3.normalize(ray.direction, ray.direction);\n\n var t = IntersectionTests.rayTriangleParametric(\n ray,\n p0,\n p1,\n p2,\n cullBackFaces\n );\n if (!defined(t) || t < 0.0 || t > Cartesian3.distance(v0, v1)) {\n return undefined;\n }\n\n if (!defined(result)) {\n result = new Cartesian3();\n }\n\n Cartesian3.multiplyByScalar(ray.direction, t, result);\n return Cartesian3.add(ray.origin, result, result);\n};\n\nfunction solveQuadratic(a, b, c, result) {\n var det = b * b - 4.0 * a * c;\n if (det < 0.0) {\n return undefined;\n } else if (det > 0.0) {\n var denom = 1.0 / (2.0 * a);\n var disc = Math.sqrt(det);\n var root0 = (-b + disc) * denom;\n var root1 = (-b - disc) * denom;\n\n if (root0 < root1) {\n result.root0 = root0;\n result.root1 = root1;\n } else {\n result.root0 = root1;\n result.root1 = root0;\n }\n\n return result;\n }\n\n var root = -b / (2.0 * a);\n if (root === 0.0) {\n return undefined;\n }\n\n result.root0 = result.root1 = root;\n return result;\n}\n\nvar raySphereRoots = {\n root0: 0.0,\n root1: 0.0,\n};\n\nfunction raySphere(ray, sphere, result) {\n if (!defined(result)) {\n result = new Interval();\n }\n\n var origin = ray.origin;\n var direction = ray.direction;\n\n var center = sphere.center;\n var radiusSquared = sphere.radius * sphere.radius;\n\n var diff = Cartesian3.subtract(origin, center, scratchPVec);\n\n var a = Cartesian3.dot(direction, direction);\n var b = 2.0 * Cartesian3.dot(direction, diff);\n var c = Cartesian3.magnitudeSquared(diff) - radiusSquared;\n\n var roots = solveQuadratic(a, b, c, raySphereRoots);\n if (!defined(roots)) {\n return undefined;\n }\n\n result.start = roots.root0;\n result.stop = roots.root1;\n return result;\n}\n\n/**\n * Computes the intersection points of a ray with a sphere.\n * @memberof IntersectionTests\n *\n * @param {Ray} ray The ray.\n * @param {BoundingSphere} sphere The sphere.\n * @param {Interval} [result] The result onto which to store the result.\n * @returns {Interval} The interval containing scalar points along the ray or undefined if there are no intersections.\n */\nIntersectionTests.raySphere = function (ray, sphere, result) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(ray)) {\n throw new DeveloperError(\"ray is required.\");\n }\n if (!defined(sphere)) {\n throw new DeveloperError(\"sphere is required.\");\n }\n //>>includeEnd('debug');\n\n result = raySphere(ray, sphere, result);\n if (!defined(result) || result.stop < 0.0) {\n return undefined;\n }\n\n result.start = Math.max(result.start, 0.0);\n return result;\n};\n\nvar scratchLineSegmentRay = new Ray();\n\n/**\n * Computes the intersection points of a line segment with a sphere.\n * @memberof IntersectionTests\n *\n * @param {Cartesian3} p0 An end point of the line segment.\n * @param {Cartesian3} p1 The other end point of the line segment.\n * @param {BoundingSphere} sphere The sphere.\n * @param {Interval} [result] The result onto which to store the result.\n * @returns {Interval} The interval containing scalar points along the ray or undefined if there are no intersections.\n */\nIntersectionTests.lineSegmentSphere = function (p0, p1, sphere, result) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(p0)) {\n throw new DeveloperError(\"p0 is required.\");\n }\n if (!defined(p1)) {\n throw new DeveloperError(\"p1 is required.\");\n }\n if (!defined(sphere)) {\n throw new DeveloperError(\"sphere is required.\");\n }\n //>>includeEnd('debug');\n\n var ray = scratchLineSegmentRay;\n Cartesian3.clone(p0, ray.origin);\n var direction = Cartesian3.subtract(p1, p0, ray.direction);\n\n var maxT = Cartesian3.magnitude(direction);\n Cartesian3.normalize(direction, direction);\n\n result = raySphere(ray, sphere, result);\n if (!defined(result) || result.stop < 0.0 || result.start > maxT) {\n return undefined;\n }\n\n result.start = Math.max(result.start, 0.0);\n result.stop = Math.min(result.stop, maxT);\n return result;\n};\n\nvar scratchQ = new Cartesian3();\nvar scratchW = new Cartesian3();\n\n/**\n * Computes the intersection points of a ray with an ellipsoid.\n *\n * @param {Ray} ray The ray.\n * @param {Ellipsoid} ellipsoid The ellipsoid.\n * @returns {Interval} The interval containing scalar points along the ray or undefined if there are no intersections.\n */\nIntersectionTests.rayEllipsoid = function (ray, ellipsoid) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(ray)) {\n throw new DeveloperError(\"ray is required.\");\n }\n if (!defined(ellipsoid)) {\n throw new DeveloperError(\"ellipsoid is required.\");\n }\n //>>includeEnd('debug');\n\n var inverseRadii = ellipsoid.oneOverRadii;\n var q = Cartesian3.multiplyComponents(inverseRadii, ray.origin, scratchQ);\n var w = Cartesian3.multiplyComponents(inverseRadii, ray.direction, scratchW);\n\n var q2 = Cartesian3.magnitudeSquared(q);\n var qw = Cartesian3.dot(q, w);\n\n var difference, w2, product, discriminant, temp;\n\n if (q2 > 1.0) {\n // Outside ellipsoid.\n if (qw >= 0.0) {\n // Looking outward or tangent (0 intersections).\n return undefined;\n }\n\n // qw < 0.0.\n var qw2 = qw * qw;\n difference = q2 - 1.0; // Positively valued.\n w2 = Cartesian3.magnitudeSquared(w);\n product = w2 * difference;\n\n if (qw2 < product) {\n // Imaginary roots (0 intersections).\n return undefined;\n } else if (qw2 > product) {\n // Distinct roots (2 intersections).\n discriminant = qw * qw - product;\n temp = -qw + Math.sqrt(discriminant); // Avoid cancellation.\n var root0 = temp / w2;\n var root1 = difference / temp;\n if (root0 < root1) {\n return new Interval(root0, root1);\n }\n\n return {\n start: root1,\n stop: root0,\n };\n }\n // qw2 == product. Repeated roots (2 intersections).\n var root = Math.sqrt(difference / w2);\n return new Interval(root, root);\n } else if (q2 < 1.0) {\n // Inside ellipsoid (2 intersections).\n difference = q2 - 1.0; // Negatively valued.\n w2 = Cartesian3.magnitudeSquared(w);\n product = w2 * difference; // Negatively valued.\n\n discriminant = qw * qw - product;\n temp = -qw + Math.sqrt(discriminant); // Positively valued.\n return new Interval(0.0, temp / w2);\n }\n // q2 == 1.0. On ellipsoid.\n if (qw < 0.0) {\n // Looking inward.\n w2 = Cartesian3.magnitudeSquared(w);\n return new Interval(0.0, -qw / w2);\n }\n\n // qw >= 0.0. Looking outward or tangent.\n return undefined;\n};\n\nfunction addWithCancellationCheck(left, right, tolerance) {\n var difference = left + right;\n if (\n CesiumMath.sign(left) !== CesiumMath.sign(right) &&\n Math.abs(difference / Math.max(Math.abs(left), Math.abs(right))) < tolerance\n ) {\n return 0.0;\n }\n\n return difference;\n}\n\nfunction quadraticVectorExpression(A, b, c, x, w) {\n var xSquared = x * x;\n var wSquared = w * w;\n\n var l2 = (A[Matrix3.COLUMN1ROW1] - A[Matrix3.COLUMN2ROW2]) * wSquared;\n var l1 =\n w *\n (x *\n addWithCancellationCheck(\n A[Matrix3.COLUMN1ROW0],\n A[Matrix3.COLUMN0ROW1],\n CesiumMath.EPSILON15\n ) +\n b.y);\n var l0 =\n A[Matrix3.COLUMN0ROW0] * xSquared +\n A[Matrix3.COLUMN2ROW2] * wSquared +\n x * b.x +\n c;\n\n var r1 =\n wSquared *\n addWithCancellationCheck(\n A[Matrix3.COLUMN2ROW1],\n A[Matrix3.COLUMN1ROW2],\n CesiumMath.EPSILON15\n );\n var r0 =\n w *\n (x *\n addWithCancellationCheck(A[Matrix3.COLUMN2ROW0], A[Matrix3.COLUMN0ROW2]) +\n b.z);\n\n var cosines;\n var solutions = [];\n if (r0 === 0.0 && r1 === 0.0) {\n cosines = QuadraticRealPolynomial.computeRealRoots(l2, l1, l0);\n if (cosines.length === 0) {\n return solutions;\n }\n\n var cosine0 = cosines[0];\n var sine0 = Math.sqrt(Math.max(1.0 - cosine0 * cosine0, 0.0));\n solutions.push(new Cartesian3(x, w * cosine0, w * -sine0));\n solutions.push(new Cartesian3(x, w * cosine0, w * sine0));\n\n if (cosines.length === 2) {\n var cosine1 = cosines[1];\n var sine1 = Math.sqrt(Math.max(1.0 - cosine1 * cosine1, 0.0));\n solutions.push(new Cartesian3(x, w * cosine1, w * -sine1));\n solutions.push(new Cartesian3(x, w * cosine1, w * sine1));\n }\n\n return solutions;\n }\n\n var r0Squared = r0 * r0;\n var r1Squared = r1 * r1;\n var l2Squared = l2 * l2;\n var r0r1 = r0 * r1;\n\n var c4 = l2Squared + r1Squared;\n var c3 = 2.0 * (l1 * l2 + r0r1);\n var c2 = 2.0 * l0 * l2 + l1 * l1 - r1Squared + r0Squared;\n var c1 = 2.0 * (l0 * l1 - r0r1);\n var c0 = l0 * l0 - r0Squared;\n\n if (c4 === 0.0 && c3 === 0.0 && c2 === 0.0 && c1 === 0.0) {\n return solutions;\n }\n\n cosines = QuarticRealPolynomial.computeRealRoots(c4, c3, c2, c1, c0);\n var length = cosines.length;\n if (length === 0) {\n return solutions;\n }\n\n for (var i = 0; i < length; ++i) {\n var cosine = cosines[i];\n var cosineSquared = cosine * cosine;\n var sineSquared = Math.max(1.0 - cosineSquared, 0.0);\n var sine = Math.sqrt(sineSquared);\n\n //var left = l2 * cosineSquared + l1 * cosine + l0;\n var left;\n if (CesiumMath.sign(l2) === CesiumMath.sign(l0)) {\n left = addWithCancellationCheck(\n l2 * cosineSquared + l0,\n l1 * cosine,\n CesiumMath.EPSILON12\n );\n } else if (CesiumMath.sign(l0) === CesiumMath.sign(l1 * cosine)) {\n left = addWithCancellationCheck(\n l2 * cosineSquared,\n l1 * cosine + l0,\n CesiumMath.EPSILON12\n );\n } else {\n left = addWithCancellationCheck(\n l2 * cosineSquared + l1 * cosine,\n l0,\n CesiumMath.EPSILON12\n );\n }\n\n var right = addWithCancellationCheck(r1 * cosine, r0, CesiumMath.EPSILON15);\n var product = left * right;\n\n if (product < 0.0) {\n solutions.push(new Cartesian3(x, w * cosine, w * sine));\n } else if (product > 0.0) {\n solutions.push(new Cartesian3(x, w * cosine, w * -sine));\n } else if (sine !== 0.0) {\n solutions.push(new Cartesian3(x, w * cosine, w * -sine));\n solutions.push(new Cartesian3(x, w * cosine, w * sine));\n ++i;\n } else {\n solutions.push(new Cartesian3(x, w * cosine, w * sine));\n }\n }\n\n return solutions;\n}\n\nvar firstAxisScratch = new Cartesian3();\nvar secondAxisScratch = new Cartesian3();\nvar thirdAxisScratch = new Cartesian3();\nvar referenceScratch = new Cartesian3();\nvar bCart = new Cartesian3();\nvar bScratch = new Matrix3();\nvar btScratch = new Matrix3();\nvar diScratch = new Matrix3();\nvar dScratch = new Matrix3();\nvar cScratch = new Matrix3();\nvar tempMatrix = new Matrix3();\nvar aScratch = new Matrix3();\nvar sScratch = new Cartesian3();\nvar closestScratch = new Cartesian3();\nvar surfPointScratch = new Cartographic();\n\n/**\n * Provides the point along the ray which is nearest to the ellipsoid.\n *\n * @param {Ray} ray The ray.\n * @param {Ellipsoid} ellipsoid The ellipsoid.\n * @returns {Cartesian3} The nearest planetodetic point on the ray.\n */\nIntersectionTests.grazingAltitudeLocation = function (ray, ellipsoid) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(ray)) {\n throw new DeveloperError(\"ray is required.\");\n }\n if (!defined(ellipsoid)) {\n throw new DeveloperError(\"ellipsoid is required.\");\n }\n //>>includeEnd('debug');\n\n var position = ray.origin;\n var direction = ray.direction;\n\n if (!Cartesian3.equals(position, Cartesian3.ZERO)) {\n var normal = ellipsoid.geodeticSurfaceNormal(position, firstAxisScratch);\n if (Cartesian3.dot(direction, normal) >= 0.0) {\n // The location provided is the closest point in altitude\n return position;\n }\n }\n\n var intersects = defined(this.rayEllipsoid(ray, ellipsoid));\n\n // Compute the scaled direction vector.\n var f = ellipsoid.transformPositionToScaledSpace(direction, firstAxisScratch);\n\n // Constructs a basis from the unit scaled direction vector. Construct its rotation and transpose.\n var firstAxis = Cartesian3.normalize(f, f);\n var reference = Cartesian3.mostOrthogonalAxis(f, referenceScratch);\n var secondAxis = Cartesian3.normalize(\n Cartesian3.cross(reference, firstAxis, secondAxisScratch),\n secondAxisScratch\n );\n var thirdAxis = Cartesian3.normalize(\n Cartesian3.cross(firstAxis, secondAxis, thirdAxisScratch),\n thirdAxisScratch\n );\n var B = bScratch;\n B[0] = firstAxis.x;\n B[1] = firstAxis.y;\n B[2] = firstAxis.z;\n B[3] = secondAxis.x;\n B[4] = secondAxis.y;\n B[5] = secondAxis.z;\n B[6] = thirdAxis.x;\n B[7] = thirdAxis.y;\n B[8] = thirdAxis.z;\n\n var B_T = Matrix3.transpose(B, btScratch);\n\n // Get the scaling matrix and its inverse.\n var D_I = Matrix3.fromScale(ellipsoid.radii, diScratch);\n var D = Matrix3.fromScale(ellipsoid.oneOverRadii, dScratch);\n\n var C = cScratch;\n C[0] = 0.0;\n C[1] = -direction.z;\n C[2] = direction.y;\n C[3] = direction.z;\n C[4] = 0.0;\n C[5] = -direction.x;\n C[6] = -direction.y;\n C[7] = direction.x;\n C[8] = 0.0;\n\n var temp = Matrix3.multiply(\n Matrix3.multiply(B_T, D, tempMatrix),\n C,\n tempMatrix\n );\n var A = Matrix3.multiply(Matrix3.multiply(temp, D_I, aScratch), B, aScratch);\n var b = Matrix3.multiplyByVector(temp, position, bCart);\n\n // Solve for the solutions to the expression in standard form:\n var solutions = quadraticVectorExpression(\n A,\n Cartesian3.negate(b, firstAxisScratch),\n 0.0,\n 0.0,\n 1.0\n );\n\n var s;\n var altitude;\n var length = solutions.length;\n if (length > 0) {\n var closest = Cartesian3.clone(Cartesian3.ZERO, closestScratch);\n var maximumValue = Number.NEGATIVE_INFINITY;\n\n for (var i = 0; i < length; ++i) {\n s = Matrix3.multiplyByVector(\n D_I,\n Matrix3.multiplyByVector(B, solutions[i], sScratch),\n sScratch\n );\n var v = Cartesian3.normalize(\n Cartesian3.subtract(s, position, referenceScratch),\n referenceScratch\n );\n var dotProduct = Cartesian3.dot(v, direction);\n\n if (dotProduct > maximumValue) {\n maximumValue = dotProduct;\n closest = Cartesian3.clone(s, closest);\n }\n }\n\n var surfacePoint = ellipsoid.cartesianToCartographic(\n closest,\n surfPointScratch\n );\n maximumValue = CesiumMath.clamp(maximumValue, 0.0, 1.0);\n altitude =\n Cartesian3.magnitude(\n Cartesian3.subtract(closest, position, referenceScratch)\n ) * Math.sqrt(1.0 - maximumValue * maximumValue);\n altitude = intersects ? -altitude : altitude;\n surfacePoint.height = altitude;\n return ellipsoid.cartographicToCartesian(surfacePoint, new Cartesian3());\n }\n\n return undefined;\n};\n\nvar lineSegmentPlaneDifference = new Cartesian3();\n\n/**\n * Computes the intersection of a line segment and a plane.\n *\n * @param {Cartesian3} endPoint0 An end point of the line segment.\n * @param {Cartesian3} endPoint1 The other end point of the line segment.\n * @param {Plane} plane The plane.\n * @param {Cartesian3} [result] The object onto which to store the result.\n * @returns {Cartesian3} The intersection point or undefined if there is no intersection.\n *\n * @example\n * var origin = Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883);\n * var normal = ellipsoid.geodeticSurfaceNormal(origin);\n * var plane = Cesium.Plane.fromPointNormal(origin, normal);\n *\n * var p0 = new Cesium.Cartesian3(...);\n * var p1 = new Cesium.Cartesian3(...);\n *\n * // find the intersection of the line segment from p0 to p1 and the tangent plane at origin.\n * var intersection = Cesium.IntersectionTests.lineSegmentPlane(p0, p1, plane);\n */\nIntersectionTests.lineSegmentPlane = function (\n endPoint0,\n endPoint1,\n plane,\n result\n) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(endPoint0)) {\n throw new DeveloperError(\"endPoint0 is required.\");\n }\n if (!defined(endPoint1)) {\n throw new DeveloperError(\"endPoint1 is required.\");\n }\n if (!defined(plane)) {\n throw new DeveloperError(\"plane is required.\");\n }\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n result = new Cartesian3();\n }\n\n var difference = Cartesian3.subtract(\n endPoint1,\n endPoint0,\n lineSegmentPlaneDifference\n );\n var normal = plane.normal;\n var nDotDiff = Cartesian3.dot(normal, difference);\n\n // check if the segment and plane are parallel\n if (Math.abs(nDotDiff) < CesiumMath.EPSILON6) {\n return undefined;\n }\n\n var nDotP0 = Cartesian3.dot(normal, endPoint0);\n var t = -(plane.distance + nDotP0) / nDotDiff;\n\n // intersection only if t is in [0, 1]\n if (t < 0.0 || t > 1.0) {\n return undefined;\n }\n\n // intersection is endPoint0 + t * (endPoint1 - endPoint0)\n Cartesian3.multiplyByScalar(difference, t, result);\n Cartesian3.add(endPoint0, result, result);\n return result;\n};\n\n/**\n * Computes the intersection of a triangle and a plane\n *\n * @param {Cartesian3} p0 First point of the triangle\n * @param {Cartesian3} p1 Second point of the triangle\n * @param {Cartesian3} p2 Third point of the triangle\n * @param {Plane} plane Intersection plane\n * @returns {Object} An object with properties <code>positions</code> and <code>indices</code>, which are arrays that represent three triangles that do not cross the plane. (Undefined if no intersection exists)\n *\n * @example\n * var origin = Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883);\n * var normal = ellipsoid.geodeticSurfaceNormal(origin);\n * var plane = Cesium.Plane.fromPointNormal(origin, normal);\n *\n * var p0 = new Cesium.Cartesian3(...);\n * var p1 = new Cesium.Cartesian3(...);\n * var p2 = new Cesium.Cartesian3(...);\n *\n * // convert the triangle composed of points (p0, p1, p2) to three triangles that don't cross the plane\n * var triangles = Cesium.IntersectionTests.trianglePlaneIntersection(p0, p1, p2, plane);\n */\nIntersectionTests.trianglePlaneIntersection = function (p0, p1, p2, plane) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(p0) || !defined(p1) || !defined(p2) || !defined(plane)) {\n throw new DeveloperError(\"p0, p1, p2, and plane are required.\");\n }\n //>>includeEnd('debug');\n\n var planeNormal = plane.normal;\n var planeD = plane.distance;\n var p0Behind = Cartesian3.dot(planeNormal, p0) + planeD < 0.0;\n var p1Behind = Cartesian3.dot(planeNormal, p1) + planeD < 0.0;\n var p2Behind = Cartesian3.dot(planeNormal, p2) + planeD < 0.0;\n // Given these dots products, the calls to lineSegmentPlaneIntersection\n // always have defined results.\n\n var numBehind = 0;\n numBehind += p0Behind ? 1 : 0;\n numBehind += p1Behind ? 1 : 0;\n numBehind += p2Behind ? 1 : 0;\n\n var u1, u2;\n if (numBehind === 1 || numBehind === 2) {\n u1 = new Cartesian3();\n u2 = new Cartesian3();\n }\n\n if (numBehind === 1) {\n if (p0Behind) {\n IntersectionTests.lineSegmentPlane(p0, p1, plane, u1);\n IntersectionTests.lineSegmentPlane(p0, p2, plane, u2);\n\n return {\n positions: [p0, p1, p2, u1, u2],\n indices: [\n // Behind\n 0,\n 3,\n 4,\n\n // In front\n 1,\n 2,\n 4,\n 1,\n 4,\n 3,\n ],\n };\n } else if (p1Behind) {\n IntersectionTests.lineSegmentPlane(p1, p2, plane, u1);\n IntersectionTests.lineSegmentPlane(p1, p0, plane, u2);\n\n return {\n positions: [p0, p1, p2, u1, u2],\n indices: [\n // Behind\n 1,\n 3,\n 4,\n\n // In front\n 2,\n 0,\n 4,\n 2,\n 4,\n 3,\n ],\n };\n } else if (p2Behind) {\n IntersectionTests.lineSegmentPlane(p2, p0, plane, u1);\n IntersectionTests.lineSegmentPlane(p2, p1, plane, u2);\n\n return {\n positions: [p0, p1, p2, u1, u2],\n indices: [\n // Behind\n 2,\n 3,\n 4,\n\n // In front\n 0,\n 1,\n 4,\n 0,\n 4,\n 3,\n ],\n };\n }\n } else if (numBehind === 2) {\n if (!p0Behind) {\n IntersectionTests.lineSegmentPlane(p1, p0, plane, u1);\n IntersectionTests.lineSegmentPlane(p2, p0, plane, u2);\n\n return {\n positions: [p0, p1, p2, u1, u2],\n indices: [\n // Behind\n 1,\n 2,\n 4,\n 1,\n 4,\n 3,\n\n // In front\n 0,\n 3,\n 4,\n ],\n };\n } else if (!p1Behind) {\n IntersectionTests.lineSegmentPlane(p2, p1, plane, u1);\n IntersectionTests.lineSegmentPlane(p0, p1, plane, u2);\n\n return {\n positions: [p0, p1, p2, u1, u2],\n indices: [\n // Behind\n 2,\n 0,\n 4,\n 2,\n 4,\n 3,\n\n // In front\n 1,\n 3,\n 4,\n ],\n };\n } else if (!p2Behind) {\n IntersectionTests.lineSegmentPlane(p0, p2, plane, u1);\n IntersectionTests.lineSegmentPlane(p1, p2, plane, u2);\n\n return {\n positions: [p0, p1, p2, u1, u2],\n indices: [\n // Behind\n 0,\n 1,\n 4,\n 0,\n 4,\n 3,\n\n // In front\n 2,\n 3,\n 4,\n ],\n };\n }\n }\n\n // if numBehind is 3, the triangle is completely behind the plane;\n // otherwise, it is completely in front (numBehind is 0).\n return undefined;\n};\nexport default IntersectionTests;\n"],"names":["DeveloperError","CesiumMath","Cartesian3","defaultValue","defined","Check","Interval","addWithCancellationCheck","Matrix3","Cartographic"],"mappings":"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"}
|