@math.gl/culling 3.5.3 → 3.5.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -125,12 +125,13 @@ function makeOrientedBoundingBoxFromPoints(positions) {
125
125
  try {
126
126
  for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
127
127
  var _position2 = _step3.value;
128
- u1 = Math.max(_position2.dot(v1), u1);
129
- u2 = Math.max(_position2.dot(v2), u2);
130
- u3 = Math.max(_position2.dot(v3), u3);
131
- l1 = Math.min(_position2.dot(v1), l1);
132
- l2 = Math.min(_position2.dot(v2), l2);
133
- l3 = Math.min(_position2.dot(v3), l3);
128
+ scratchVector2.copy(_position2);
129
+ u1 = Math.max(scratchVector2.dot(v1), u1);
130
+ u2 = Math.max(scratchVector2.dot(v2), u2);
131
+ u3 = Math.max(scratchVector2.dot(v3), u3);
132
+ l1 = Math.min(scratchVector2.dot(v1), l1);
133
+ l2 = Math.min(scratchVector2.dot(v2), l2);
134
+ l3 = Math.min(scratchVector2.dot(v3), l3);
134
135
  }
135
136
  } catch (err) {
136
137
  _iterator3.e(err);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/algorithms/bounding-box-from-points.js"],"names":["scratchVector2","Vector3","scratchVector3","scratchVector4","scratchVector5","scratchVector6","scratchCovarianceResult","Matrix3","scratchEigenResult","diagonal","unitary","makeOrientedBoundingBoxFromPoints","positions","result","OrientedBoundingBox","length","halfAxes","center","meanPoint","position","add","invLength","multiplyByScalar","exx","exy","exz","eyy","eyz","ezz","p","copy","subtract","x","y","z","covarianceMatrix","rotation","v1","getColumn","v2","v3","u1","Number","MAX_VALUE","u2","u3","l1","l2","l3","Math","max","dot","min","scale","set","scaleMatrix","multiplyRight","makeAxisAlignedBoundingBoxFromPoints","AxisAlignedBoundingBox","minimum","maximum","halfDiagonal","minimumX","minimumY","minimumZ","maximumX","maximumY","maximumZ"],"mappings":";;;;;;;;;;AAGA;;AACA;;AACA;;AACA;;;;;;;;AAEA,IAAMA,cAAc,GAAG,IAAIC,aAAJ,EAAvB;AAEA,IAAMC,cAAc,GAAG,IAAID,aAAJ,EAAvB;AAEA,IAAME,cAAc,GAAG,IAAIF,aAAJ,EAAvB;AAEA,IAAMG,cAAc,GAAG,IAAIH,aAAJ,EAAvB;AAEA,IAAMI,cAAc,GAAG,IAAIJ,aAAJ,EAAvB;AAEA,IAAMK,uBAAuB,GAAG,IAAIC,aAAJ,EAAhC;AAEA,IAAMC,kBAAkB,GAAG;AACzBC,EAAAA,QAAQ,EAAE,IAAIF,aAAJ,EADe;AAEzBG,EAAAA,OAAO,EAAE,IAAIH,aAAJ;AAFgB,CAA3B;;AAMO,SAASI,iCAAT,CAA2CC,SAA3C,EAA0F;AAAA,MAApCC,MAAoC,uEAA3B,IAAIC,4BAAJ,EAA2B;;AAC/F,MAAI,CAACF,SAAD,IAAcA,SAAS,CAACG,MAAV,KAAqB,CAAvC,EAA0C;AACxCF,IAAAA,MAAM,CAACG,QAAP,GAAkB,IAAIT,aAAJ,CAAY,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,EAAU,CAAV,EAAa,CAAb,EAAgB,CAAhB,EAAmB,CAAnB,EAAsB,CAAtB,EAAyB,CAAzB,CAAZ,CAAlB;AACAM,IAAAA,MAAM,CAACI,MAAP,GAAgB,IAAIhB,aAAJ,EAAhB;AACA,WAAOY,MAAP;AACD;;AAED,MAAME,MAAM,GAAGH,SAAS,CAACG,MAAzB;AACA,MAAMG,SAAS,GAAG,IAAIjB,aAAJ,CAAY,CAAZ,EAAe,CAAf,EAAkB,CAAlB,CAAlB;;AAR+F,6CASxEW,SATwE;AAAA;;AAAA;AAS/F,wDAAkC;AAAA,UAAvBO,QAAuB;AAChCD,MAAAA,SAAS,CAACE,GAAV,CAAcD,QAAd;AACD;AAX8F;AAAA;AAAA;AAAA;AAAA;;AAY/F,MAAME,SAAS,GAAG,MAAMN,MAAxB;AACAG,EAAAA,SAAS,CAACI,gBAAV,CAA2BD,SAA3B;AAEA,MAAIE,GAAG,GAAG,GAAV;AACA,MAAIC,GAAG,GAAG,GAAV;AACA,MAAIC,GAAG,GAAG,GAAV;AACA,MAAIC,GAAG,GAAG,GAAV;AACA,MAAIC,GAAG,GAAG,GAAV;AACA,MAAIC,GAAG,GAAG,GAAV;;AApB+F,8CAsBxEhB,SAtBwE;AAAA;;AAAA;AAsB/F,2DAAkC;AAAA,UAAvBO,SAAuB;AAChC,UAAMU,CAAC,GAAG7B,cAAc,CAAC8B,IAAf,CAAoBX,SAApB,EAA8BY,QAA9B,CAAuCb,SAAvC,CAAV;AACAK,MAAAA,GAAG,IAAIM,CAAC,CAACG,CAAF,GAAMH,CAAC,CAACG,CAAf;AACAR,MAAAA,GAAG,IAAIK,CAAC,CAACG,CAAF,GAAMH,CAAC,CAACI,CAAf;AACAR,MAAAA,GAAG,IAAII,CAAC,CAACG,CAAF,GAAMH,CAAC,CAACK,CAAf;AACAR,MAAAA,GAAG,IAAIG,CAAC,CAACI,CAAF,GAAMJ,CAAC,CAACI,CAAf;AACAN,MAAAA,GAAG,IAAIE,CAAC,CAACI,CAAF,GAAMJ,CAAC,CAACK,CAAf;AACAN,MAAAA,GAAG,IAAIC,CAAC,CAACK,CAAF,GAAML,CAAC,CAACK,CAAf;AACD;AA9B8F;AAAA;AAAA;AAAA;AAAA;;AAgC/FX,EAAAA,GAAG,IAAIF,SAAP;AACAG,EAAAA,GAAG,IAAIH,SAAP;AACAI,EAAAA,GAAG,IAAIJ,SAAP;AACAK,EAAAA,GAAG,IAAIL,SAAP;AACAM,EAAAA,GAAG,IAAIN,SAAP;AACAO,EAAAA,GAAG,IAAIP,SAAP;AAEA,MAAMc,gBAAgB,GAAG7B,uBAAzB;AACA6B,EAAAA,gBAAgB,CAAC,CAAD,CAAhB,GAAsBZ,GAAtB;AACAY,EAAAA,gBAAgB,CAAC,CAAD,CAAhB,GAAsBX,GAAtB;AACAW,EAAAA,gBAAgB,CAAC,CAAD,CAAhB,GAAsBV,GAAtB;AACAU,EAAAA,gBAAgB,CAAC,CAAD,CAAhB,GAAsBX,GAAtB;AACAW,EAAAA,gBAAgB,CAAC,CAAD,CAAhB,GAAsBT,GAAtB;AACAS,EAAAA,gBAAgB,CAAC,CAAD,CAAhB,GAAsBR,GAAtB;AACAQ,EAAAA,gBAAgB,CAAC,CAAD,CAAhB,GAAsBV,GAAtB;AACAU,EAAAA,gBAAgB,CAAC,CAAD,CAAhB,GAAsBR,GAAtB;AACAQ,EAAAA,gBAAgB,CAAC,CAAD,CAAhB,GAAsBP,GAAtB;;AAEA,8BAAkB,wCAA0BO,gBAA1B,EAA4C3B,kBAA5C,CAAlB;AAAA,MAAOE,OAAP,yBAAOA,OAAP;;AACA,MAAM0B,QAAQ,GAAGvB,MAAM,CAACG,QAAP,CAAgBc,IAAhB,CAAqBpB,OAArB,CAAjB;AAEA,MAAI2B,EAAE,GAAGD,QAAQ,CAACE,SAAT,CAAmB,CAAnB,EAAsBnC,cAAtB,CAAT;AACA,MAAIoC,EAAE,GAAGH,QAAQ,CAACE,SAAT,CAAmB,CAAnB,EAAsBlC,cAAtB,CAAT;AACA,MAAIoC,EAAE,GAAGJ,QAAQ,CAACE,SAAT,CAAmB,CAAnB,EAAsBjC,cAAtB,CAAT;AAEA,MAAIoC,EAAE,GAAG,CAACC,MAAM,CAACC,SAAjB;AACA,MAAIC,EAAE,GAAG,CAACF,MAAM,CAACC,SAAjB;AACA,MAAIE,EAAE,GAAG,CAACH,MAAM,CAACC,SAAjB;AACA,MAAIG,EAAE,GAAGJ,MAAM,CAACC,SAAhB;AACA,MAAII,EAAE,GAAGL,MAAM,CAACC,SAAhB;AACA,MAAIK,EAAE,GAAGN,MAAM,CAACC,SAAhB;;AA9D+F,8CAgExE/B,SAhEwE;AAAA;;AAAA;AAgE/F,2DAAkC;AAAA,UAAvBO,UAAuB;AAChCsB,MAAAA,EAAE,GAAGQ,IAAI,CAACC,GAAL,CAAS/B,UAAQ,CAACgC,GAAT,CAAad,EAAb,CAAT,EAA2BI,EAA3B,CAAL;AACAG,MAAAA,EAAE,GAAGK,IAAI,CAACC,GAAL,CAAS/B,UAAQ,CAACgC,GAAT,CAAaZ,EAAb,CAAT,EAA2BK,EAA3B,CAAL;AACAC,MAAAA,EAAE,GAAGI,IAAI,CAACC,GAAL,CAAS/B,UAAQ,CAACgC,GAAT,CAAaX,EAAb,CAAT,EAA2BK,EAA3B,CAAL;AAEAC,MAAAA,EAAE,GAAGG,IAAI,CAACG,GAAL,CAASjC,UAAQ,CAACgC,GAAT,CAAad,EAAb,CAAT,EAA2BS,EAA3B,CAAL;AACAC,MAAAA,EAAE,GAAGE,IAAI,CAACG,GAAL,CAASjC,UAAQ,CAACgC,GAAT,CAAaZ,EAAb,CAAT,EAA2BQ,EAA3B,CAAL;AACAC,MAAAA,EAAE,GAAGC,IAAI,CAACG,GAAL,CAASjC,UAAQ,CAACgC,GAAT,CAAaX,EAAb,CAAT,EAA2BQ,EAA3B,CAAL;AACD;AAxE8F;AAAA;AAAA;AAAA;AAAA;;AA0E/FX,EAAAA,EAAE,GAAGA,EAAE,CAACf,gBAAH,CAAoB,OAAOwB,EAAE,GAAGL,EAAZ,CAApB,CAAL;AACAF,EAAAA,EAAE,GAAGA,EAAE,CAACjB,gBAAH,CAAoB,OAAOyB,EAAE,GAAGH,EAAZ,CAApB,CAAL;AACAJ,EAAAA,EAAE,GAAGA,EAAE,CAAClB,gBAAH,CAAoB,OAAO0B,EAAE,GAAGH,EAAZ,CAApB,CAAL;AAEAhC,EAAAA,MAAM,CAACI,MAAP,CAAca,IAAd,CAAmBO,EAAnB,EAAuBjB,GAAvB,CAA2BmB,EAA3B,EAA+BnB,GAA/B,CAAmCoB,EAAnC;AAEA,MAAMa,KAAK,GAAGnD,cAAc,CAACoD,GAAf,CAAmBb,EAAE,GAAGK,EAAxB,EAA4BF,EAAE,GAAGG,EAAjC,EAAqCF,EAAE,GAAGG,EAA1C,EAA8C1B,gBAA9C,CAA+D,GAA/D,CAAd;AACA,MAAMiC,WAAW,GAAG,IAAIhD,aAAJ,CAAY,CAAC8C,KAAK,CAAC,CAAD,CAAN,EAAW,CAAX,EAAc,CAAd,EAAiB,CAAjB,EAAoBA,KAAK,CAAC,CAAD,CAAzB,EAA8B,CAA9B,EAAiC,CAAjC,EAAoC,CAApC,EAAuCA,KAAK,CAAC,CAAD,CAA5C,CAAZ,CAApB;AACAxC,EAAAA,MAAM,CAACG,QAAP,CAAgBwC,aAAhB,CAA8BD,WAA9B;AAEA,SAAO1C,MAAP;AACD;;AAEM,SAAS4C,oCAAT,CACL7C,SADK,EAGL;AAAA,MADAC,MACA,uEADS,IAAI6C,+BAAJ,EACT;;AACA,MAAI,CAAC9C,SAAD,IAAcA,SAAS,CAACG,MAAV,KAAqB,CAAvC,EAA0C;AACxCF,IAAAA,MAAM,CAAC8C,OAAP,CAAeL,GAAf,CAAmB,CAAnB,EAAsB,CAAtB,EAAyB,CAAzB;AACAzC,IAAAA,MAAM,CAAC+C,OAAP,CAAeN,GAAf,CAAmB,CAAnB,EAAsB,CAAtB,EAAyB,CAAzB;AACAzC,IAAAA,MAAM,CAACI,MAAP,CAAcqC,GAAd,CAAkB,CAAlB,EAAqB,CAArB,EAAwB,CAAxB;AACAzC,IAAAA,MAAM,CAACgD,YAAP,CAAoBP,GAApB,CAAwB,CAAxB,EAA2B,CAA3B,EAA8B,CAA9B;AACA,WAAOzC,MAAP;AACD;;AAED,MAAIiD,QAAQ,GAAGlD,SAAS,CAAC,CAAD,CAAT,CAAa,CAAb,CAAf;AACA,MAAImD,QAAQ,GAAGnD,SAAS,CAAC,CAAD,CAAT,CAAa,CAAb,CAAf;AACA,MAAIoD,QAAQ,GAAGpD,SAAS,CAAC,CAAD,CAAT,CAAa,CAAb,CAAf;AAEA,MAAIqD,QAAQ,GAAGrD,SAAS,CAAC,CAAD,CAAT,CAAa,CAAb,CAAf;AACA,MAAIsD,QAAQ,GAAGtD,SAAS,CAAC,CAAD,CAAT,CAAa,CAAb,CAAf;AACA,MAAIuD,QAAQ,GAAGvD,SAAS,CAAC,CAAD,CAAT,CAAa,CAAb,CAAf;;AAfA,8CAiBgBA,SAjBhB;AAAA;;AAAA;AAiBA,2DAA2B;AAAA,UAAhBiB,CAAgB;AACzB,UAAMG,CAAC,GAAGH,CAAC,CAAC,CAAD,CAAX;AACA,UAAMI,CAAC,GAAGJ,CAAC,CAAC,CAAD,CAAX;AACA,UAAMK,CAAC,GAAGL,CAAC,CAAC,CAAD,CAAX;AAEAiC,MAAAA,QAAQ,GAAGb,IAAI,CAACG,GAAL,CAASpB,CAAT,EAAY8B,QAAZ,CAAX;AACAG,MAAAA,QAAQ,GAAGhB,IAAI,CAACC,GAAL,CAASlB,CAAT,EAAYiC,QAAZ,CAAX;AACAF,MAAAA,QAAQ,GAAGd,IAAI,CAACG,GAAL,CAASnB,CAAT,EAAY8B,QAAZ,CAAX;AACAG,MAAAA,QAAQ,GAAGjB,IAAI,CAACC,GAAL,CAASjB,CAAT,EAAYiC,QAAZ,CAAX;AACAF,MAAAA,QAAQ,GAAGf,IAAI,CAACG,GAAL,CAASlB,CAAT,EAAY8B,QAAZ,CAAX;AACAG,MAAAA,QAAQ,GAAGlB,IAAI,CAACC,GAAL,CAAShB,CAAT,EAAYiC,QAAZ,CAAX;AACD;AA5BD;AAAA;AAAA;AAAA;AAAA;;AA8BAtD,EAAAA,MAAM,CAAC8C,OAAP,CAAeL,GAAf,CAAmBQ,QAAnB,EAA6BC,QAA7B,EAAuCC,QAAvC;AACAnD,EAAAA,MAAM,CAAC+C,OAAP,CAAeN,GAAf,CAAmBW,QAAnB,EAA6BC,QAA7B,EAAuCC,QAAvC;AACAtD,EAAAA,MAAM,CAACI,MAAP,CAAca,IAAd,CAAmBjB,MAAM,CAAC8C,OAA1B,EAAmCvC,GAAnC,CAAuCP,MAAM,CAAC+C,OAA9C,EAAuDP,KAAvD,CAA6D,GAA7D;AACAxC,EAAAA,MAAM,CAACgD,YAAP,CAAoB/B,IAApB,CAAyBjB,MAAM,CAAC+C,OAAhC,EAAyC7B,QAAzC,CAAkDlB,MAAM,CAACI,MAAzD;AAEA,SAAOJ,MAAP;AACD","sourcesContent":["// This file is derived from the Cesium math library under Apache 2 license\n// See LICENSE.md and https://github.com/AnalyticalGraphicsInc/cesium/blob/master/LICENSE.md\n\nimport {Vector3, Matrix3} from '@math.gl/core';\nimport computeEigenDecomposition from './compute-eigen-decomposition';\nimport OrientedBoundingBox from '../bounding-volumes/oriented-bounding-box';\nimport AxisAlignedBoundingBox from '../bounding-volumes/axis-aligned-bounding-box';\n\nconst scratchVector2 = new Vector3();\n\nconst scratchVector3 = new Vector3();\n\nconst scratchVector4 = new Vector3();\n\nconst scratchVector5 = new Vector3();\n\nconst scratchVector6 = new Vector3();\n\nconst scratchCovarianceResult = new Matrix3();\n\nconst scratchEigenResult = {\n diagonal: new Matrix3(),\n unitary: new Matrix3()\n};\n\n/* eslint-disable max-statements */\nexport function makeOrientedBoundingBoxFromPoints(positions, result = new OrientedBoundingBox()) {\n if (!positions || positions.length === 0) {\n result.halfAxes = new Matrix3([0, 0, 0, 0, 0, 0, 0, 0, 0]);\n result.center = new Vector3();\n return result;\n }\n\n const length = positions.length;\n const meanPoint = new Vector3(0, 0, 0);\n for (const position of positions) {\n meanPoint.add(position);\n }\n const invLength = 1.0 / length;\n meanPoint.multiplyByScalar(invLength);\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\n for (const position of positions) {\n const p = scratchVector2.copy(position).subtract(meanPoint);\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 {unitary} = computeEigenDecomposition(covarianceMatrix, scratchEigenResult);\n const rotation = result.halfAxes.copy(unitary);\n\n let v1 = rotation.getColumn(0, scratchVector4);\n let v2 = rotation.getColumn(1, scratchVector5);\n let v3 = rotation.getColumn(2, scratchVector6);\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 (const position of positions) {\n u1 = Math.max(position.dot(v1), u1);\n u2 = Math.max(position.dot(v2), u2);\n u3 = Math.max(position.dot(v3), u3);\n\n l1 = Math.min(position.dot(v1), l1);\n l2 = Math.min(position.dot(v2), l2);\n l3 = Math.min(position.dot(v3), l3);\n }\n\n v1 = v1.multiplyByScalar(0.5 * (l1 + u1));\n v2 = v2.multiplyByScalar(0.5 * (l2 + u2));\n v3 = v3.multiplyByScalar(0.5 * (l3 + u3));\n\n result.center.copy(v1).add(v2).add(v3);\n\n const scale = scratchVector3.set(u1 - l1, u2 - l2, u3 - l3).multiplyByScalar(0.5);\n const scaleMatrix = new Matrix3([scale[0], 0, 0, 0, scale[1], 0, 0, 0, scale[2]]);\n result.halfAxes.multiplyRight(scaleMatrix);\n\n return result;\n}\n\nexport function makeAxisAlignedBoundingBoxFromPoints(\n positions,\n result = new AxisAlignedBoundingBox()\n) {\n if (!positions || positions.length === 0) {\n result.minimum.set(0, 0, 0);\n result.maximum.set(0, 0, 0);\n result.center.set(0, 0, 0);\n result.halfDiagonal.set(0, 0, 0);\n return result;\n }\n\n let minimumX = positions[0][0];\n let minimumY = positions[0][1];\n let minimumZ = positions[0][2];\n\n let maximumX = positions[0][0];\n let maximumY = positions[0][1];\n let maximumZ = positions[0][2];\n\n for (const p of positions) {\n const x = p[0];\n const y = p[1];\n const z = p[2];\n\n minimumX = Math.min(x, minimumX);\n maximumX = Math.max(x, maximumX);\n minimumY = Math.min(y, minimumY);\n maximumY = Math.max(y, maximumY);\n minimumZ = Math.min(z, minimumZ);\n maximumZ = Math.max(z, maximumZ);\n }\n\n result.minimum.set(minimumX, minimumY, minimumZ);\n result.maximum.set(maximumX, maximumY, maximumZ);\n result.center.copy(result.minimum).add(result.maximum).scale(0.5);\n result.halfDiagonal.copy(result.maximum).subtract(result.center);\n\n return result;\n}\n"],"file":"bounding-box-from-points.js"}
1
+ {"version":3,"sources":["../../../../src/lib/algorithms/bounding-box-from-points.js"],"names":["scratchVector2","Vector3","scratchVector3","scratchVector4","scratchVector5","scratchVector6","scratchCovarianceResult","Matrix3","scratchEigenResult","diagonal","unitary","makeOrientedBoundingBoxFromPoints","positions","result","OrientedBoundingBox","length","halfAxes","center","meanPoint","position","add","invLength","multiplyByScalar","exx","exy","exz","eyy","eyz","ezz","p","copy","subtract","x","y","z","covarianceMatrix","rotation","v1","getColumn","v2","v3","u1","Number","MAX_VALUE","u2","u3","l1","l2","l3","Math","max","dot","min","scale","set","scaleMatrix","multiplyRight","makeAxisAlignedBoundingBoxFromPoints","AxisAlignedBoundingBox","minimum","maximum","halfDiagonal","minimumX","minimumY","minimumZ","maximumX","maximumY","maximumZ"],"mappings":"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","sourcesContent":["// This file is derived from the Cesium math library under Apache 2 license\n// See LICENSE.md and https://github.com/AnalyticalGraphicsInc/cesium/blob/master/LICENSE.md\n\nimport {Vector3, Matrix3} from '@math.gl/core';\nimport computeEigenDecomposition from './compute-eigen-decomposition';\nimport OrientedBoundingBox from '../bounding-volumes/oriented-bounding-box';\nimport AxisAlignedBoundingBox from '../bounding-volumes/axis-aligned-bounding-box';\n\nconst scratchVector2 = new Vector3();\n\nconst scratchVector3 = new Vector3();\n\nconst scratchVector4 = new Vector3();\n\nconst scratchVector5 = new Vector3();\n\nconst scratchVector6 = new Vector3();\n\nconst scratchCovarianceResult = new Matrix3();\n\nconst scratchEigenResult = {\n diagonal: new Matrix3(),\n unitary: new Matrix3()\n};\n\n/* eslint-disable max-statements */\nexport function makeOrientedBoundingBoxFromPoints(positions, result = new OrientedBoundingBox()) {\n if (!positions || positions.length === 0) {\n result.halfAxes = new Matrix3([0, 0, 0, 0, 0, 0, 0, 0, 0]);\n result.center = new Vector3();\n return result;\n }\n\n const length = positions.length;\n const meanPoint = new Vector3(0, 0, 0);\n for (const position of positions) {\n meanPoint.add(position);\n }\n const invLength = 1.0 / length;\n meanPoint.multiplyByScalar(invLength);\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\n for (const position of positions) {\n const p = scratchVector2.copy(position).subtract(meanPoint);\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 {unitary} = computeEigenDecomposition(covarianceMatrix, scratchEigenResult);\n const rotation = result.halfAxes.copy(unitary);\n\n let v1 = rotation.getColumn(0, scratchVector4);\n let v2 = rotation.getColumn(1, scratchVector5);\n let v3 = rotation.getColumn(2, scratchVector6);\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 (const position of positions) {\n scratchVector2.copy(position);\n\n u1 = Math.max(scratchVector2.dot(v1), u1);\n u2 = Math.max(scratchVector2.dot(v2), u2);\n u3 = Math.max(scratchVector2.dot(v3), u3);\n\n l1 = Math.min(scratchVector2.dot(v1), l1);\n l2 = Math.min(scratchVector2.dot(v2), l2);\n l3 = Math.min(scratchVector2.dot(v3), l3);\n }\n\n v1 = v1.multiplyByScalar(0.5 * (l1 + u1));\n v2 = v2.multiplyByScalar(0.5 * (l2 + u2));\n v3 = v3.multiplyByScalar(0.5 * (l3 + u3));\n\n result.center.copy(v1).add(v2).add(v3);\n\n const scale = scratchVector3.set(u1 - l1, u2 - l2, u3 - l3).multiplyByScalar(0.5);\n const scaleMatrix = new Matrix3([scale[0], 0, 0, 0, scale[1], 0, 0, 0, scale[2]]);\n result.halfAxes.multiplyRight(scaleMatrix);\n\n return result;\n}\n\nexport function makeAxisAlignedBoundingBoxFromPoints(\n positions,\n result = new AxisAlignedBoundingBox()\n) {\n if (!positions || positions.length === 0) {\n result.minimum.set(0, 0, 0);\n result.maximum.set(0, 0, 0);\n result.center.set(0, 0, 0);\n result.halfDiagonal.set(0, 0, 0);\n return result;\n }\n\n let minimumX = positions[0][0];\n let minimumY = positions[0][1];\n let minimumZ = positions[0][2];\n\n let maximumX = positions[0][0];\n let maximumY = positions[0][1];\n let maximumZ = positions[0][2];\n\n for (const p of positions) {\n const x = p[0];\n const y = p[1];\n const z = p[2];\n\n minimumX = Math.min(x, minimumX);\n maximumX = Math.max(x, maximumX);\n minimumY = Math.min(y, minimumY);\n maximumY = Math.max(y, maximumY);\n minimumZ = Math.min(z, minimumZ);\n maximumZ = Math.max(z, maximumZ);\n }\n\n result.minimum.set(minimumX, minimumY, minimumZ);\n result.maximum.set(maximumX, maximumY, maximumZ);\n result.center.copy(result.minimum).add(result.maximum).scale(0.5);\n result.halfDiagonal.copy(result.maximum).subtract(result.center);\n\n return result;\n}\n"],"file":"bounding-box-from-points.js"}
@@ -58,27 +58,27 @@ function makeBoundingSphereFromPoints(positions) {
58
58
  var z = currentPos.z;
59
59
 
60
60
  if (x < xMin.x) {
61
- currentPos.copy(xMin);
61
+ xMin.copy(currentPos);
62
62
  }
63
63
 
64
64
  if (x > xMax.x) {
65
- currentPos.copy(xMax);
65
+ xMax.copy(currentPos);
66
66
  }
67
67
 
68
68
  if (y < yMin.y) {
69
- currentPos.copy(yMin);
69
+ yMin.copy(currentPos);
70
70
  }
71
71
 
72
72
  if (y > yMax.y) {
73
- currentPos.copy(yMax);
73
+ yMax.copy(currentPos);
74
74
  }
75
75
 
76
76
  if (z < zMin.z) {
77
- currentPos.copy(zMin);
77
+ zMin.copy(currentPos);
78
78
  }
79
79
 
80
80
  if (z > zMax.z) {
81
- currentPos.copy(zMax);
81
+ zMax.copy(currentPos);
82
82
  }
83
83
  }
84
84
  } catch (err) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/algorithms/bounding-sphere-from-points.js"],"names":["fromPointsXMin","Vector3","fromPointsYMin","fromPointsZMin","fromPointsXMax","fromPointsYMax","fromPointsZMax","fromPointsCurrentPos","fromPointsScratch","fromPointsRitterCenter","fromPointsMinBoxPt","fromPointsMaxBoxPt","fromPointsNaiveCenterScratch","volumeConstant","Math","PI","makeBoundingSphereFromPoints","positions","result","BoundingSphere","length","fromCenterRadius","currentPos","copy","xMin","yMin","zMin","xMax","yMax","zMax","position","x","y","z","xSpan","subtract","magnitudeSquared","ySpan","zSpan","diameter1","diameter2","maxSpan","ritterCenter","radiusSquared","ritterRadius","sqrt","minBoxPt","maxBoxPt","naiveCenter","add","multiplyByScalar","naiveRadius","r","magnitude","oldCenterToPointSquared","oldCenterToPoint","oldToNew","to","center","radius"],"mappings":"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","sourcesContent":["// This file is derived from the Cesium math library under Apache 2 license\n// See LICENSE.md and https://github.com/AnalyticalGraphicsInc/cesium/blob/master/LICENSE.md\n\nimport {Vector3} from '@math.gl/core';\nimport BoundingSphere from '../bounding-volumes/bounding-sphere';\n\n/* eslint-disable */\nconst fromPointsXMin = new Vector3();\nconst fromPointsYMin = new Vector3();\nconst fromPointsZMin = new Vector3();\nconst fromPointsXMax = new Vector3();\nconst fromPointsYMax = new Vector3();\nconst fromPointsZMax = new Vector3();\nconst fromPointsCurrentPos = new Vector3();\nconst fromPointsScratch = new Vector3();\nconst fromPointsRitterCenter = new Vector3();\nconst fromPointsMinBoxPt = new Vector3();\nconst fromPointsMaxBoxPt = new Vector3();\nconst fromPointsNaiveCenterScratch = new Vector3();\nconst volumeConstant = (4.0 / 3.0) * Math.PI;\n\nexport default function makeBoundingSphereFromPoints(positions, result = new BoundingSphere()) {\n if (!positions || positions.length === 0) {\n return result.fromCenterRadius([0, 0, 0], 0);\n }\n\n const currentPos = fromPointsCurrentPos.copy(positions[0]);\n\n const xMin = fromPointsXMin.copy(currentPos);\n const yMin = fromPointsYMin.copy(currentPos);\n const zMin = fromPointsZMin.copy(currentPos);\n\n const xMax = fromPointsXMax.copy(currentPos);\n const yMax = fromPointsYMax.copy(currentPos);\n const zMax = fromPointsZMax.copy(currentPos);\n\n for (const position of positions) {\n currentPos.copy(position);\n\n const x = currentPos.x;\n const y = currentPos.y;\n const z = currentPos.z;\n\n // Store points containing the the smallest and largest components\n if (x < xMin.x) {\n currentPos.copy(xMin);\n }\n\n if (x > xMax.x) {\n currentPos.copy(xMax);\n }\n\n if (y < yMin.y) {\n currentPos.copy(yMin);\n }\n\n if (y > yMax.y) {\n currentPos.copy(yMax);\n }\n\n if (z < zMin.z) {\n currentPos.copy(zMin);\n }\n\n if (z > zMax.z) {\n currentPos.copy(zMax);\n }\n }\n\n // Compute x-, y-, and z-spans (Squared distances b/n each component's min. and max.).\n const xSpan = fromPointsScratch.copy(xMax).subtract(xMin).magnitudeSquared();\n const ySpan = fromPointsScratch.copy(yMax).subtract(yMin).magnitudeSquared();\n const zSpan = fromPointsScratch.copy(zMax).subtract(zMin).magnitudeSquared();\n\n // Set the diameter endpoints to the largest span.\n let diameter1 = xMin;\n let diameter2 = xMax;\n let maxSpan = xSpan;\n if (ySpan > maxSpan) {\n maxSpan = ySpan;\n diameter1 = yMin;\n diameter2 = yMax;\n }\n if (zSpan > maxSpan) {\n maxSpan = zSpan;\n diameter1 = zMin;\n diameter2 = zMax;\n }\n\n // Calculate the center of the initial sphere found by Ritter's algorithm\n const ritterCenter = fromPointsRitterCenter;\n ritterCenter.x = (diameter1.x + diameter2.x) * 0.5;\n ritterCenter.y = (diameter1.y + diameter2.y) * 0.5;\n ritterCenter.z = (diameter1.z + diameter2.z) * 0.5;\n\n // Calculate the radius of the initial sphere found by Ritter's algorithm\n let radiusSquared = fromPointsScratch.copy(diameter2).subtract(ritterCenter).magnitudeSquared();\n let ritterRadius = Math.sqrt(radiusSquared);\n\n // Find the center of the sphere found using the Naive method.\n const minBoxPt = fromPointsMinBoxPt;\n minBoxPt.x = xMin.x;\n minBoxPt.y = yMin.y;\n minBoxPt.z = zMin.z;\n\n const maxBoxPt = fromPointsMaxBoxPt;\n maxBoxPt.x = xMax.x;\n maxBoxPt.y = yMax.y;\n maxBoxPt.z = zMax.z;\n\n const naiveCenter = fromPointsNaiveCenterScratch\n .copy(minBoxPt)\n .add(maxBoxPt)\n .multiplyByScalar(0.5);\n\n // Begin 2nd pass to find naive radius and modify the ritter sphere.\n let naiveRadius = 0;\n for (const position of positions) {\n currentPos.copy(position);\n\n // Find the furthest point from the naive center to calculate the naive radius.\n const r = fromPointsScratch.copy(currentPos).subtract(naiveCenter).magnitude();\n if (r > naiveRadius) {\n naiveRadius = r;\n }\n\n // Make adjustments to the Ritter Sphere to include all points.\n const oldCenterToPointSquared = fromPointsScratch\n .copy(currentPos)\n .subtract(ritterCenter)\n .magnitudeSquared();\n\n if (oldCenterToPointSquared > radiusSquared) {\n const oldCenterToPoint = Math.sqrt(oldCenterToPointSquared);\n // Calculate new radius to include the point that lies outside\n ritterRadius = (ritterRadius + oldCenterToPoint) * 0.5;\n radiusSquared = ritterRadius * ritterRadius;\n // Calculate center of new Ritter sphere\n const oldToNew = oldCenterToPoint - ritterRadius;\n ritterCenter.x = (ritterRadius * ritterCenter.x + oldToNew * currentPos.x) / oldCenterToPoint;\n ritterCenter.y = (ritterRadius * ritterCenter.y + oldToNew * currentPos.y) / oldCenterToPoint;\n ritterCenter.z = (ritterRadius * ritterCenter.z + oldToNew * currentPos.z) / oldCenterToPoint;\n }\n }\n\n if (ritterRadius < naiveRadius) {\n ritterCenter.to(result.center);\n // @ts-ignore TS2540: Cannot assign to 'radius' because it is a read-only property.\n result.radius = ritterRadius;\n } else {\n naiveCenter.to(result.center);\n // @ts-ignore TS2540: Cannot assign to 'radius' because it is a read-only property.\n result.radius = naiveRadius;\n }\n\n return result;\n}\n"],"file":"bounding-sphere-from-points.js"}
1
+ {"version":3,"sources":["../../../../src/lib/algorithms/bounding-sphere-from-points.js"],"names":["fromPointsXMin","Vector3","fromPointsYMin","fromPointsZMin","fromPointsXMax","fromPointsYMax","fromPointsZMax","fromPointsCurrentPos","fromPointsScratch","fromPointsRitterCenter","fromPointsMinBoxPt","fromPointsMaxBoxPt","fromPointsNaiveCenterScratch","volumeConstant","Math","PI","makeBoundingSphereFromPoints","positions","result","BoundingSphere","length","fromCenterRadius","currentPos","copy","xMin","yMin","zMin","xMax","yMax","zMax","position","x","y","z","xSpan","subtract","magnitudeSquared","ySpan","zSpan","diameter1","diameter2","maxSpan","ritterCenter","radiusSquared","ritterRadius","sqrt","minBoxPt","maxBoxPt","naiveCenter","add","multiplyByScalar","naiveRadius","r","magnitude","oldCenterToPointSquared","oldCenterToPoint","oldToNew","to","center","radius"],"mappings":"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","sourcesContent":["// This file is derived from the Cesium math library under Apache 2 license\n// See LICENSE.md and https://github.com/AnalyticalGraphicsInc/cesium/blob/master/LICENSE.md\n\nimport {Vector3} from '@math.gl/core';\nimport BoundingSphere from '../bounding-volumes/bounding-sphere';\n\n/* eslint-disable */\nconst fromPointsXMin = new Vector3();\nconst fromPointsYMin = new Vector3();\nconst fromPointsZMin = new Vector3();\nconst fromPointsXMax = new Vector3();\nconst fromPointsYMax = new Vector3();\nconst fromPointsZMax = new Vector3();\nconst fromPointsCurrentPos = new Vector3();\nconst fromPointsScratch = new Vector3();\nconst fromPointsRitterCenter = new Vector3();\nconst fromPointsMinBoxPt = new Vector3();\nconst fromPointsMaxBoxPt = new Vector3();\nconst fromPointsNaiveCenterScratch = new Vector3();\nconst volumeConstant = (4.0 / 3.0) * Math.PI;\n\nexport default function makeBoundingSphereFromPoints(positions, result = new BoundingSphere()) {\n if (!positions || positions.length === 0) {\n return result.fromCenterRadius([0, 0, 0], 0);\n }\n\n const currentPos = fromPointsCurrentPos.copy(positions[0]);\n\n const xMin = fromPointsXMin.copy(currentPos);\n const yMin = fromPointsYMin.copy(currentPos);\n const zMin = fromPointsZMin.copy(currentPos);\n\n const xMax = fromPointsXMax.copy(currentPos);\n const yMax = fromPointsYMax.copy(currentPos);\n const zMax = fromPointsZMax.copy(currentPos);\n\n for (const position of positions) {\n currentPos.copy(position);\n\n const x = currentPos.x;\n const y = currentPos.y;\n const z = currentPos.z;\n\n // Store points containing the the smallest and largest components\n if (x < xMin.x) {\n xMin.copy(currentPos);\n }\n\n if (x > xMax.x) {\n xMax.copy(currentPos);\n }\n\n if (y < yMin.y) {\n yMin.copy(currentPos);\n }\n\n if (y > yMax.y) {\n yMax.copy(currentPos);\n }\n\n if (z < zMin.z) {\n zMin.copy(currentPos);\n }\n\n if (z > zMax.z) {\n zMax.copy(currentPos);\n }\n }\n\n // Compute x-, y-, and z-spans (Squared distances b/n each component's min. and max.).\n const xSpan = fromPointsScratch.copy(xMax).subtract(xMin).magnitudeSquared();\n const ySpan = fromPointsScratch.copy(yMax).subtract(yMin).magnitudeSquared();\n const zSpan = fromPointsScratch.copy(zMax).subtract(zMin).magnitudeSquared();\n\n // Set the diameter endpoints to the largest span.\n let diameter1 = xMin;\n let diameter2 = xMax;\n let maxSpan = xSpan;\n if (ySpan > maxSpan) {\n maxSpan = ySpan;\n diameter1 = yMin;\n diameter2 = yMax;\n }\n if (zSpan > maxSpan) {\n maxSpan = zSpan;\n diameter1 = zMin;\n diameter2 = zMax;\n }\n\n // Calculate the center of the initial sphere found by Ritter's algorithm\n const ritterCenter = fromPointsRitterCenter;\n ritterCenter.x = (diameter1.x + diameter2.x) * 0.5;\n ritterCenter.y = (diameter1.y + diameter2.y) * 0.5;\n ritterCenter.z = (diameter1.z + diameter2.z) * 0.5;\n\n // Calculate the radius of the initial sphere found by Ritter's algorithm\n let radiusSquared = fromPointsScratch.copy(diameter2).subtract(ritterCenter).magnitudeSquared();\n let ritterRadius = Math.sqrt(radiusSquared);\n\n // Find the center of the sphere found using the Naive method.\n const minBoxPt = fromPointsMinBoxPt;\n minBoxPt.x = xMin.x;\n minBoxPt.y = yMin.y;\n minBoxPt.z = zMin.z;\n\n const maxBoxPt = fromPointsMaxBoxPt;\n maxBoxPt.x = xMax.x;\n maxBoxPt.y = yMax.y;\n maxBoxPt.z = zMax.z;\n\n const naiveCenter = fromPointsNaiveCenterScratch\n .copy(minBoxPt)\n .add(maxBoxPt)\n .multiplyByScalar(0.5);\n\n // Begin 2nd pass to find naive radius and modify the ritter sphere.\n let naiveRadius = 0;\n for (const position of positions) {\n currentPos.copy(position);\n\n // Find the furthest point from the naive center to calculate the naive radius.\n const r = fromPointsScratch.copy(currentPos).subtract(naiveCenter).magnitude();\n if (r > naiveRadius) {\n naiveRadius = r;\n }\n\n // Make adjustments to the Ritter Sphere to include all points.\n const oldCenterToPointSquared = fromPointsScratch\n .copy(currentPos)\n .subtract(ritterCenter)\n .magnitudeSquared();\n\n if (oldCenterToPointSquared > radiusSquared) {\n const oldCenterToPoint = Math.sqrt(oldCenterToPointSquared);\n // Calculate new radius to include the point that lies outside\n ritterRadius = (ritterRadius + oldCenterToPoint) * 0.5;\n radiusSquared = ritterRadius * ritterRadius;\n // Calculate center of new Ritter sphere\n const oldToNew = oldCenterToPoint - ritterRadius;\n ritterCenter.x = (ritterRadius * ritterCenter.x + oldToNew * currentPos.x) / oldCenterToPoint;\n ritterCenter.y = (ritterRadius * ritterCenter.y + oldToNew * currentPos.y) / oldCenterToPoint;\n ritterCenter.z = (ritterRadius * ritterCenter.z + oldToNew * currentPos.z) / oldCenterToPoint;\n }\n }\n\n if (ritterRadius < naiveRadius) {\n ritterCenter.to(result.center);\n // @ts-ignore TS2540: Cannot assign to 'radius' because it is a read-only property.\n result.radius = ritterRadius;\n } else {\n naiveCenter.to(result.center);\n // @ts-ignore TS2540: Cannot assign to 'radius' because it is a read-only property.\n result.radius = naiveRadius;\n }\n\n return result;\n}\n"],"file":"bounding-sphere-from-points.js"}
@@ -108,14 +108,15 @@ var BoundingSphere = function () {
108
108
  }, {
109
109
  key: "distanceSquaredTo",
110
110
  value: function distanceSquaredTo(point) {
111
- point = scratchVector.from(point);
112
- var delta = point.subtract(this.center);
113
- return delta.lengthSquared() - this.radius * this.radius;
111
+ var d = this.distanceTo(point);
112
+ return d * d;
114
113
  }
115
114
  }, {
116
115
  key: "distanceTo",
117
116
  value: function distanceTo(point) {
118
- return Math.sqrt(this.distanceSquaredTo(point));
117
+ point = scratchVector.from(point);
118
+ var delta = point.subtract(this.center);
119
+ return Math.max(0, delta.len() - this.radius);
119
120
  }
120
121
  }, {
121
122
  key: "intersectPlane",
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/bounding-volumes/bounding-sphere.js"],"names":["scratchVector","Vector3","scratchVector2","BoundingSphere","center","radius","fromCenterRadius","from","corner","oppositeCorner","add","scale","distance","right","Boolean","equals","boundingSphere","leftCenter","leftRadius","rightCenter","rightRadius","toRightCenter","copy","subtract","centerSeparation","magnitude","clone","halfDistanceBetweenTangentPoints","point","transform","mat4","getScaling","Math","max","delta","lengthSquared","sqrt","distanceSquaredTo","plane","normal","distanceToPlane","dot","INTERSECTION","OUTSIDE","INTERSECTING","INSIDE"],"mappings":"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","sourcesContent":["// This file is derived from the Cesium math library under Apache 2 license\n// See LICENSE.md and https://github.com/AnalyticalGraphicsInc/cesium/blob/master/LICENSE.md\n\nimport {Vector3} from '@math.gl/core';\nimport * as mat4 from 'gl-matrix/mat4';\nimport {INTERSECTION} from '../../constants';\n\n// import Rectangle from './rectangle';\n\n// const defaultProjection = new GeographicProjection();\n// const fromRectangle2DLowerLeft = new Vector3();\n// const fromRectangle2DUpperRight = new Vector3();\n// const fromRectangle2DSouthwest = new Cartographic();\n// const fromRectangle2DNortheast = new Cartographic();\n\n// const fromRectangle3DScratch = [];\n\nconst scratchVector = new Vector3();\nconst scratchVector2 = new Vector3();\n\nexport default class BoundingSphere {\n constructor(center = [0, 0, 0], radius = 0.0) {\n this.radius = -0;\n this.center = new Vector3();\n this.fromCenterRadius(center, radius);\n }\n\n fromCenterRadius(center, radius) {\n this.center.from(center);\n this.radius = radius;\n return this;\n }\n\n fromCornerPoints(corner, oppositeCorner) {\n oppositeCorner = scratchVector.from(oppositeCorner);\n this.center = new Vector3().from(corner).add(oppositeCorner).scale(0.5);\n this.radius = this.center.distance(oppositeCorner);\n return this;\n }\n\n equals(right) {\n return (\n this === right ||\n (Boolean(right) && this.center.equals(right.center) && this.radius === right.radius)\n );\n }\n\n clone() {\n return new BoundingSphere(this.center, this.radius);\n }\n\n union(boundingSphere) {\n const leftCenter = this.center;\n const leftRadius = this.radius;\n const rightCenter = boundingSphere.center;\n const rightRadius = boundingSphere.radius;\n\n const toRightCenter = scratchVector.copy(rightCenter).subtract(leftCenter);\n const centerSeparation = toRightCenter.magnitude();\n\n if (leftRadius >= centerSeparation + rightRadius) {\n // Left sphere wins.\n return this.clone();\n }\n\n if (rightRadius >= centerSeparation + leftRadius) {\n // Right sphere wins.\n return boundingSphere.clone();\n }\n\n // There are two tangent points, one on far side of each sphere.\n const halfDistanceBetweenTangentPoints = (leftRadius + centerSeparation + rightRadius) * 0.5;\n\n // Compute the center point halfway between the two tangent points.\n scratchVector2\n .copy(toRightCenter)\n .scale((-leftRadius + halfDistanceBetweenTangentPoints) / centerSeparation)\n .add(leftCenter);\n\n this.center.copy(scratchVector2);\n this.radius = halfDistanceBetweenTangentPoints;\n\n return this;\n }\n\n expand(point) {\n point = scratchVector.from(point);\n const radius = point.subtract(this.center).magnitude();\n if (radius > this.radius) {\n this.radius = radius;\n }\n return this;\n }\n\n transform(transform) {\n this.center.transform(transform);\n const scale = mat4.getScaling(scratchVector, transform);\n this.radius = Math.max(scale[0], Math.max(scale[1], scale[2])) * this.radius;\n return this;\n }\n\n // Computes the estimated distance squared from the closest point on a bounding sphere to a point.\n distanceSquaredTo(point) {\n point = scratchVector.from(point);\n const delta = point.subtract(this.center);\n return delta.lengthSquared() - this.radius * this.radius;\n }\n\n distanceTo(point) {\n return Math.sqrt(this.distanceSquaredTo(point));\n }\n\n // Determines which side of a plane a sphere is located.\n intersectPlane(plane) {\n const center = this.center;\n const radius = this.radius;\n const normal = plane.normal;\n const distanceToPlane = normal.dot(center) + plane.distance;\n\n // The center point is negative side of the plane normal\n if (distanceToPlane < -radius) {\n return INTERSECTION.OUTSIDE;\n }\n // The center point is positive side of the plane, but radius extends beyond it; partial overlap\n if (distanceToPlane < radius) {\n return INTERSECTION.INTERSECTING;\n }\n // The center point and radius is positive side of the plane\n return INTERSECTION.INSIDE;\n }\n}\n"],"file":"bounding-sphere.js"}
1
+ {"version":3,"sources":["../../../../src/lib/bounding-volumes/bounding-sphere.js"],"names":["scratchVector","Vector3","scratchVector2","BoundingSphere","center","radius","fromCenterRadius","from","corner","oppositeCorner","add","scale","distance","right","Boolean","equals","boundingSphere","leftCenter","leftRadius","rightCenter","rightRadius","toRightCenter","copy","subtract","centerSeparation","magnitude","clone","halfDistanceBetweenTangentPoints","point","transform","mat4","getScaling","Math","max","d","distanceTo","delta","len","plane","normal","distanceToPlane","dot","INTERSECTION","OUTSIDE","INTERSECTING","INSIDE"],"mappings":"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","sourcesContent":["// This file is derived from the Cesium math library under Apache 2 license\n// See LICENSE.md and https://github.com/AnalyticalGraphicsInc/cesium/blob/master/LICENSE.md\n\nimport {Vector3} from '@math.gl/core';\nimport * as mat4 from 'gl-matrix/mat4';\nimport {INTERSECTION} from '../../constants';\n\n// import Rectangle from './rectangle';\n\n// const defaultProjection = new GeographicProjection();\n// const fromRectangle2DLowerLeft = new Vector3();\n// const fromRectangle2DUpperRight = new Vector3();\n// const fromRectangle2DSouthwest = new Cartographic();\n// const fromRectangle2DNortheast = new Cartographic();\n\n// const fromRectangle3DScratch = [];\n\nconst scratchVector = new Vector3();\nconst scratchVector2 = new Vector3();\n\nexport default class BoundingSphere {\n constructor(center = [0, 0, 0], radius = 0.0) {\n this.radius = -0;\n this.center = new Vector3();\n this.fromCenterRadius(center, radius);\n }\n\n fromCenterRadius(center, radius) {\n this.center.from(center);\n this.radius = radius;\n return this;\n }\n\n fromCornerPoints(corner, oppositeCorner) {\n oppositeCorner = scratchVector.from(oppositeCorner);\n this.center = new Vector3().from(corner).add(oppositeCorner).scale(0.5);\n this.radius = this.center.distance(oppositeCorner);\n return this;\n }\n\n equals(right) {\n return (\n this === right ||\n (Boolean(right) && this.center.equals(right.center) && this.radius === right.radius)\n );\n }\n\n clone() {\n return new BoundingSphere(this.center, this.radius);\n }\n\n union(boundingSphere) {\n const leftCenter = this.center;\n const leftRadius = this.radius;\n const rightCenter = boundingSphere.center;\n const rightRadius = boundingSphere.radius;\n\n const toRightCenter = scratchVector.copy(rightCenter).subtract(leftCenter);\n const centerSeparation = toRightCenter.magnitude();\n\n if (leftRadius >= centerSeparation + rightRadius) {\n // Left sphere wins.\n return this.clone();\n }\n\n if (rightRadius >= centerSeparation + leftRadius) {\n // Right sphere wins.\n return boundingSphere.clone();\n }\n\n // There are two tangent points, one on far side of each sphere.\n const halfDistanceBetweenTangentPoints = (leftRadius + centerSeparation + rightRadius) * 0.5;\n\n // Compute the center point halfway between the two tangent points.\n scratchVector2\n .copy(toRightCenter)\n .scale((-leftRadius + halfDistanceBetweenTangentPoints) / centerSeparation)\n .add(leftCenter);\n\n this.center.copy(scratchVector2);\n this.radius = halfDistanceBetweenTangentPoints;\n\n return this;\n }\n\n expand(point) {\n point = scratchVector.from(point);\n const radius = point.subtract(this.center).magnitude();\n if (radius > this.radius) {\n this.radius = radius;\n }\n return this;\n }\n\n transform(transform) {\n this.center.transform(transform);\n const scale = mat4.getScaling(scratchVector, transform);\n this.radius = Math.max(scale[0], Math.max(scale[1], scale[2])) * this.radius;\n return this;\n }\n\n // Computes the estimated distance squared from the closest point on a bounding sphere to a point.\n distanceSquaredTo(point) {\n const d = this.distanceTo(point);\n return d * d;\n }\n\n distanceTo(point) {\n point = scratchVector.from(point);\n const delta = point.subtract(this.center);\n return Math.max(0, delta.len() - this.radius);\n }\n\n // Determines which side of a plane a sphere is located.\n intersectPlane(plane) {\n const center = this.center;\n const radius = this.radius;\n const normal = plane.normal;\n const distanceToPlane = normal.dot(center) + plane.distance;\n\n // The center point is negative side of the plane normal\n if (distanceToPlane < -radius) {\n return INTERSECTION.OUTSIDE;\n }\n // The center point is positive side of the plane, but radius extends beyond it; partial overlap\n if (distanceToPlane < radius) {\n return INTERSECTION.INTERSECTING;\n }\n // The center point and radius is positive side of the plane\n return INTERSECTION.INSIDE;\n }\n}\n"],"file":"bounding-sphere.js"}
@@ -76,12 +76,13 @@ export function makeOrientedBoundingBoxFromPoints(positions, result = new Orient
76
76
  let l3 = Number.MAX_VALUE;
77
77
 
78
78
  for (const position of positions) {
79
- u1 = Math.max(position.dot(v1), u1);
80
- u2 = Math.max(position.dot(v2), u2);
81
- u3 = Math.max(position.dot(v3), u3);
82
- l1 = Math.min(position.dot(v1), l1);
83
- l2 = Math.min(position.dot(v2), l2);
84
- l3 = Math.min(position.dot(v3), l3);
79
+ scratchVector2.copy(position);
80
+ u1 = Math.max(scratchVector2.dot(v1), u1);
81
+ u2 = Math.max(scratchVector2.dot(v2), u2);
82
+ u3 = Math.max(scratchVector2.dot(v3), u3);
83
+ l1 = Math.min(scratchVector2.dot(v1), l1);
84
+ l2 = Math.min(scratchVector2.dot(v2), l2);
85
+ l3 = Math.min(scratchVector2.dot(v3), l3);
85
86
  }
86
87
 
87
88
  v1 = v1.multiplyByScalar(0.5 * (l1 + u1));
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/algorithms/bounding-box-from-points.js"],"names":["Vector3","Matrix3","computeEigenDecomposition","OrientedBoundingBox","AxisAlignedBoundingBox","scratchVector2","scratchVector3","scratchVector4","scratchVector5","scratchVector6","scratchCovarianceResult","scratchEigenResult","diagonal","unitary","makeOrientedBoundingBoxFromPoints","positions","result","length","halfAxes","center","meanPoint","position","add","invLength","multiplyByScalar","exx","exy","exz","eyy","eyz","ezz","p","copy","subtract","x","y","z","covarianceMatrix","rotation","v1","getColumn","v2","v3","u1","Number","MAX_VALUE","u2","u3","l1","l2","l3","Math","max","dot","min","scale","set","scaleMatrix","multiplyRight","makeAxisAlignedBoundingBoxFromPoints","minimum","maximum","halfDiagonal","minimumX","minimumY","minimumZ","maximumX","maximumY","maximumZ"],"mappings":"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","sourcesContent":["// This file is derived from the Cesium math library under Apache 2 license\n// See LICENSE.md and https://github.com/AnalyticalGraphicsInc/cesium/blob/master/LICENSE.md\n\nimport {Vector3, Matrix3} from '@math.gl/core';\nimport computeEigenDecomposition from './compute-eigen-decomposition';\nimport OrientedBoundingBox from '../bounding-volumes/oriented-bounding-box';\nimport AxisAlignedBoundingBox from '../bounding-volumes/axis-aligned-bounding-box';\n\nconst scratchVector2 = new Vector3();\n\nconst scratchVector3 = new Vector3();\n\nconst scratchVector4 = new Vector3();\n\nconst scratchVector5 = new Vector3();\n\nconst scratchVector6 = new Vector3();\n\nconst scratchCovarianceResult = new Matrix3();\n\nconst scratchEigenResult = {\n diagonal: new Matrix3(),\n unitary: new Matrix3()\n};\n\n/* eslint-disable max-statements */\nexport function makeOrientedBoundingBoxFromPoints(positions, result = new OrientedBoundingBox()) {\n if (!positions || positions.length === 0) {\n result.halfAxes = new Matrix3([0, 0, 0, 0, 0, 0, 0, 0, 0]);\n result.center = new Vector3();\n return result;\n }\n\n const length = positions.length;\n const meanPoint = new Vector3(0, 0, 0);\n for (const position of positions) {\n meanPoint.add(position);\n }\n const invLength = 1.0 / length;\n meanPoint.multiplyByScalar(invLength);\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\n for (const position of positions) {\n const p = scratchVector2.copy(position).subtract(meanPoint);\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 {unitary} = computeEigenDecomposition(covarianceMatrix, scratchEigenResult);\n const rotation = result.halfAxes.copy(unitary);\n\n let v1 = rotation.getColumn(0, scratchVector4);\n let v2 = rotation.getColumn(1, scratchVector5);\n let v3 = rotation.getColumn(2, scratchVector6);\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 (const position of positions) {\n u1 = Math.max(position.dot(v1), u1);\n u2 = Math.max(position.dot(v2), u2);\n u3 = Math.max(position.dot(v3), u3);\n\n l1 = Math.min(position.dot(v1), l1);\n l2 = Math.min(position.dot(v2), l2);\n l3 = Math.min(position.dot(v3), l3);\n }\n\n v1 = v1.multiplyByScalar(0.5 * (l1 + u1));\n v2 = v2.multiplyByScalar(0.5 * (l2 + u2));\n v3 = v3.multiplyByScalar(0.5 * (l3 + u3));\n\n result.center.copy(v1).add(v2).add(v3);\n\n const scale = scratchVector3.set(u1 - l1, u2 - l2, u3 - l3).multiplyByScalar(0.5);\n const scaleMatrix = new Matrix3([scale[0], 0, 0, 0, scale[1], 0, 0, 0, scale[2]]);\n result.halfAxes.multiplyRight(scaleMatrix);\n\n return result;\n}\n\nexport function makeAxisAlignedBoundingBoxFromPoints(\n positions,\n result = new AxisAlignedBoundingBox()\n) {\n if (!positions || positions.length === 0) {\n result.minimum.set(0, 0, 0);\n result.maximum.set(0, 0, 0);\n result.center.set(0, 0, 0);\n result.halfDiagonal.set(0, 0, 0);\n return result;\n }\n\n let minimumX = positions[0][0];\n let minimumY = positions[0][1];\n let minimumZ = positions[0][2];\n\n let maximumX = positions[0][0];\n let maximumY = positions[0][1];\n let maximumZ = positions[0][2];\n\n for (const p of positions) {\n const x = p[0];\n const y = p[1];\n const z = p[2];\n\n minimumX = Math.min(x, minimumX);\n maximumX = Math.max(x, maximumX);\n minimumY = Math.min(y, minimumY);\n maximumY = Math.max(y, maximumY);\n minimumZ = Math.min(z, minimumZ);\n maximumZ = Math.max(z, maximumZ);\n }\n\n result.minimum.set(minimumX, minimumY, minimumZ);\n result.maximum.set(maximumX, maximumY, maximumZ);\n result.center.copy(result.minimum).add(result.maximum).scale(0.5);\n result.halfDiagonal.copy(result.maximum).subtract(result.center);\n\n return result;\n}\n"],"file":"bounding-box-from-points.js"}
1
+ {"version":3,"sources":["../../../../src/lib/algorithms/bounding-box-from-points.js"],"names":["Vector3","Matrix3","computeEigenDecomposition","OrientedBoundingBox","AxisAlignedBoundingBox","scratchVector2","scratchVector3","scratchVector4","scratchVector5","scratchVector6","scratchCovarianceResult","scratchEigenResult","diagonal","unitary","makeOrientedBoundingBoxFromPoints","positions","result","length","halfAxes","center","meanPoint","position","add","invLength","multiplyByScalar","exx","exy","exz","eyy","eyz","ezz","p","copy","subtract","x","y","z","covarianceMatrix","rotation","v1","getColumn","v2","v3","u1","Number","MAX_VALUE","u2","u3","l1","l2","l3","Math","max","dot","min","scale","set","scaleMatrix","multiplyRight","makeAxisAlignedBoundingBoxFromPoints","minimum","maximum","halfDiagonal","minimumX","minimumY","minimumZ","maximumX","maximumY","maximumZ"],"mappings":"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","sourcesContent":["// This file is derived from the Cesium math library under Apache 2 license\n// See LICENSE.md and https://github.com/AnalyticalGraphicsInc/cesium/blob/master/LICENSE.md\n\nimport {Vector3, Matrix3} from '@math.gl/core';\nimport computeEigenDecomposition from './compute-eigen-decomposition';\nimport OrientedBoundingBox from '../bounding-volumes/oriented-bounding-box';\nimport AxisAlignedBoundingBox from '../bounding-volumes/axis-aligned-bounding-box';\n\nconst scratchVector2 = new Vector3();\n\nconst scratchVector3 = new Vector3();\n\nconst scratchVector4 = new Vector3();\n\nconst scratchVector5 = new Vector3();\n\nconst scratchVector6 = new Vector3();\n\nconst scratchCovarianceResult = new Matrix3();\n\nconst scratchEigenResult = {\n diagonal: new Matrix3(),\n unitary: new Matrix3()\n};\n\n/* eslint-disable max-statements */\nexport function makeOrientedBoundingBoxFromPoints(positions, result = new OrientedBoundingBox()) {\n if (!positions || positions.length === 0) {\n result.halfAxes = new Matrix3([0, 0, 0, 0, 0, 0, 0, 0, 0]);\n result.center = new Vector3();\n return result;\n }\n\n const length = positions.length;\n const meanPoint = new Vector3(0, 0, 0);\n for (const position of positions) {\n meanPoint.add(position);\n }\n const invLength = 1.0 / length;\n meanPoint.multiplyByScalar(invLength);\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\n for (const position of positions) {\n const p = scratchVector2.copy(position).subtract(meanPoint);\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 {unitary} = computeEigenDecomposition(covarianceMatrix, scratchEigenResult);\n const rotation = result.halfAxes.copy(unitary);\n\n let v1 = rotation.getColumn(0, scratchVector4);\n let v2 = rotation.getColumn(1, scratchVector5);\n let v3 = rotation.getColumn(2, scratchVector6);\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 (const position of positions) {\n scratchVector2.copy(position);\n\n u1 = Math.max(scratchVector2.dot(v1), u1);\n u2 = Math.max(scratchVector2.dot(v2), u2);\n u3 = Math.max(scratchVector2.dot(v3), u3);\n\n l1 = Math.min(scratchVector2.dot(v1), l1);\n l2 = Math.min(scratchVector2.dot(v2), l2);\n l3 = Math.min(scratchVector2.dot(v3), l3);\n }\n\n v1 = v1.multiplyByScalar(0.5 * (l1 + u1));\n v2 = v2.multiplyByScalar(0.5 * (l2 + u2));\n v3 = v3.multiplyByScalar(0.5 * (l3 + u3));\n\n result.center.copy(v1).add(v2).add(v3);\n\n const scale = scratchVector3.set(u1 - l1, u2 - l2, u3 - l3).multiplyByScalar(0.5);\n const scaleMatrix = new Matrix3([scale[0], 0, 0, 0, scale[1], 0, 0, 0, scale[2]]);\n result.halfAxes.multiplyRight(scaleMatrix);\n\n return result;\n}\n\nexport function makeAxisAlignedBoundingBoxFromPoints(\n positions,\n result = new AxisAlignedBoundingBox()\n) {\n if (!positions || positions.length === 0) {\n result.minimum.set(0, 0, 0);\n result.maximum.set(0, 0, 0);\n result.center.set(0, 0, 0);\n result.halfDiagonal.set(0, 0, 0);\n return result;\n }\n\n let minimumX = positions[0][0];\n let minimumY = positions[0][1];\n let minimumZ = positions[0][2];\n\n let maximumX = positions[0][0];\n let maximumY = positions[0][1];\n let maximumZ = positions[0][2];\n\n for (const p of positions) {\n const x = p[0];\n const y = p[1];\n const z = p[2];\n\n minimumX = Math.min(x, minimumX);\n maximumX = Math.max(x, maximumX);\n minimumY = Math.min(y, minimumY);\n maximumY = Math.max(y, maximumY);\n minimumZ = Math.min(z, minimumZ);\n maximumZ = Math.max(z, maximumZ);\n }\n\n result.minimum.set(minimumX, minimumY, minimumZ);\n result.maximum.set(maximumX, maximumY, maximumZ);\n result.center.copy(result.minimum).add(result.maximum).scale(0.5);\n result.halfDiagonal.copy(result.maximum).subtract(result.center);\n\n return result;\n}\n"],"file":"bounding-box-from-points.js"}
@@ -33,27 +33,27 @@ export default function makeBoundingSphereFromPoints(positions, result = new Bou
33
33
  const z = currentPos.z;
34
34
 
35
35
  if (x < xMin.x) {
36
- currentPos.copy(xMin);
36
+ xMin.copy(currentPos);
37
37
  }
38
38
 
39
39
  if (x > xMax.x) {
40
- currentPos.copy(xMax);
40
+ xMax.copy(currentPos);
41
41
  }
42
42
 
43
43
  if (y < yMin.y) {
44
- currentPos.copy(yMin);
44
+ yMin.copy(currentPos);
45
45
  }
46
46
 
47
47
  if (y > yMax.y) {
48
- currentPos.copy(yMax);
48
+ yMax.copy(currentPos);
49
49
  }
50
50
 
51
51
  if (z < zMin.z) {
52
- currentPos.copy(zMin);
52
+ zMin.copy(currentPos);
53
53
  }
54
54
 
55
55
  if (z > zMax.z) {
56
- currentPos.copy(zMax);
56
+ zMax.copy(currentPos);
57
57
  }
58
58
  }
59
59
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/algorithms/bounding-sphere-from-points.js"],"names":["Vector3","BoundingSphere","fromPointsXMin","fromPointsYMin","fromPointsZMin","fromPointsXMax","fromPointsYMax","fromPointsZMax","fromPointsCurrentPos","fromPointsScratch","fromPointsRitterCenter","fromPointsMinBoxPt","fromPointsMaxBoxPt","fromPointsNaiveCenterScratch","volumeConstant","Math","PI","makeBoundingSphereFromPoints","positions","result","length","fromCenterRadius","currentPos","copy","xMin","yMin","zMin","xMax","yMax","zMax","position","x","y","z","xSpan","subtract","magnitudeSquared","ySpan","zSpan","diameter1","diameter2","maxSpan","ritterCenter","radiusSquared","ritterRadius","sqrt","minBoxPt","maxBoxPt","naiveCenter","add","multiplyByScalar","naiveRadius","r","magnitude","oldCenterToPointSquared","oldCenterToPoint","oldToNew","to","center","radius"],"mappings":"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","sourcesContent":["// This file is derived from the Cesium math library under Apache 2 license\n// See LICENSE.md and https://github.com/AnalyticalGraphicsInc/cesium/blob/master/LICENSE.md\n\nimport {Vector3} from '@math.gl/core';\nimport BoundingSphere from '../bounding-volumes/bounding-sphere';\n\n/* eslint-disable */\nconst fromPointsXMin = new Vector3();\nconst fromPointsYMin = new Vector3();\nconst fromPointsZMin = new Vector3();\nconst fromPointsXMax = new Vector3();\nconst fromPointsYMax = new Vector3();\nconst fromPointsZMax = new Vector3();\nconst fromPointsCurrentPos = new Vector3();\nconst fromPointsScratch = new Vector3();\nconst fromPointsRitterCenter = new Vector3();\nconst fromPointsMinBoxPt = new Vector3();\nconst fromPointsMaxBoxPt = new Vector3();\nconst fromPointsNaiveCenterScratch = new Vector3();\nconst volumeConstant = (4.0 / 3.0) * Math.PI;\n\nexport default function makeBoundingSphereFromPoints(positions, result = new BoundingSphere()) {\n if (!positions || positions.length === 0) {\n return result.fromCenterRadius([0, 0, 0], 0);\n }\n\n const currentPos = fromPointsCurrentPos.copy(positions[0]);\n\n const xMin = fromPointsXMin.copy(currentPos);\n const yMin = fromPointsYMin.copy(currentPos);\n const zMin = fromPointsZMin.copy(currentPos);\n\n const xMax = fromPointsXMax.copy(currentPos);\n const yMax = fromPointsYMax.copy(currentPos);\n const zMax = fromPointsZMax.copy(currentPos);\n\n for (const position of positions) {\n currentPos.copy(position);\n\n const x = currentPos.x;\n const y = currentPos.y;\n const z = currentPos.z;\n\n // Store points containing the the smallest and largest components\n if (x < xMin.x) {\n currentPos.copy(xMin);\n }\n\n if (x > xMax.x) {\n currentPos.copy(xMax);\n }\n\n if (y < yMin.y) {\n currentPos.copy(yMin);\n }\n\n if (y > yMax.y) {\n currentPos.copy(yMax);\n }\n\n if (z < zMin.z) {\n currentPos.copy(zMin);\n }\n\n if (z > zMax.z) {\n currentPos.copy(zMax);\n }\n }\n\n // Compute x-, y-, and z-spans (Squared distances b/n each component's min. and max.).\n const xSpan = fromPointsScratch.copy(xMax).subtract(xMin).magnitudeSquared();\n const ySpan = fromPointsScratch.copy(yMax).subtract(yMin).magnitudeSquared();\n const zSpan = fromPointsScratch.copy(zMax).subtract(zMin).magnitudeSquared();\n\n // Set the diameter endpoints to the largest span.\n let diameter1 = xMin;\n let diameter2 = xMax;\n let maxSpan = xSpan;\n if (ySpan > maxSpan) {\n maxSpan = ySpan;\n diameter1 = yMin;\n diameter2 = yMax;\n }\n if (zSpan > maxSpan) {\n maxSpan = zSpan;\n diameter1 = zMin;\n diameter2 = zMax;\n }\n\n // Calculate the center of the initial sphere found by Ritter's algorithm\n const ritterCenter = fromPointsRitterCenter;\n ritterCenter.x = (diameter1.x + diameter2.x) * 0.5;\n ritterCenter.y = (diameter1.y + diameter2.y) * 0.5;\n ritterCenter.z = (diameter1.z + diameter2.z) * 0.5;\n\n // Calculate the radius of the initial sphere found by Ritter's algorithm\n let radiusSquared = fromPointsScratch.copy(diameter2).subtract(ritterCenter).magnitudeSquared();\n let ritterRadius = Math.sqrt(radiusSquared);\n\n // Find the center of the sphere found using the Naive method.\n const minBoxPt = fromPointsMinBoxPt;\n minBoxPt.x = xMin.x;\n minBoxPt.y = yMin.y;\n minBoxPt.z = zMin.z;\n\n const maxBoxPt = fromPointsMaxBoxPt;\n maxBoxPt.x = xMax.x;\n maxBoxPt.y = yMax.y;\n maxBoxPt.z = zMax.z;\n\n const naiveCenter = fromPointsNaiveCenterScratch\n .copy(minBoxPt)\n .add(maxBoxPt)\n .multiplyByScalar(0.5);\n\n // Begin 2nd pass to find naive radius and modify the ritter sphere.\n let naiveRadius = 0;\n for (const position of positions) {\n currentPos.copy(position);\n\n // Find the furthest point from the naive center to calculate the naive radius.\n const r = fromPointsScratch.copy(currentPos).subtract(naiveCenter).magnitude();\n if (r > naiveRadius) {\n naiveRadius = r;\n }\n\n // Make adjustments to the Ritter Sphere to include all points.\n const oldCenterToPointSquared = fromPointsScratch\n .copy(currentPos)\n .subtract(ritterCenter)\n .magnitudeSquared();\n\n if (oldCenterToPointSquared > radiusSquared) {\n const oldCenterToPoint = Math.sqrt(oldCenterToPointSquared);\n // Calculate new radius to include the point that lies outside\n ritterRadius = (ritterRadius + oldCenterToPoint) * 0.5;\n radiusSquared = ritterRadius * ritterRadius;\n // Calculate center of new Ritter sphere\n const oldToNew = oldCenterToPoint - ritterRadius;\n ritterCenter.x = (ritterRadius * ritterCenter.x + oldToNew * currentPos.x) / oldCenterToPoint;\n ritterCenter.y = (ritterRadius * ritterCenter.y + oldToNew * currentPos.y) / oldCenterToPoint;\n ritterCenter.z = (ritterRadius * ritterCenter.z + oldToNew * currentPos.z) / oldCenterToPoint;\n }\n }\n\n if (ritterRadius < naiveRadius) {\n ritterCenter.to(result.center);\n // @ts-ignore TS2540: Cannot assign to 'radius' because it is a read-only property.\n result.radius = ritterRadius;\n } else {\n naiveCenter.to(result.center);\n // @ts-ignore TS2540: Cannot assign to 'radius' because it is a read-only property.\n result.radius = naiveRadius;\n }\n\n return result;\n}\n"],"file":"bounding-sphere-from-points.js"}
1
+ {"version":3,"sources":["../../../../src/lib/algorithms/bounding-sphere-from-points.js"],"names":["Vector3","BoundingSphere","fromPointsXMin","fromPointsYMin","fromPointsZMin","fromPointsXMax","fromPointsYMax","fromPointsZMax","fromPointsCurrentPos","fromPointsScratch","fromPointsRitterCenter","fromPointsMinBoxPt","fromPointsMaxBoxPt","fromPointsNaiveCenterScratch","volumeConstant","Math","PI","makeBoundingSphereFromPoints","positions","result","length","fromCenterRadius","currentPos","copy","xMin","yMin","zMin","xMax","yMax","zMax","position","x","y","z","xSpan","subtract","magnitudeSquared","ySpan","zSpan","diameter1","diameter2","maxSpan","ritterCenter","radiusSquared","ritterRadius","sqrt","minBoxPt","maxBoxPt","naiveCenter","add","multiplyByScalar","naiveRadius","r","magnitude","oldCenterToPointSquared","oldCenterToPoint","oldToNew","to","center","radius"],"mappings":"AAGA,SAAQA,OAAR,QAAsB,eAAtB;AACA,OAAOC,cAAP,MAA2B,qCAA3B;AAGA,MAAMC,cAAc,GAAG,IAAIF,OAAJ,EAAvB;AACA,MAAMG,cAAc,GAAG,IAAIH,OAAJ,EAAvB;AACA,MAAMI,cAAc,GAAG,IAAIJ,OAAJ,EAAvB;AACA,MAAMK,cAAc,GAAG,IAAIL,OAAJ,EAAvB;AACA,MAAMM,cAAc,GAAG,IAAIN,OAAJ,EAAvB;AACA,MAAMO,cAAc,GAAG,IAAIP,OAAJ,EAAvB;AACA,MAAMQ,oBAAoB,GAAG,IAAIR,OAAJ,EAA7B;AACA,MAAMS,iBAAiB,GAAG,IAAIT,OAAJ,EAA1B;AACA,MAAMU,sBAAsB,GAAG,IAAIV,OAAJ,EAA/B;AACA,MAAMW,kBAAkB,GAAG,IAAIX,OAAJ,EAA3B;AACA,MAAMY,kBAAkB,GAAG,IAAIZ,OAAJ,EAA3B;AACA,MAAMa,4BAA4B,GAAG,IAAIb,OAAJ,EAArC;AACA,MAAMc,cAAc,GAAI,MAAM,GAAP,GAAcC,IAAI,CAACC,EAA1C;AAEA,eAAe,SAASC,4BAAT,CAAsCC,SAAtC,EAAiDC,MAAM,GAAG,IAAIlB,cAAJ,EAA1D,EAAgF;AAC7F,MAAI,CAACiB,SAAD,IAAcA,SAAS,CAACE,MAAV,KAAqB,CAAvC,EAA0C;AACxC,WAAOD,MAAM,CAACE,gBAAP,CAAwB,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,CAAxB,EAAmC,CAAnC,CAAP;AACD;;AAED,QAAMC,UAAU,GAAGd,oBAAoB,CAACe,IAArB,CAA0BL,SAAS,CAAC,CAAD,CAAnC,CAAnB;AAEA,QAAMM,IAAI,GAAGtB,cAAc,CAACqB,IAAf,CAAoBD,UAApB,CAAb;AACA,QAAMG,IAAI,GAAGtB,cAAc,CAACoB,IAAf,CAAoBD,UAApB,CAAb;AACA,QAAMI,IAAI,GAAGtB,cAAc,CAACmB,IAAf,CAAoBD,UAApB,CAAb;AAEA,QAAMK,IAAI,GAAGtB,cAAc,CAACkB,IAAf,CAAoBD,UAApB,CAAb;AACA,QAAMM,IAAI,GAAGtB,cAAc,CAACiB,IAAf,CAAoBD,UAApB,CAAb;AACA,QAAMO,IAAI,GAAGtB,cAAc,CAACgB,IAAf,CAAoBD,UAApB,CAAb;;AAEA,OAAK,MAAMQ,QAAX,IAAuBZ,SAAvB,EAAkC;AAChCI,IAAAA,UAAU,CAACC,IAAX,CAAgBO,QAAhB;AAEA,UAAMC,CAAC,GAAGT,UAAU,CAACS,CAArB;AACA,UAAMC,CAAC,GAAGV,UAAU,CAACU,CAArB;AACA,UAAMC,CAAC,GAAGX,UAAU,CAACW,CAArB;;AAGA,QAAIF,CAAC,GAAGP,IAAI,CAACO,CAAb,EAAgB;AACdP,MAAAA,IAAI,CAACD,IAAL,CAAUD,UAAV;AACD;;AAED,QAAIS,CAAC,GAAGJ,IAAI,CAACI,CAAb,EAAgB;AACdJ,MAAAA,IAAI,CAACJ,IAAL,CAAUD,UAAV;AACD;;AAED,QAAIU,CAAC,GAAGP,IAAI,CAACO,CAAb,EAAgB;AACdP,MAAAA,IAAI,CAACF,IAAL,CAAUD,UAAV;AACD;;AAED,QAAIU,CAAC,GAAGJ,IAAI,CAACI,CAAb,EAAgB;AACdJ,MAAAA,IAAI,CAACL,IAAL,CAAUD,UAAV;AACD;;AAED,QAAIW,CAAC,GAAGP,IAAI,CAACO,CAAb,EAAgB;AACdP,MAAAA,IAAI,CAACH,IAAL,CAAUD,UAAV;AACD;;AAED,QAAIW,CAAC,GAAGJ,IAAI,CAACI,CAAb,EAAgB;AACdJ,MAAAA,IAAI,CAACN,IAAL,CAAUD,UAAV;AACD;AACF;;AAGD,QAAMY,KAAK,GAAGzB,iBAAiB,CAACc,IAAlB,CAAuBI,IAAvB,EAA6BQ,QAA7B,CAAsCX,IAAtC,EAA4CY,gBAA5C,EAAd;AACA,QAAMC,KAAK,GAAG5B,iBAAiB,CAACc,IAAlB,CAAuBK,IAAvB,EAA6BO,QAA7B,CAAsCV,IAAtC,EAA4CW,gBAA5C,EAAd;AACA,QAAME,KAAK,GAAG7B,iBAAiB,CAACc,IAAlB,CAAuBM,IAAvB,EAA6BM,QAA7B,CAAsCT,IAAtC,EAA4CU,gBAA5C,EAAd;AAGA,MAAIG,SAAS,GAAGf,IAAhB;AACA,MAAIgB,SAAS,GAAGb,IAAhB;AACA,MAAIc,OAAO,GAAGP,KAAd;;AACA,MAAIG,KAAK,GAAGI,OAAZ,EAAqB;AACnBA,IAAAA,OAAO,GAAGJ,KAAV;AACAE,IAAAA,SAAS,GAAGd,IAAZ;AACAe,IAAAA,SAAS,GAAGZ,IAAZ;AACD;;AACD,MAAIU,KAAK,GAAGG,OAAZ,EAAqB;AACnBA,IAAAA,OAAO,GAAGH,KAAV;AACAC,IAAAA,SAAS,GAAGb,IAAZ;AACAc,IAAAA,SAAS,GAAGX,IAAZ;AACD;;AAGD,QAAMa,YAAY,GAAGhC,sBAArB;AACAgC,EAAAA,YAAY,CAACX,CAAb,GAAiB,CAACQ,SAAS,CAACR,CAAV,GAAcS,SAAS,CAACT,CAAzB,IAA8B,GAA/C;AACAW,EAAAA,YAAY,CAACV,CAAb,GAAiB,CAACO,SAAS,CAACP,CAAV,GAAcQ,SAAS,CAACR,CAAzB,IAA8B,GAA/C;AACAU,EAAAA,YAAY,CAACT,CAAb,GAAiB,CAACM,SAAS,CAACN,CAAV,GAAcO,SAAS,CAACP,CAAzB,IAA8B,GAA/C;AAGA,MAAIU,aAAa,GAAGlC,iBAAiB,CAACc,IAAlB,CAAuBiB,SAAvB,EAAkCL,QAAlC,CAA2CO,YAA3C,EAAyDN,gBAAzD,EAApB;AACA,MAAIQ,YAAY,GAAG7B,IAAI,CAAC8B,IAAL,CAAUF,aAAV,CAAnB;AAGA,QAAMG,QAAQ,GAAGnC,kBAAjB;AACAmC,EAAAA,QAAQ,CAACf,CAAT,GAAaP,IAAI,CAACO,CAAlB;AACAe,EAAAA,QAAQ,CAACd,CAAT,GAAaP,IAAI,CAACO,CAAlB;AACAc,EAAAA,QAAQ,CAACb,CAAT,GAAaP,IAAI,CAACO,CAAlB;AAEA,QAAMc,QAAQ,GAAGnC,kBAAjB;AACAmC,EAAAA,QAAQ,CAAChB,CAAT,GAAaJ,IAAI,CAACI,CAAlB;AACAgB,EAAAA,QAAQ,CAACf,CAAT,GAAaJ,IAAI,CAACI,CAAlB;AACAe,EAAAA,QAAQ,CAACd,CAAT,GAAaJ,IAAI,CAACI,CAAlB;AAEA,QAAMe,WAAW,GAAGnC,4BAA4B,CAC7CU,IADiB,CACZuB,QADY,EAEjBG,GAFiB,CAEbF,QAFa,EAGjBG,gBAHiB,CAGA,GAHA,CAApB;AAMA,MAAIC,WAAW,GAAG,CAAlB;;AACA,OAAK,MAAMrB,QAAX,IAAuBZ,SAAvB,EAAkC;AAChCI,IAAAA,UAAU,CAACC,IAAX,CAAgBO,QAAhB;AAGA,UAAMsB,CAAC,GAAG3C,iBAAiB,CAACc,IAAlB,CAAuBD,UAAvB,EAAmCa,QAAnC,CAA4Ca,WAA5C,EAAyDK,SAAzD,EAAV;;AACA,QAAID,CAAC,GAAGD,WAAR,EAAqB;AACnBA,MAAAA,WAAW,GAAGC,CAAd;AACD;;AAGD,UAAME,uBAAuB,GAAG7C,iBAAiB,CAC9Cc,IAD6B,CACxBD,UADwB,EAE7Ba,QAF6B,CAEpBO,YAFoB,EAG7BN,gBAH6B,EAAhC;;AAKA,QAAIkB,uBAAuB,GAAGX,aAA9B,EAA6C;AAC3C,YAAMY,gBAAgB,GAAGxC,IAAI,CAAC8B,IAAL,CAAUS,uBAAV,CAAzB;AAEAV,MAAAA,YAAY,GAAG,CAACA,YAAY,GAAGW,gBAAhB,IAAoC,GAAnD;AACAZ,MAAAA,aAAa,GAAGC,YAAY,GAAGA,YAA/B;AAEA,YAAMY,QAAQ,GAAGD,gBAAgB,GAAGX,YAApC;AACAF,MAAAA,YAAY,CAACX,CAAb,GAAiB,CAACa,YAAY,GAAGF,YAAY,CAACX,CAA5B,GAAgCyB,QAAQ,GAAGlC,UAAU,CAACS,CAAvD,IAA4DwB,gBAA7E;AACAb,MAAAA,YAAY,CAACV,CAAb,GAAiB,CAACY,YAAY,GAAGF,YAAY,CAACV,CAA5B,GAAgCwB,QAAQ,GAAGlC,UAAU,CAACU,CAAvD,IAA4DuB,gBAA7E;AACAb,MAAAA,YAAY,CAACT,CAAb,GAAiB,CAACW,YAAY,GAAGF,YAAY,CAACT,CAA5B,GAAgCuB,QAAQ,GAAGlC,UAAU,CAACW,CAAvD,IAA4DsB,gBAA7E;AACD;AACF;;AAED,MAAIX,YAAY,GAAGO,WAAnB,EAAgC;AAC9BT,IAAAA,YAAY,CAACe,EAAb,CAAgBtC,MAAM,CAACuC,MAAvB;AAEAvC,IAAAA,MAAM,CAACwC,MAAP,GAAgBf,YAAhB;AACD,GAJD,MAIO;AACLI,IAAAA,WAAW,CAACS,EAAZ,CAAetC,MAAM,CAACuC,MAAtB;AAEAvC,IAAAA,MAAM,CAACwC,MAAP,GAAgBR,WAAhB;AACD;;AAED,SAAOhC,MAAP;AACD","sourcesContent":["// This file is derived from the Cesium math library under Apache 2 license\n// See LICENSE.md and https://github.com/AnalyticalGraphicsInc/cesium/blob/master/LICENSE.md\n\nimport {Vector3} from '@math.gl/core';\nimport BoundingSphere from '../bounding-volumes/bounding-sphere';\n\n/* eslint-disable */\nconst fromPointsXMin = new Vector3();\nconst fromPointsYMin = new Vector3();\nconst fromPointsZMin = new Vector3();\nconst fromPointsXMax = new Vector3();\nconst fromPointsYMax = new Vector3();\nconst fromPointsZMax = new Vector3();\nconst fromPointsCurrentPos = new Vector3();\nconst fromPointsScratch = new Vector3();\nconst fromPointsRitterCenter = new Vector3();\nconst fromPointsMinBoxPt = new Vector3();\nconst fromPointsMaxBoxPt = new Vector3();\nconst fromPointsNaiveCenterScratch = new Vector3();\nconst volumeConstant = (4.0 / 3.0) * Math.PI;\n\nexport default function makeBoundingSphereFromPoints(positions, result = new BoundingSphere()) {\n if (!positions || positions.length === 0) {\n return result.fromCenterRadius([0, 0, 0], 0);\n }\n\n const currentPos = fromPointsCurrentPos.copy(positions[0]);\n\n const xMin = fromPointsXMin.copy(currentPos);\n const yMin = fromPointsYMin.copy(currentPos);\n const zMin = fromPointsZMin.copy(currentPos);\n\n const xMax = fromPointsXMax.copy(currentPos);\n const yMax = fromPointsYMax.copy(currentPos);\n const zMax = fromPointsZMax.copy(currentPos);\n\n for (const position of positions) {\n currentPos.copy(position);\n\n const x = currentPos.x;\n const y = currentPos.y;\n const z = currentPos.z;\n\n // Store points containing the the smallest and largest components\n if (x < xMin.x) {\n xMin.copy(currentPos);\n }\n\n if (x > xMax.x) {\n xMax.copy(currentPos);\n }\n\n if (y < yMin.y) {\n yMin.copy(currentPos);\n }\n\n if (y > yMax.y) {\n yMax.copy(currentPos);\n }\n\n if (z < zMin.z) {\n zMin.copy(currentPos);\n }\n\n if (z > zMax.z) {\n zMax.copy(currentPos);\n }\n }\n\n // Compute x-, y-, and z-spans (Squared distances b/n each component's min. and max.).\n const xSpan = fromPointsScratch.copy(xMax).subtract(xMin).magnitudeSquared();\n const ySpan = fromPointsScratch.copy(yMax).subtract(yMin).magnitudeSquared();\n const zSpan = fromPointsScratch.copy(zMax).subtract(zMin).magnitudeSquared();\n\n // Set the diameter endpoints to the largest span.\n let diameter1 = xMin;\n let diameter2 = xMax;\n let maxSpan = xSpan;\n if (ySpan > maxSpan) {\n maxSpan = ySpan;\n diameter1 = yMin;\n diameter2 = yMax;\n }\n if (zSpan > maxSpan) {\n maxSpan = zSpan;\n diameter1 = zMin;\n diameter2 = zMax;\n }\n\n // Calculate the center of the initial sphere found by Ritter's algorithm\n const ritterCenter = fromPointsRitterCenter;\n ritterCenter.x = (diameter1.x + diameter2.x) * 0.5;\n ritterCenter.y = (diameter1.y + diameter2.y) * 0.5;\n ritterCenter.z = (diameter1.z + diameter2.z) * 0.5;\n\n // Calculate the radius of the initial sphere found by Ritter's algorithm\n let radiusSquared = fromPointsScratch.copy(diameter2).subtract(ritterCenter).magnitudeSquared();\n let ritterRadius = Math.sqrt(radiusSquared);\n\n // Find the center of the sphere found using the Naive method.\n const minBoxPt = fromPointsMinBoxPt;\n minBoxPt.x = xMin.x;\n minBoxPt.y = yMin.y;\n minBoxPt.z = zMin.z;\n\n const maxBoxPt = fromPointsMaxBoxPt;\n maxBoxPt.x = xMax.x;\n maxBoxPt.y = yMax.y;\n maxBoxPt.z = zMax.z;\n\n const naiveCenter = fromPointsNaiveCenterScratch\n .copy(minBoxPt)\n .add(maxBoxPt)\n .multiplyByScalar(0.5);\n\n // Begin 2nd pass to find naive radius and modify the ritter sphere.\n let naiveRadius = 0;\n for (const position of positions) {\n currentPos.copy(position);\n\n // Find the furthest point from the naive center to calculate the naive radius.\n const r = fromPointsScratch.copy(currentPos).subtract(naiveCenter).magnitude();\n if (r > naiveRadius) {\n naiveRadius = r;\n }\n\n // Make adjustments to the Ritter Sphere to include all points.\n const oldCenterToPointSquared = fromPointsScratch\n .copy(currentPos)\n .subtract(ritterCenter)\n .magnitudeSquared();\n\n if (oldCenterToPointSquared > radiusSquared) {\n const oldCenterToPoint = Math.sqrt(oldCenterToPointSquared);\n // Calculate new radius to include the point that lies outside\n ritterRadius = (ritterRadius + oldCenterToPoint) * 0.5;\n radiusSquared = ritterRadius * ritterRadius;\n // Calculate center of new Ritter sphere\n const oldToNew = oldCenterToPoint - ritterRadius;\n ritterCenter.x = (ritterRadius * ritterCenter.x + oldToNew * currentPos.x) / oldCenterToPoint;\n ritterCenter.y = (ritterRadius * ritterCenter.y + oldToNew * currentPos.y) / oldCenterToPoint;\n ritterCenter.z = (ritterRadius * ritterCenter.z + oldToNew * currentPos.z) / oldCenterToPoint;\n }\n }\n\n if (ritterRadius < naiveRadius) {\n ritterCenter.to(result.center);\n // @ts-ignore TS2540: Cannot assign to 'radius' because it is a read-only property.\n result.radius = ritterRadius;\n } else {\n naiveCenter.to(result.center);\n // @ts-ignore TS2540: Cannot assign to 'radius' because it is a read-only property.\n result.radius = naiveRadius;\n }\n\n return result;\n}\n"],"file":"bounding-sphere-from-points.js"}
@@ -73,13 +73,14 @@ export default class BoundingSphere {
73
73
  }
74
74
 
75
75
  distanceSquaredTo(point) {
76
- point = scratchVector.from(point);
77
- const delta = point.subtract(this.center);
78
- return delta.lengthSquared() - this.radius * this.radius;
76
+ const d = this.distanceTo(point);
77
+ return d * d;
79
78
  }
80
79
 
81
80
  distanceTo(point) {
82
- return Math.sqrt(this.distanceSquaredTo(point));
81
+ point = scratchVector.from(point);
82
+ const delta = point.subtract(this.center);
83
+ return Math.max(0, delta.len() - this.radius);
83
84
  }
84
85
 
85
86
  intersectPlane(plane) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/bounding-volumes/bounding-sphere.js"],"names":["Vector3","mat4","INTERSECTION","scratchVector","scratchVector2","BoundingSphere","constructor","center","radius","fromCenterRadius","from","fromCornerPoints","corner","oppositeCorner","add","scale","distance","equals","right","Boolean","clone","union","boundingSphere","leftCenter","leftRadius","rightCenter","rightRadius","toRightCenter","copy","subtract","centerSeparation","magnitude","halfDistanceBetweenTangentPoints","expand","point","transform","getScaling","Math","max","distanceSquaredTo","delta","lengthSquared","distanceTo","sqrt","intersectPlane","plane","normal","distanceToPlane","dot","OUTSIDE","INTERSECTING","INSIDE"],"mappings":"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","sourcesContent":["// This file is derived from the Cesium math library under Apache 2 license\n// See LICENSE.md and https://github.com/AnalyticalGraphicsInc/cesium/blob/master/LICENSE.md\n\nimport {Vector3} from '@math.gl/core';\nimport * as mat4 from 'gl-matrix/mat4';\nimport {INTERSECTION} from '../../constants';\n\n// import Rectangle from './rectangle';\n\n// const defaultProjection = new GeographicProjection();\n// const fromRectangle2DLowerLeft = new Vector3();\n// const fromRectangle2DUpperRight = new Vector3();\n// const fromRectangle2DSouthwest = new Cartographic();\n// const fromRectangle2DNortheast = new Cartographic();\n\n// const fromRectangle3DScratch = [];\n\nconst scratchVector = new Vector3();\nconst scratchVector2 = new Vector3();\n\nexport default class BoundingSphere {\n constructor(center = [0, 0, 0], radius = 0.0) {\n this.radius = -0;\n this.center = new Vector3();\n this.fromCenterRadius(center, radius);\n }\n\n fromCenterRadius(center, radius) {\n this.center.from(center);\n this.radius = radius;\n return this;\n }\n\n fromCornerPoints(corner, oppositeCorner) {\n oppositeCorner = scratchVector.from(oppositeCorner);\n this.center = new Vector3().from(corner).add(oppositeCorner).scale(0.5);\n this.radius = this.center.distance(oppositeCorner);\n return this;\n }\n\n equals(right) {\n return (\n this === right ||\n (Boolean(right) && this.center.equals(right.center) && this.radius === right.radius)\n );\n }\n\n clone() {\n return new BoundingSphere(this.center, this.radius);\n }\n\n union(boundingSphere) {\n const leftCenter = this.center;\n const leftRadius = this.radius;\n const rightCenter = boundingSphere.center;\n const rightRadius = boundingSphere.radius;\n\n const toRightCenter = scratchVector.copy(rightCenter).subtract(leftCenter);\n const centerSeparation = toRightCenter.magnitude();\n\n if (leftRadius >= centerSeparation + rightRadius) {\n // Left sphere wins.\n return this.clone();\n }\n\n if (rightRadius >= centerSeparation + leftRadius) {\n // Right sphere wins.\n return boundingSphere.clone();\n }\n\n // There are two tangent points, one on far side of each sphere.\n const halfDistanceBetweenTangentPoints = (leftRadius + centerSeparation + rightRadius) * 0.5;\n\n // Compute the center point halfway between the two tangent points.\n scratchVector2\n .copy(toRightCenter)\n .scale((-leftRadius + halfDistanceBetweenTangentPoints) / centerSeparation)\n .add(leftCenter);\n\n this.center.copy(scratchVector2);\n this.radius = halfDistanceBetweenTangentPoints;\n\n return this;\n }\n\n expand(point) {\n point = scratchVector.from(point);\n const radius = point.subtract(this.center).magnitude();\n if (radius > this.radius) {\n this.radius = radius;\n }\n return this;\n }\n\n transform(transform) {\n this.center.transform(transform);\n const scale = mat4.getScaling(scratchVector, transform);\n this.radius = Math.max(scale[0], Math.max(scale[1], scale[2])) * this.radius;\n return this;\n }\n\n // Computes the estimated distance squared from the closest point on a bounding sphere to a point.\n distanceSquaredTo(point) {\n point = scratchVector.from(point);\n const delta = point.subtract(this.center);\n return delta.lengthSquared() - this.radius * this.radius;\n }\n\n distanceTo(point) {\n return Math.sqrt(this.distanceSquaredTo(point));\n }\n\n // Determines which side of a plane a sphere is located.\n intersectPlane(plane) {\n const center = this.center;\n const radius = this.radius;\n const normal = plane.normal;\n const distanceToPlane = normal.dot(center) + plane.distance;\n\n // The center point is negative side of the plane normal\n if (distanceToPlane < -radius) {\n return INTERSECTION.OUTSIDE;\n }\n // The center point is positive side of the plane, but radius extends beyond it; partial overlap\n if (distanceToPlane < radius) {\n return INTERSECTION.INTERSECTING;\n }\n // The center point and radius is positive side of the plane\n return INTERSECTION.INSIDE;\n }\n}\n"],"file":"bounding-sphere.js"}
1
+ {"version":3,"sources":["../../../../src/lib/bounding-volumes/bounding-sphere.js"],"names":["Vector3","mat4","INTERSECTION","scratchVector","scratchVector2","BoundingSphere","constructor","center","radius","fromCenterRadius","from","fromCornerPoints","corner","oppositeCorner","add","scale","distance","equals","right","Boolean","clone","union","boundingSphere","leftCenter","leftRadius","rightCenter","rightRadius","toRightCenter","copy","subtract","centerSeparation","magnitude","halfDistanceBetweenTangentPoints","expand","point","transform","getScaling","Math","max","distanceSquaredTo","d","distanceTo","delta","len","intersectPlane","plane","normal","distanceToPlane","dot","OUTSIDE","INTERSECTING","INSIDE"],"mappings":"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","sourcesContent":["// This file is derived from the Cesium math library under Apache 2 license\n// See LICENSE.md and https://github.com/AnalyticalGraphicsInc/cesium/blob/master/LICENSE.md\n\nimport {Vector3} from '@math.gl/core';\nimport * as mat4 from 'gl-matrix/mat4';\nimport {INTERSECTION} from '../../constants';\n\n// import Rectangle from './rectangle';\n\n// const defaultProjection = new GeographicProjection();\n// const fromRectangle2DLowerLeft = new Vector3();\n// const fromRectangle2DUpperRight = new Vector3();\n// const fromRectangle2DSouthwest = new Cartographic();\n// const fromRectangle2DNortheast = new Cartographic();\n\n// const fromRectangle3DScratch = [];\n\nconst scratchVector = new Vector3();\nconst scratchVector2 = new Vector3();\n\nexport default class BoundingSphere {\n constructor(center = [0, 0, 0], radius = 0.0) {\n this.radius = -0;\n this.center = new Vector3();\n this.fromCenterRadius(center, radius);\n }\n\n fromCenterRadius(center, radius) {\n this.center.from(center);\n this.radius = radius;\n return this;\n }\n\n fromCornerPoints(corner, oppositeCorner) {\n oppositeCorner = scratchVector.from(oppositeCorner);\n this.center = new Vector3().from(corner).add(oppositeCorner).scale(0.5);\n this.radius = this.center.distance(oppositeCorner);\n return this;\n }\n\n equals(right) {\n return (\n this === right ||\n (Boolean(right) && this.center.equals(right.center) && this.radius === right.radius)\n );\n }\n\n clone() {\n return new BoundingSphere(this.center, this.radius);\n }\n\n union(boundingSphere) {\n const leftCenter = this.center;\n const leftRadius = this.radius;\n const rightCenter = boundingSphere.center;\n const rightRadius = boundingSphere.radius;\n\n const toRightCenter = scratchVector.copy(rightCenter).subtract(leftCenter);\n const centerSeparation = toRightCenter.magnitude();\n\n if (leftRadius >= centerSeparation + rightRadius) {\n // Left sphere wins.\n return this.clone();\n }\n\n if (rightRadius >= centerSeparation + leftRadius) {\n // Right sphere wins.\n return boundingSphere.clone();\n }\n\n // There are two tangent points, one on far side of each sphere.\n const halfDistanceBetweenTangentPoints = (leftRadius + centerSeparation + rightRadius) * 0.5;\n\n // Compute the center point halfway between the two tangent points.\n scratchVector2\n .copy(toRightCenter)\n .scale((-leftRadius + halfDistanceBetweenTangentPoints) / centerSeparation)\n .add(leftCenter);\n\n this.center.copy(scratchVector2);\n this.radius = halfDistanceBetweenTangentPoints;\n\n return this;\n }\n\n expand(point) {\n point = scratchVector.from(point);\n const radius = point.subtract(this.center).magnitude();\n if (radius > this.radius) {\n this.radius = radius;\n }\n return this;\n }\n\n transform(transform) {\n this.center.transform(transform);\n const scale = mat4.getScaling(scratchVector, transform);\n this.radius = Math.max(scale[0], Math.max(scale[1], scale[2])) * this.radius;\n return this;\n }\n\n // Computes the estimated distance squared from the closest point on a bounding sphere to a point.\n distanceSquaredTo(point) {\n const d = this.distanceTo(point);\n return d * d;\n }\n\n distanceTo(point) {\n point = scratchVector.from(point);\n const delta = point.subtract(this.center);\n return Math.max(0, delta.len() - this.radius);\n }\n\n // Determines which side of a plane a sphere is located.\n intersectPlane(plane) {\n const center = this.center;\n const radius = this.radius;\n const normal = plane.normal;\n const distanceToPlane = normal.dot(center) + plane.distance;\n\n // The center point is negative side of the plane normal\n if (distanceToPlane < -radius) {\n return INTERSECTION.OUTSIDE;\n }\n // The center point is positive side of the plane, but radius extends beyond it; partial overlap\n if (distanceToPlane < radius) {\n return INTERSECTION.INTERSECTING;\n }\n // The center point and radius is positive side of the plane\n return INTERSECTION.INSIDE;\n }\n}\n"],"file":"bounding-sphere.js"}
package/package.json CHANGED
@@ -5,7 +5,7 @@
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
8
- "version": "3.5.3",
8
+ "version": "3.5.7",
9
9
  "keywords": [
10
10
  "webgl",
11
11
  "javascript",
@@ -35,8 +35,8 @@
35
35
  ],
36
36
  "dependencies": {
37
37
  "@babel/runtime": "^7.12.0",
38
- "@math.gl/core": "3.5.3",
39
- "gl-matrix": "^3.0.0"
38
+ "@math.gl/core": "3.5.7",
39
+ "gl-matrix": "~3.3.0"
40
40
  },
41
- "gitHead": "b9183c9ec46dd309a601e1de7beb90a18a3e0fea"
41
+ "gitHead": "60abe7148aa6f32edde0322006ed8d8ad25c0d73"
42
42
  }
@@ -89,13 +89,15 @@ export function makeOrientedBoundingBoxFromPoints(positions, result = new Orient
89
89
  let l3 = Number.MAX_VALUE;
90
90
 
91
91
  for (const position of positions) {
92
- u1 = Math.max(position.dot(v1), u1);
93
- u2 = Math.max(position.dot(v2), u2);
94
- u3 = Math.max(position.dot(v3), u3);
92
+ scratchVector2.copy(position);
95
93
 
96
- l1 = Math.min(position.dot(v1), l1);
97
- l2 = Math.min(position.dot(v2), l2);
98
- l3 = Math.min(position.dot(v3), l3);
94
+ u1 = Math.max(scratchVector2.dot(v1), u1);
95
+ u2 = Math.max(scratchVector2.dot(v2), u2);
96
+ u3 = Math.max(scratchVector2.dot(v3), u3);
97
+
98
+ l1 = Math.min(scratchVector2.dot(v1), l1);
99
+ l2 = Math.min(scratchVector2.dot(v2), l2);
100
+ l3 = Math.min(scratchVector2.dot(v3), l3);
99
101
  }
100
102
 
101
103
  v1 = v1.multiplyByScalar(0.5 * (l1 + u1));
@@ -43,27 +43,27 @@ export default function makeBoundingSphereFromPoints(positions, result = new Bou
43
43
 
44
44
  // Store points containing the the smallest and largest components
45
45
  if (x < xMin.x) {
46
- currentPos.copy(xMin);
46
+ xMin.copy(currentPos);
47
47
  }
48
48
 
49
49
  if (x > xMax.x) {
50
- currentPos.copy(xMax);
50
+ xMax.copy(currentPos);
51
51
  }
52
52
 
53
53
  if (y < yMin.y) {
54
- currentPos.copy(yMin);
54
+ yMin.copy(currentPos);
55
55
  }
56
56
 
57
57
  if (y > yMax.y) {
58
- currentPos.copy(yMax);
58
+ yMax.copy(currentPos);
59
59
  }
60
60
 
61
61
  if (z < zMin.z) {
62
- currentPos.copy(zMin);
62
+ zMin.copy(currentPos);
63
63
  }
64
64
 
65
65
  if (z > zMax.z) {
66
- currentPos.copy(zMax);
66
+ zMax.copy(currentPos);
67
67
  }
68
68
  }
69
69
 
@@ -101,13 +101,14 @@ export default class BoundingSphere {
101
101
 
102
102
  // Computes the estimated distance squared from the closest point on a bounding sphere to a point.
103
103
  distanceSquaredTo(point) {
104
- point = scratchVector.from(point);
105
- const delta = point.subtract(this.center);
106
- return delta.lengthSquared() - this.radius * this.radius;
104
+ const d = this.distanceTo(point);
105
+ return d * d;
107
106
  }
108
107
 
109
108
  distanceTo(point) {
110
- return Math.sqrt(this.distanceSquaredTo(point));
109
+ point = scratchVector.from(point);
110
+ const delta = point.subtract(this.center);
111
+ return Math.max(0, delta.len() - this.radius);
111
112
  }
112
113
 
113
114
  // Determines which side of a plane a sphere is located.