cesium 0.13.0

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.
Files changed (491) hide show
  1. data/LICENSE.md +259 -0
  2. data/README.rdoc +90 -0
  3. data/Rakefile +40 -0
  4. data/app/assets/javascripts/Assets/Assets.profile.js +8 -0
  5. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_0.json +1 -0
  6. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_1.json +1 -0
  7. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_10.json +1 -0
  8. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_11.json +1 -0
  9. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_12.json +1 -0
  10. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_13.json +1 -0
  11. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_14.json +1 -0
  12. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_15.json +1 -0
  13. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_16.json +1 -0
  14. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_17.json +1 -0
  15. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_18.json +1 -0
  16. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_19.json +1 -0
  17. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_2.json +1 -0
  18. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_20.json +1 -0
  19. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_21.json +1 -0
  20. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_22.json +1 -0
  21. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_23.json +1 -0
  22. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_24.json +1 -0
  23. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_25.json +1 -0
  24. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_26.json +1 -0
  25. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_27.json +1 -0
  26. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_3.json +1 -0
  27. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_4.json +1 -0
  28. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_5.json +1 -0
  29. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_6.json +1 -0
  30. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_7.json +1 -0
  31. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_8.json +1 -0
  32. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_9.json +1 -0
  33. data/app/assets/javascripts/Assets/Textures/NE2_LR_LC_SR_W_DR_2048.jpg +0 -0
  34. data/app/assets/javascripts/Assets/Textures/SkyBox/tycho2t3_80_mx.jpg +0 -0
  35. data/app/assets/javascripts/Assets/Textures/SkyBox/tycho2t3_80_my.jpg +0 -0
  36. data/app/assets/javascripts/Assets/Textures/SkyBox/tycho2t3_80_mz.jpg +0 -0
  37. data/app/assets/javascripts/Assets/Textures/SkyBox/tycho2t3_80_px.jpg +0 -0
  38. data/app/assets/javascripts/Assets/Textures/SkyBox/tycho2t3_80_py.jpg +0 -0
  39. data/app/assets/javascripts/Assets/Textures/SkyBox/tycho2t3_80_pz.jpg +0 -0
  40. data/app/assets/javascripts/Assets/Textures/waterNormals.jpg +0 -0
  41. data/app/assets/javascripts/Assets/package.json +6 -0
  42. data/app/assets/javascripts/Cesium.js +320 -0
  43. data/app/assets/javascripts/Core/AnimationController.js +148 -0
  44. data/app/assets/javascripts/Core/AxisAlignedBoundingBox.js +243 -0
  45. data/app/assets/javascripts/Core/BoundingRectangle.js +364 -0
  46. data/app/assets/javascripts/Core/BoundingSphere.js +819 -0
  47. data/app/assets/javascripts/Core/BoxTessellator.js +93 -0
  48. data/app/assets/javascripts/Core/Cartesian2.js +762 -0
  49. data/app/assets/javascripts/Core/Cartesian3.js +861 -0
  50. data/app/assets/javascripts/Core/Cartesian4.js +762 -0
  51. data/app/assets/javascripts/Core/Cartographic.js +211 -0
  52. data/app/assets/javascripts/Core/CatmullRomSpline.js +232 -0
  53. data/app/assets/javascripts/Core/Clock.js +195 -0
  54. data/app/assets/javascripts/Core/ClockRange.js +37 -0
  55. data/app/assets/javascripts/Core/ClockStep.js +32 -0
  56. data/app/assets/javascripts/Core/Color.js +1629 -0
  57. data/app/assets/javascripts/Core/ComponentDatatype.js +119 -0
  58. data/app/assets/javascripts/Core/Core.profile.js +8 -0
  59. data/app/assets/javascripts/Core/CubeMapEllipsoidTessellator.js +198 -0
  60. data/app/assets/javascripts/Core/CubicRealPolynomial.js +251 -0
  61. data/app/assets/javascripts/Core/DefaultProxy.js +30 -0
  62. data/app/assets/javascripts/Core/DeveloperError.js +60 -0
  63. data/app/assets/javascripts/Core/EarthOrientationParameters.js +383 -0
  64. data/app/assets/javascripts/Core/EarthOrientationParametersSample.js +50 -0
  65. data/app/assets/javascripts/Core/Ellipsoid.js +539 -0
  66. data/app/assets/javascripts/Core/EllipsoidTangentPlane.js +207 -0
  67. data/app/assets/javascripts/Core/EllipsoidalOccluder.js +151 -0
  68. data/app/assets/javascripts/Core/EncodedCartesian3.js +197 -0
  69. data/app/assets/javascripts/Core/Enumeration.js +67 -0
  70. data/app/assets/javascripts/Core/Event.js +122 -0
  71. data/app/assets/javascripts/Core/Extent.js +383 -0
  72. data/app/assets/javascripts/Core/ExtentTessellator.js +384 -0
  73. data/app/assets/javascripts/Core/FAR.js +13 -0
  74. data/app/assets/javascripts/Core/FeatureDetection.js +126 -0
  75. data/app/assets/javascripts/Core/Fullscreen.js +235 -0
  76. data/app/assets/javascripts/Core/GeographicProjection.js +107 -0
  77. data/app/assets/javascripts/Core/HermitePolynomialApproximation.js +176 -0
  78. data/app/assets/javascripts/Core/HermiteSpline.js +234 -0
  79. data/app/assets/javascripts/Core/Iau2006XysData.js +259 -0
  80. data/app/assets/javascripts/Core/Iau2006XysSample.js +36 -0
  81. data/app/assets/javascripts/Core/IndexDatatype.js +28 -0
  82. data/app/assets/javascripts/Core/Intersect.js +40 -0
  83. data/app/assets/javascripts/Core/IntersectionTests.js +359 -0
  84. data/app/assets/javascripts/Core/Interval.js +27 -0
  85. data/app/assets/javascripts/Core/Iso8601.js +46 -0
  86. data/app/assets/javascripts/Core/JulianDate.js +1228 -0
  87. data/app/assets/javascripts/Core/KeyboardEventModifier.js +38 -0
  88. data/app/assets/javascripts/Core/LagrangePolynomialApproximation.js +96 -0
  89. data/app/assets/javascripts/Core/LeapSecond.js +158 -0
  90. data/app/assets/javascripts/Core/LinearApproximation.js +98 -0
  91. data/app/assets/javascripts/Core/Math.js +532 -0
  92. data/app/assets/javascripts/Core/Matrix2.js +833 -0
  93. data/app/assets/javascripts/Core/Matrix3.js +1099 -0
  94. data/app/assets/javascripts/Core/Matrix4.js +2164 -0
  95. data/app/assets/javascripts/Core/MeshFilters.js +568 -0
  96. data/app/assets/javascripts/Core/Occluder.js +474 -0
  97. data/app/assets/javascripts/Core/OrientationInterpolator.js +109 -0
  98. data/app/assets/javascripts/Core/PlaneTessellator.js +74 -0
  99. data/app/assets/javascripts/Core/PolygonPipeline.js +792 -0
  100. data/app/assets/javascripts/Core/PolylinePipeline.js +90 -0
  101. data/app/assets/javascripts/Core/PrimitiveType.js +80 -0
  102. data/app/assets/javascripts/Core/QuadraticRealPolynomial.js +146 -0
  103. data/app/assets/javascripts/Core/QuarticRealPolynomial.js +339 -0
  104. data/app/assets/javascripts/Core/Quaternion.js +947 -0
  105. data/app/assets/javascripts/Core/Queue.js +95 -0
  106. data/app/assets/javascripts/Core/Ray.js +64 -0
  107. data/app/assets/javascripts/Core/ReferenceFrame.js +25 -0
  108. data/app/assets/javascripts/Core/RequestErrorEvent.js +35 -0
  109. data/app/assets/javascripts/Core/RuntimeError.js +59 -0
  110. data/app/assets/javascripts/Core/ScreenSpaceEventHandler.js +658 -0
  111. data/app/assets/javascripts/Core/ScreenSpaceEventType.js +149 -0
  112. data/app/assets/javascripts/Core/Shapes.js +230 -0
  113. data/app/assets/javascripts/Core/Spherical.js +192 -0
  114. data/app/assets/javascripts/Core/TaskProcessor.js +131 -0
  115. data/app/assets/javascripts/Core/TimeConstants.js +85 -0
  116. data/app/assets/javascripts/Core/TimeInterval.js +305 -0
  117. data/app/assets/javascripts/Core/TimeIntervalCollection.js +543 -0
  118. data/app/assets/javascripts/Core/TimeStandard.js +31 -0
  119. data/app/assets/javascripts/Core/Tipsify.js +285 -0
  120. data/app/assets/javascripts/Core/Transforms.js +614 -0
  121. data/app/assets/javascripts/Core/TridiagonalSystemSolver.js +102 -0
  122. data/app/assets/javascripts/Core/Visibility.js +38 -0
  123. data/app/assets/javascripts/Core/WebMercatorProjection.js +154 -0
  124. data/app/assets/javascripts/Core/WindingOrder.js +40 -0
  125. data/app/assets/javascripts/Core/binarySearch.js +69 -0
  126. data/app/assets/javascripts/Core/buildModuleUrl.js +77 -0
  127. data/app/assets/javascripts/Core/clone.js +21 -0
  128. data/app/assets/javascripts/Core/combine.js +81 -0
  129. data/app/assets/javascripts/Core/computeSunPosition.js +116 -0
  130. data/app/assets/javascripts/Core/createGuid.js +25 -0
  131. data/app/assets/javascripts/Core/defaultValue.js +22 -0
  132. data/app/assets/javascripts/Core/destroyObject.js +61 -0
  133. data/app/assets/javascripts/Core/freezeObject.js +20 -0
  134. data/app/assets/javascripts/Core/getImagePixels.js +46 -0
  135. data/app/assets/javascripts/Core/isLeapYear.js +30 -0
  136. data/app/assets/javascripts/Core/jsonp.js +116 -0
  137. data/app/assets/javascripts/Core/loadArrayBuffer.js +76 -0
  138. data/app/assets/javascripts/Core/loadImage.js +85 -0
  139. data/app/assets/javascripts/Core/loadJson.js +54 -0
  140. data/app/assets/javascripts/Core/loadText.js +78 -0
  141. data/app/assets/javascripts/Core/loadXML.js +76 -0
  142. data/app/assets/javascripts/Core/package.json +6 -0
  143. data/app/assets/javascripts/Core/pointInsideTriangle2D.js +41 -0
  144. data/app/assets/javascripts/Core/requestAnimationFrame.js +61 -0
  145. data/app/assets/javascripts/Core/throttleRequestByServer.js +74 -0
  146. data/app/assets/javascripts/Core/writeTextToCanvas.js +92 -0
  147. data/app/assets/javascripts/DynamicScene/CompositeDynamicObjectCollection.js +254 -0
  148. data/app/assets/javascripts/DynamicScene/CzmlBoolean.js +57 -0
  149. data/app/assets/javascripts/DynamicScene/CzmlCartesian2.js +96 -0
  150. data/app/assets/javascripts/DynamicScene/CzmlCartesian3.js +99 -0
  151. data/app/assets/javascripts/DynamicScene/CzmlCartographic.js +125 -0
  152. data/app/assets/javascripts/DynamicScene/CzmlColor.js +127 -0
  153. data/app/assets/javascripts/DynamicScene/CzmlDefaults.js +135 -0
  154. data/app/assets/javascripts/DynamicScene/CzmlHorizontalOrigin.js +59 -0
  155. data/app/assets/javascripts/DynamicScene/CzmlImage.js +61 -0
  156. data/app/assets/javascripts/DynamicScene/CzmlLabelStyle.js +59 -0
  157. data/app/assets/javascripts/DynamicScene/CzmlNumber.js +82 -0
  158. data/app/assets/javascripts/DynamicScene/CzmlString.js +56 -0
  159. data/app/assets/javascripts/DynamicScene/CzmlUnitCartesian3.js +99 -0
  160. data/app/assets/javascripts/DynamicScene/CzmlUnitQuaternion.js +172 -0
  161. data/app/assets/javascripts/DynamicScene/CzmlUnitSpherical.js +98 -0
  162. data/app/assets/javascripts/DynamicScene/CzmlVerticalOrigin.js +59 -0
  163. data/app/assets/javascripts/DynamicScene/DynamicBillboard.js +245 -0
  164. data/app/assets/javascripts/DynamicScene/DynamicBillboardVisualizer.js +347 -0
  165. data/app/assets/javascripts/DynamicScene/DynamicColorMaterial.js +78 -0
  166. data/app/assets/javascripts/DynamicScene/DynamicCone.js +291 -0
  167. data/app/assets/javascripts/DynamicScene/DynamicConeVisualizer.js +350 -0
  168. data/app/assets/javascripts/DynamicScene/DynamicConeVisualizerUsingCustomSensor.js +389 -0
  169. data/app/assets/javascripts/DynamicScene/DynamicDirectionsProperty.js +163 -0
  170. data/app/assets/javascripts/DynamicScene/DynamicEllipsoid.js +158 -0
  171. data/app/assets/javascripts/DynamicScene/DynamicEllipsoidVisualizer.js +277 -0
  172. data/app/assets/javascripts/DynamicScene/DynamicImageMaterial.js +136 -0
  173. data/app/assets/javascripts/DynamicScene/DynamicLabel.js +286 -0
  174. data/app/assets/javascripts/DynamicScene/DynamicLabelVisualizer.js +341 -0
  175. data/app/assets/javascripts/DynamicScene/DynamicMaterialProperty.js +125 -0
  176. data/app/assets/javascripts/DynamicScene/DynamicObject.js +364 -0
  177. data/app/assets/javascripts/DynamicScene/DynamicObjectCollection.js +137 -0
  178. data/app/assets/javascripts/DynamicScene/DynamicObjectView.js +299 -0
  179. data/app/assets/javascripts/DynamicScene/DynamicPath.js +214 -0
  180. data/app/assets/javascripts/DynamicScene/DynamicPathVisualizer.js +402 -0
  181. data/app/assets/javascripts/DynamicScene/DynamicPoint.js +184 -0
  182. data/app/assets/javascripts/DynamicScene/DynamicPointVisualizer.js +323 -0
  183. data/app/assets/javascripts/DynamicScene/DynamicPolygon.js +138 -0
  184. data/app/assets/javascripts/DynamicScene/DynamicPolygonVisualizer.js +251 -0
  185. data/app/assets/javascripts/DynamicScene/DynamicPolyline.js +183 -0
  186. data/app/assets/javascripts/DynamicScene/DynamicPolylineVisualizer.js +268 -0
  187. data/app/assets/javascripts/DynamicScene/DynamicPositionProperty.js +525 -0
  188. data/app/assets/javascripts/DynamicScene/DynamicProperty.js +352 -0
  189. data/app/assets/javascripts/DynamicScene/DynamicPyramid.js +204 -0
  190. data/app/assets/javascripts/DynamicScene/DynamicPyramidVisualizer.js +302 -0
  191. data/app/assets/javascripts/DynamicScene/DynamicScene.profile.js +8 -0
  192. data/app/assets/javascripts/DynamicScene/DynamicVertexPositionsProperty.js +199 -0
  193. data/app/assets/javascripts/DynamicScene/ReferenceProperty.js +155 -0
  194. data/app/assets/javascripts/DynamicScene/VisualizerCollection.js +181 -0
  195. data/app/assets/javascripts/DynamicScene/package.json +6 -0
  196. data/app/assets/javascripts/DynamicScene/processCzml.js +77 -0
  197. data/app/assets/javascripts/Renderer/BlendEquation.js +52 -0
  198. data/app/assets/javascripts/Renderer/BlendFunction.js +158 -0
  199. data/app/assets/javascripts/Renderer/BlendingState.js +64 -0
  200. data/app/assets/javascripts/Renderer/Buffer.js +141 -0
  201. data/app/assets/javascripts/Renderer/BufferUsage.js +48 -0
  202. data/app/assets/javascripts/Renderer/ClearCommand.js +40 -0
  203. data/app/assets/javascripts/Renderer/CommandLists.js +42 -0
  204. data/app/assets/javascripts/Renderer/Context.js +2805 -0
  205. data/app/assets/javascripts/Renderer/CubeMap.js +358 -0
  206. data/app/assets/javascripts/Renderer/CubeMapFace.js +202 -0
  207. data/app/assets/javascripts/Renderer/CullFace.js +50 -0
  208. data/app/assets/javascripts/Renderer/DepthFunction.js +95 -0
  209. data/app/assets/javascripts/Renderer/DrawCommand.js +96 -0
  210. data/app/assets/javascripts/Renderer/Framebuffer.js +435 -0
  211. data/app/assets/javascripts/Renderer/MipmapHint.js +50 -0
  212. data/app/assets/javascripts/Renderer/PickFramebuffer.js +178 -0
  213. data/app/assets/javascripts/Renderer/PixelDatatype.js +86 -0
  214. data/app/assets/javascripts/Renderer/PixelFormat.js +113 -0
  215. data/app/assets/javascripts/Renderer/Renderbuffer.js +102 -0
  216. data/app/assets/javascripts/Renderer/RenderbufferFormat.js +77 -0
  217. data/app/assets/javascripts/Renderer/Renderer.profile.js +8 -0
  218. data/app/assets/javascripts/Renderer/ShaderCache.js +121 -0
  219. data/app/assets/javascripts/Renderer/ShaderProgram.js +2402 -0
  220. data/app/assets/javascripts/Renderer/StencilFunction.js +95 -0
  221. data/app/assets/javascripts/Renderer/StencilOperation.js +95 -0
  222. data/app/assets/javascripts/Renderer/Texture.js +395 -0
  223. data/app/assets/javascripts/Renderer/TextureAtlas.js +472 -0
  224. data/app/assets/javascripts/Renderer/TextureAtlasBuilder.js +133 -0
  225. data/app/assets/javascripts/Renderer/TextureMagnificationFilter.js +41 -0
  226. data/app/assets/javascripts/Renderer/TextureMinificationFilter.js +77 -0
  227. data/app/assets/javascripts/Renderer/TextureWrap.js +50 -0
  228. data/app/assets/javascripts/Renderer/UniformDatatype.js +218 -0
  229. data/app/assets/javascripts/Renderer/UniformState.js +799 -0
  230. data/app/assets/javascripts/Renderer/VertexArray.js +365 -0
  231. data/app/assets/javascripts/Renderer/VertexArrayFacade.js +574 -0
  232. data/app/assets/javascripts/Renderer/VertexLayout.js +49 -0
  233. data/app/assets/javascripts/Renderer/loadCubeMap.js +92 -0
  234. data/app/assets/javascripts/Renderer/package.json +6 -0
  235. data/app/assets/javascripts/Scene/AnimationCollection.js +249 -0
  236. data/app/assets/javascripts/Scene/ArcGisMapServerImageryProvider.js +384 -0
  237. data/app/assets/javascripts/Scene/Billboard.js +680 -0
  238. data/app/assets/javascripts/Scene/BillboardCollection.js +1209 -0
  239. data/app/assets/javascripts/Scene/BingMapsImageryProvider.js +460 -0
  240. data/app/assets/javascripts/Scene/BingMapsStyle.js +55 -0
  241. data/app/assets/javascripts/Scene/Camera.js +358 -0
  242. data/app/assets/javascripts/Scene/CameraColumbusViewMode.js +30 -0
  243. data/app/assets/javascripts/Scene/CameraController.js +1258 -0
  244. data/app/assets/javascripts/Scene/CameraEventAggregator.js +270 -0
  245. data/app/assets/javascripts/Scene/CameraEventType.js +53 -0
  246. data/app/assets/javascripts/Scene/CameraFlightPath.js +495 -0
  247. data/app/assets/javascripts/Scene/CentralBody.js +817 -0
  248. data/app/assets/javascripts/Scene/CentralBodySurface.js +1120 -0
  249. data/app/assets/javascripts/Scene/CentralBodySurfaceShaderSet.js +107 -0
  250. data/app/assets/javascripts/Scene/ComplexConicSensorVolume.js +511 -0
  251. data/app/assets/javascripts/Scene/CompositePrimitive.js +454 -0
  252. data/app/assets/javascripts/Scene/CullingVolume.js +59 -0
  253. data/app/assets/javascripts/Scene/CustomSensorVolume.js +440 -0
  254. data/app/assets/javascripts/Scene/DiscardMissingTileImagePolicy.js +134 -0
  255. data/app/assets/javascripts/Scene/EllipsoidPrimitive.js +412 -0
  256. data/app/assets/javascripts/Scene/EllipsoidTerrainProvider.js +182 -0
  257. data/app/assets/javascripts/Scene/FrameState.js +86 -0
  258. data/app/assets/javascripts/Scene/FrustumCommands.js +32 -0
  259. data/app/assets/javascripts/Scene/GeographicTilingScheme.js +265 -0
  260. data/app/assets/javascripts/Scene/HorizontalOrigin.js +39 -0
  261. data/app/assets/javascripts/Scene/Imagery.js +85 -0
  262. data/app/assets/javascripts/Scene/ImageryLayer.js +876 -0
  263. data/app/assets/javascripts/Scene/ImageryLayerCollection.js +403 -0
  264. data/app/assets/javascripts/Scene/ImageryProvider.js +185 -0
  265. data/app/assets/javascripts/Scene/ImageryProviderError.js +149 -0
  266. data/app/assets/javascripts/Scene/ImageryState.js +20 -0
  267. data/app/assets/javascripts/Scene/Label.js +706 -0
  268. data/app/assets/javascripts/Scene/LabelCollection.js +697 -0
  269. data/app/assets/javascripts/Scene/LabelStyle.js +39 -0
  270. data/app/assets/javascripts/Scene/Material.js +1177 -0
  271. data/app/assets/javascripts/Scene/NeverTileDiscardPolicy.js +38 -0
  272. data/app/assets/javascripts/Scene/OpenStreetMapImageryProvider.js +282 -0
  273. data/app/assets/javascripts/Scene/OrthographicFrustum.js +345 -0
  274. data/app/assets/javascripts/Scene/PerformanceDisplay.js +183 -0
  275. data/app/assets/javascripts/Scene/PerspectiveFrustum.js +239 -0
  276. data/app/assets/javascripts/Scene/PerspectiveOffCenterFrustum.js +394 -0
  277. data/app/assets/javascripts/Scene/Polygon.js +886 -0
  278. data/app/assets/javascripts/Scene/Polyline.js +441 -0
  279. data/app/assets/javascripts/Scene/PolylineCollection.js +1532 -0
  280. data/app/assets/javascripts/Scene/Projections.js +93 -0
  281. data/app/assets/javascripts/Scene/RectangularPyramidSensorVolume.js +224 -0
  282. data/app/assets/javascripts/Scene/Scene.js +632 -0
  283. data/app/assets/javascripts/Scene/Scene.profile.js +8 -0
  284. data/app/assets/javascripts/Scene/SceneMode.js +51 -0
  285. data/app/assets/javascripts/Scene/SceneTransitioner.js +776 -0
  286. data/app/assets/javascripts/Scene/ScreenSpaceCameraController.js +1063 -0
  287. data/app/assets/javascripts/Scene/SensorVolumeCollection.js +192 -0
  288. data/app/assets/javascripts/Scene/SingleTileImageryProvider.js +295 -0
  289. data/app/assets/javascripts/Scene/SkyAtmosphere.js +239 -0
  290. data/app/assets/javascripts/Scene/SkyBox.js +231 -0
  291. data/app/assets/javascripts/Scene/TerrainProvider.js +229 -0
  292. data/app/assets/javascripts/Scene/TexturePool.js +154 -0
  293. data/app/assets/javascripts/Scene/Tile.js +322 -0
  294. data/app/assets/javascripts/Scene/TileDiscardPolicy.js +42 -0
  295. data/app/assets/javascripts/Scene/TileImagery.js +36 -0
  296. data/app/assets/javascripts/Scene/TileLoadQueue.js +123 -0
  297. data/app/assets/javascripts/Scene/TileMapServiceImageryProvider.js +337 -0
  298. data/app/assets/javascripts/Scene/TileReplacementQueue.js +139 -0
  299. data/app/assets/javascripts/Scene/TileState.js +19 -0
  300. data/app/assets/javascripts/Scene/TilingScheme.js +213 -0
  301. data/app/assets/javascripts/Scene/VerticalOrigin.js +39 -0
  302. data/app/assets/javascripts/Scene/ViewportQuad.js +256 -0
  303. data/app/assets/javascripts/Scene/WebMapServiceImageryProvider.js +374 -0
  304. data/app/assets/javascripts/Scene/WebMercatorTilingScheme.js +291 -0
  305. data/app/assets/javascripts/Scene/package.json +6 -0
  306. data/app/assets/javascripts/Shaders/BillboardCollectionFS.glsl +30 -0
  307. data/app/assets/javascripts/Shaders/BillboardCollectionFS.js +31 -0
  308. data/app/assets/javascripts/Shaders/BillboardCollectionVS.glsl +68 -0
  309. data/app/assets/javascripts/Shaders/BillboardCollectionVS.js +54 -0
  310. data/app/assets/javascripts/Shaders/BuiltinFunctions.glsl +927 -0
  311. data/app/assets/javascripts/Shaders/BuiltinFunctions.js +322 -0
  312. data/app/assets/javascripts/Shaders/CentralBodyFS.glsl +106 -0
  313. data/app/assets/javascripts/Shaders/CentralBodyFS.js +82 -0
  314. data/app/assets/javascripts/Shaders/CentralBodyFSDepth.glsl +20 -0
  315. data/app/assets/javascripts/Shaders/CentralBodyFSDepth.js +22 -0
  316. data/app/assets/javascripts/Shaders/CentralBodyFSPole.glsl +29 -0
  317. data/app/assets/javascripts/Shaders/CentralBodyFSPole.js +28 -0
  318. data/app/assets/javascripts/Shaders/CentralBodyVS.glsl +88 -0
  319. data/app/assets/javascripts/Shaders/CentralBodyVS.js +69 -0
  320. data/app/assets/javascripts/Shaders/CentralBodyVSDepth.glsl +9 -0
  321. data/app/assets/javascripts/Shaders/CentralBodyVSDepth.js +13 -0
  322. data/app/assets/javascripts/Shaders/CentralBodyVSPole.glsl +12 -0
  323. data/app/assets/javascripts/Shaders/CentralBodyVSPole.js +15 -0
  324. data/app/assets/javascripts/Shaders/ComplexConicSensorVolumeFS.glsl +448 -0
  325. data/app/assets/javascripts/Shaders/ComplexConicSensorVolumeFS.js +361 -0
  326. data/app/assets/javascripts/Shaders/ComplexConicSensorVolumeVS.glsl +19 -0
  327. data/app/assets/javascripts/Shaders/ComplexConicSensorVolumeVS.js +20 -0
  328. data/app/assets/javascripts/Shaders/ConstructiveSolidGeometry.glsl +886 -0
  329. data/app/assets/javascripts/Shaders/ConstructiveSolidGeometry.js +586 -0
  330. data/app/assets/javascripts/Shaders/CustomSensorVolumeFS.glsl +126 -0
  331. data/app/assets/javascripts/Shaders/CustomSensorVolumeFS.js +95 -0
  332. data/app/assets/javascripts/Shaders/CustomSensorVolumeVS.glsl +14 -0
  333. data/app/assets/javascripts/Shaders/CustomSensorVolumeVS.js +18 -0
  334. data/app/assets/javascripts/Shaders/EllipsoidFS.glsl +40 -0
  335. data/app/assets/javascripts/Shaders/EllipsoidFS.js +38 -0
  336. data/app/assets/javascripts/Shaders/EllipsoidVS.glsl +26 -0
  337. data/app/assets/javascripts/Shaders/EllipsoidVS.js +16 -0
  338. data/app/assets/javascripts/Shaders/Materials/AsphaltMaterial.glsl +25 -0
  339. data/app/assets/javascripts/Shaders/Materials/AsphaltMaterial.js +23 -0
  340. data/app/assets/javascripts/Shaders/Materials/BlobMaterial.glsl +18 -0
  341. data/app/assets/javascripts/Shaders/Materials/BlobMaterial.js +19 -0
  342. data/app/assets/javascripts/Shaders/Materials/BrickMaterial.glsl +42 -0
  343. data/app/assets/javascripts/Shaders/Materials/BrickMaterial.js +36 -0
  344. data/app/assets/javascripts/Shaders/Materials/BumpMapMaterial.glsl +29 -0
  345. data/app/assets/javascripts/Shaders/Materials/BumpMapMaterial.js +27 -0
  346. data/app/assets/javascripts/Shaders/Materials/CementMaterial.glsl +19 -0
  347. data/app/assets/javascripts/Shaders/Materials/CementMaterial.js +20 -0
  348. data/app/assets/javascripts/Shaders/Materials/CheckerboardMaterial.glsl +38 -0
  349. data/app/assets/javascripts/Shaders/Materials/CheckerboardMaterial.js +32 -0
  350. data/app/assets/javascripts/Shaders/Materials/DotMaterial.glsl +17 -0
  351. data/app/assets/javascripts/Shaders/Materials/DotMaterial.js +18 -0
  352. data/app/assets/javascripts/Shaders/Materials/ErosionMaterial.glsl +23 -0
  353. data/app/assets/javascripts/Shaders/Materials/ErosionMaterial.js +24 -0
  354. data/app/assets/javascripts/Shaders/Materials/FacetMaterial.glsl +18 -0
  355. data/app/assets/javascripts/Shaders/Materials/FacetMaterial.js +19 -0
  356. data/app/assets/javascripts/Shaders/Materials/FresnelMaterial.glsl +12 -0
  357. data/app/assets/javascripts/Shaders/Materials/FresnelMaterial.js +15 -0
  358. data/app/assets/javascripts/Shaders/Materials/GrassMaterial.glsl +28 -0
  359. data/app/assets/javascripts/Shaders/Materials/GrassMaterial.js +26 -0
  360. data/app/assets/javascripts/Shaders/Materials/NormalMapMaterial.glsl +19 -0
  361. data/app/assets/javascripts/Shaders/Materials/NormalMapMaterial.js +21 -0
  362. data/app/assets/javascripts/Shaders/Materials/ReflectionMaterial.glsl +13 -0
  363. data/app/assets/javascripts/Shaders/Materials/ReflectionMaterial.js +16 -0
  364. data/app/assets/javascripts/Shaders/Materials/RefractionMaterial.glsl +14 -0
  365. data/app/assets/javascripts/Shaders/Materials/RefractionMaterial.js +17 -0
  366. data/app/assets/javascripts/Shaders/Materials/RimLightingMaterial.glsl +18 -0
  367. data/app/assets/javascripts/Shaders/Materials/RimLightingMaterial.js +19 -0
  368. data/app/assets/javascripts/Shaders/Materials/StripeMaterial.glsl +29 -0
  369. data/app/assets/javascripts/Shaders/Materials/StripeMaterial.js +26 -0
  370. data/app/assets/javascripts/Shaders/Materials/TieDyeMaterial.glsl +17 -0
  371. data/app/assets/javascripts/Shaders/Materials/TieDyeMaterial.js +19 -0
  372. data/app/assets/javascripts/Shaders/Materials/Water.glsl +91 -0
  373. data/app/assets/javascripts/Shaders/Materials/Water.js +60 -0
  374. data/app/assets/javascripts/Shaders/Materials/WoodMaterial.glsl +36 -0
  375. data/app/assets/javascripts/Shaders/Materials/WoodMaterial.js +31 -0
  376. data/app/assets/javascripts/Shaders/Noise.glsl +453 -0
  377. data/app/assets/javascripts/Shaders/Noise.js +242 -0
  378. data/app/assets/javascripts/Shaders/PolygonFS.glsl +27 -0
  379. data/app/assets/javascripts/Shaders/PolygonFS.js +23 -0
  380. data/app/assets/javascripts/Shaders/PolygonFSPick.glsl +6 -0
  381. data/app/assets/javascripts/Shaders/PolygonFSPick.js +11 -0
  382. data/app/assets/javascripts/Shaders/PolygonVS.glsl +38 -0
  383. data/app/assets/javascripts/Shaders/PolygonVS.js +39 -0
  384. data/app/assets/javascripts/Shaders/PolygonVSPick.glsl +30 -0
  385. data/app/assets/javascripts/Shaders/PolygonVSPick.js +32 -0
  386. data/app/assets/javascripts/Shaders/PolylineFS.glsl +6 -0
  387. data/app/assets/javascripts/Shaders/PolylineFS.js +11 -0
  388. data/app/assets/javascripts/Shaders/PolylineVS.glsl +34 -0
  389. data/app/assets/javascripts/Shaders/PolylineVS.js +35 -0
  390. data/app/assets/javascripts/Shaders/Ray.glsl +532 -0
  391. data/app/assets/javascripts/Shaders/Ray.js +357 -0
  392. data/app/assets/javascripts/Shaders/ReprojectWebMercatorFS.glsl +26 -0
  393. data/app/assets/javascripts/Shaders/ReprojectWebMercatorFS.js +22 -0
  394. data/app/assets/javascripts/Shaders/ReprojectWebMercatorVS.glsl +11 -0
  395. data/app/assets/javascripts/Shaders/ReprojectWebMercatorVS.js +14 -0
  396. data/app/assets/javascripts/Shaders/SensorVolume.glsl +43 -0
  397. data/app/assets/javascripts/Shaders/SensorVolume.js +31 -0
  398. data/app/assets/javascripts/Shaders/Shaders.profile.js +8 -0
  399. data/app/assets/javascripts/Shaders/SkyAtmosphereFS.glsl +70 -0
  400. data/app/assets/javascripts/Shaders/SkyAtmosphereFS.js +62 -0
  401. data/app/assets/javascripts/Shaders/SkyAtmosphereVS.glsl +131 -0
  402. data/app/assets/javascripts/Shaders/SkyAtmosphereVS.js +115 -0
  403. data/app/assets/javascripts/Shaders/SkyBoxFS.glsl +10 -0
  404. data/app/assets/javascripts/Shaders/SkyBoxFS.js +14 -0
  405. data/app/assets/javascripts/Shaders/SkyBoxVS.glsl +10 -0
  406. data/app/assets/javascripts/Shaders/SkyBoxVS.js +14 -0
  407. data/app/assets/javascripts/Shaders/ViewportQuadFS.glsl +16 -0
  408. data/app/assets/javascripts/Shaders/ViewportQuadFS.js +17 -0
  409. data/app/assets/javascripts/Shaders/ViewportQuadVS.glsl +10 -0
  410. data/app/assets/javascripts/Shaders/ViewportQuadVS.js +14 -0
  411. data/app/assets/javascripts/Shaders/package.json +6 -0
  412. data/app/assets/javascripts/ThirdParty/ThirdParty.profile.js +8 -0
  413. data/app/assets/javascripts/ThirdParty/Tween.js +678 -0
  414. data/app/assets/javascripts/ThirdParty/Uri.js +277 -0
  415. data/app/assets/javascripts/ThirdParty/measureText.js +197 -0
  416. data/app/assets/javascripts/ThirdParty/package.json +6 -0
  417. data/app/assets/javascripts/ThirdParty/sprintf.js +319 -0
  418. data/app/assets/javascripts/ThirdParty/when.js +748 -0
  419. data/app/assets/javascripts/Widgets/Dojo/CesiumViewerWidget.css +175 -0
  420. data/app/assets/javascripts/Widgets/Dojo/CesiumViewerWidget.html +52 -0
  421. data/app/assets/javascripts/Widgets/Dojo/CesiumViewerWidget.js +1237 -0
  422. data/app/assets/javascripts/Widgets/Dojo/CesiumWidget.html +4 -0
  423. data/app/assets/javascripts/Widgets/Dojo/CesiumWidget.js +349 -0
  424. data/app/assets/javascripts/Widgets/Dojo/TimelineWidget.css +1 -0
  425. data/app/assets/javascripts/Widgets/Dojo/TimelineWidget.js +47 -0
  426. data/app/assets/javascripts/Widgets/Dojo/checkForChromeFrame.js +71 -0
  427. data/app/assets/javascripts/Widgets/Images/Bing_Logo_51x19_White.png +0 -0
  428. data/app/assets/javascripts/Widgets/Images/Cesium_Logo_overlay.png +0 -0
  429. data/app/assets/javascripts/Widgets/Images/TimelineIcons.png +0 -0
  430. data/app/assets/javascripts/Widgets/Images/ajax-loader.gif +0 -0
  431. data/app/assets/javascripts/Widgets/Images/animationBar.png +0 -0
  432. data/app/assets/javascripts/Widgets/Images/viewControlBar.png +0 -0
  433. data/app/assets/javascripts/Widgets/Timeline.css +113 -0
  434. data/app/assets/javascripts/Widgets/Timeline.js +629 -0
  435. data/app/assets/javascripts/Widgets/TimelineHighlightRange.js +51 -0
  436. data/app/assets/javascripts/Widgets/TimelineTrack.js +54 -0
  437. data/app/assets/javascripts/Widgets/Widgets.profile.js +8 -0
  438. data/app/assets/javascripts/Widgets/package.json +6 -0
  439. data/app/assets/javascripts/Workers/Workers.profile.js +8 -0
  440. data/app/assets/javascripts/Workers/cesiumWorkerBootstrapper.js +2015 -0
  441. data/app/assets/javascripts/Workers/createTaskProcessorWorker.js +55 -0
  442. data/app/assets/javascripts/Workers/createVerticesFromExtent.js +24 -0
  443. data/app/assets/javascripts/Workers/package.json +6 -0
  444. data/app/assets/javascripts/copyrightHeader.js +22 -0
  445. data/app/assets/javascripts/main.js +10 -0
  446. data/app/assets/stylesheets/cesium.css +4 -0
  447. data/app/controllers/cesium_controller.rb +4 -0
  448. data/app/helpers/cesium_helper.rb +2 -0
  449. data/app/views/cesium/index.html.erb +3 -0
  450. data/config/routes.rb +3 -0
  451. data/lib/cesium.rb +4 -0
  452. data/lib/cesium/engine.rb +4 -0
  453. data/lib/cesium/version.rb +3 -0
  454. data/lib/tasks/cesium_tasks.rake +4 -0
  455. data/test/cesium_test.rb +7 -0
  456. data/test/dummy/README.rdoc +261 -0
  457. data/test/dummy/Rakefile +7 -0
  458. data/test/dummy/app/assets/javascripts/adapters/jquery-adapter.js.coffee +4 -0
  459. data/test/dummy/app/assets/javascripts/app.js.coffee +11 -0
  460. data/test/dummy/app/assets/javascripts/application.js.coffee +73 -0
  461. data/test/dummy/app/assets/stylesheets/application.css +12 -0
  462. data/test/dummy/app/controllers/application_controller.rb +4 -0
  463. data/test/dummy/app/helpers/application_helper.rb +2 -0
  464. data/test/dummy/app/views/layouts/application.html.erb +21 -0
  465. data/test/dummy/config.ru +4 -0
  466. data/test/dummy/config/application.rb +59 -0
  467. data/test/dummy/config/boot.rb +10 -0
  468. data/test/dummy/config/database.yml +25 -0
  469. data/test/dummy/config/environment.rb +5 -0
  470. data/test/dummy/config/environments/development.rb +37 -0
  471. data/test/dummy/config/environments/production.rb +67 -0
  472. data/test/dummy/config/environments/test.rb +37 -0
  473. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  474. data/test/dummy/config/initializers/inflections.rb +15 -0
  475. data/test/dummy/config/initializers/mime_types.rb +5 -0
  476. data/test/dummy/config/initializers/secret_token.rb +7 -0
  477. data/test/dummy/config/initializers/session_store.rb +8 -0
  478. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  479. data/test/dummy/config/locales/en.yml +5 -0
  480. data/test/dummy/config/requirejs.yml +10 -0
  481. data/test/dummy/config/routes.rb +3 -0
  482. data/test/dummy/public/404.html +26 -0
  483. data/test/dummy/public/422.html +26 -0
  484. data/test/dummy/public/500.html +25 -0
  485. data/test/dummy/public/favicon.ico +0 -0
  486. data/test/dummy/script/rails +6 -0
  487. data/test/functional/cesium_controller_test.rb +9 -0
  488. data/test/integration/navigation_test.rb +10 -0
  489. data/test/test_helper.rb +15 -0
  490. data/test/unit/helpers/cesium_helper_test.rb +4 -0
  491. metadata +641 -0
@@ -0,0 +1,819 @@
1
+ /*global define*/
2
+ define([
3
+ './defaultValue',
4
+ './DeveloperError',
5
+ './Cartesian2',
6
+ './Cartesian3',
7
+ './Cartesian4',
8
+ './Cartographic',
9
+ './Ellipsoid',
10
+ './GeographicProjection',
11
+ './Extent',
12
+ './Intersect',
13
+ './Interval',
14
+ './Matrix4'
15
+ ], function(
16
+ defaultValue,
17
+ DeveloperError,
18
+ Cartesian2,
19
+ Cartesian3,
20
+ Cartesian4,
21
+ Cartographic,
22
+ Ellipsoid,
23
+ GeographicProjection,
24
+ Extent,
25
+ Intersect,
26
+ Interval,
27
+ Matrix4) {
28
+ "use strict";
29
+
30
+ /**
31
+ * A bounding sphere with a center and a radius.
32
+ * @alias BoundingSphere
33
+ * @constructor
34
+ *
35
+ * @param {Cartesian3} [center=Cartesian3.ZERO] The center of the bounding sphere.
36
+ * @param {Number} [radius=0.0] The radius of the bounding sphere.
37
+ *
38
+ * @see AxisAlignedBoundingBox
39
+ * @see BoundingRectangle
40
+ */
41
+ var BoundingSphere = function(center, radius) {
42
+ /**
43
+ * The center point of the sphere.
44
+ * @type {Cartesian3}
45
+ */
46
+ this.center = (typeof center !== 'undefined') ? Cartesian3.clone(center) : Cartesian3.ZERO.clone();
47
+ /**
48
+ * The radius of the sphere.
49
+ * @type {Number}
50
+ */
51
+ this.radius = defaultValue(radius, 0.0);
52
+ };
53
+
54
+ var fromPointsXMin = new Cartesian3();
55
+ var fromPointsYMin = new Cartesian3();
56
+ var fromPointsZMin = new Cartesian3();
57
+ var fromPointsXMax = new Cartesian3();
58
+ var fromPointsYMax = new Cartesian3();
59
+ var fromPointsZMax = new Cartesian3();
60
+ var fromPointsCurrentPos = new Cartesian3();
61
+ var fromPointsScratch = new Cartesian3();
62
+ var fromPointsRitterCenter = new Cartesian3();
63
+ var fromPointsMinBoxPt = new Cartesian3();
64
+ var fromPointsMaxBoxPt = new Cartesian3();
65
+
66
+ /**
67
+ * Computes a tight-fitting bounding sphere enclosing a list of 3D Cartesian points.
68
+ * The bounding sphere is computed by running two algorithms, a naive algorithm and
69
+ * Ritter's algorithm. The smaller of the two spheres is used to ensure a tight fit.
70
+ * @memberof BoundingSphere
71
+ *
72
+ * @param {Array} positions An array of points that the bounding sphere will enclose. Each point must have <code>x</code>, <code>y</code>, and <code>z</code> properties.
73
+ * @param {BoundingSphere} [result] The object onto which to store the result.
74
+ * @return {BoundingSphere} The modified result parameter or a new BoundingSphere instance if one was not provided.
75
+ *
76
+ * @see <a href='http://blogs.agi.com/insight3d/index.php/2008/02/04/a-bounding/'>Bounding Sphere computation article</a>
77
+ */
78
+ BoundingSphere.fromPoints = function(positions, result) {
79
+ if (typeof result === 'undefined') {
80
+ result = new BoundingSphere();
81
+ }
82
+
83
+ if (typeof positions === 'undefined' || positions.length === 0) {
84
+ result.center = Cartesian3.ZERO.clone(result.center);
85
+ result.radius = 0.0;
86
+ return result;
87
+ }
88
+
89
+ var currentPos = Cartesian3.clone(positions[0], fromPointsCurrentPos);
90
+
91
+ var xMin = Cartesian3.clone(currentPos, fromPointsXMin);
92
+ var yMin = Cartesian3.clone(currentPos, fromPointsYMin);
93
+ var zMin = Cartesian3.clone(currentPos, fromPointsZMin);
94
+
95
+ var xMax = Cartesian3.clone(currentPos, fromPointsXMax);
96
+ var yMax = Cartesian3.clone(currentPos, fromPointsYMax);
97
+ var zMax = Cartesian3.clone(currentPos, fromPointsZMax);
98
+
99
+ var numPositions = positions.length;
100
+ for ( var i = 1; i < numPositions; i++) {
101
+ Cartesian3.clone(positions[i], currentPos);
102
+
103
+ var x = currentPos.x;
104
+ var y = currentPos.y;
105
+ var z = currentPos.z;
106
+
107
+ // Store points containing the the smallest and largest components
108
+ if (x < xMin.x) {
109
+ Cartesian3.clone(currentPos, xMin);
110
+ }
111
+
112
+ if (x > xMax.x) {
113
+ Cartesian3.clone(currentPos, xMax);
114
+ }
115
+
116
+ if (y < yMin.y) {
117
+ Cartesian3.clone(currentPos, yMin);
118
+ }
119
+
120
+ if (y > yMax.y) {
121
+ Cartesian3.clone(currentPos, yMax);
122
+ }
123
+
124
+ if (z < zMin.z) {
125
+ Cartesian3.clone(currentPos, zMin);
126
+ }
127
+
128
+ if (z > zMax.z) {
129
+ Cartesian3.clone(currentPos, zMax);
130
+ }
131
+ }
132
+
133
+ // Compute x-, y-, and z-spans (Squared distances b/n each component's min. and max.).
134
+ var xSpan = Cartesian3.magnitudeSquared(Cartesian3.subtract(xMax, xMin, fromPointsScratch));
135
+ var ySpan = Cartesian3.magnitudeSquared(Cartesian3.subtract(yMax, yMin, fromPointsScratch));
136
+ var zSpan = Cartesian3.magnitudeSquared(Cartesian3.subtract(zMax, zMin, fromPointsScratch));
137
+
138
+ // Set the diameter endpoints to the largest span.
139
+ var diameter1 = xMin;
140
+ var diameter2 = xMax;
141
+ var maxSpan = xSpan;
142
+ if (ySpan > maxSpan) {
143
+ maxSpan = ySpan;
144
+ diameter1 = yMin;
145
+ diameter2 = yMax;
146
+ }
147
+ if (zSpan > maxSpan) {
148
+ maxSpan = zSpan;
149
+ diameter1 = zMin;
150
+ diameter2 = zMax;
151
+ }
152
+
153
+ // Calculate the center of the initial sphere found by Ritter's algorithm
154
+ var ritterCenter = fromPointsRitterCenter;
155
+ ritterCenter.x = (diameter1.x + diameter2.x) * 0.5;
156
+ ritterCenter.y = (diameter1.y + diameter2.y) * 0.5;
157
+ ritterCenter.z = (diameter1.z + diameter2.z) * 0.5;
158
+
159
+ // Calculate the radius of the initial sphere found by Ritter's algorithm
160
+ var radiusSquared = Cartesian3.magnitudeSquared(Cartesian3.subtract(diameter2, ritterCenter, fromPointsScratch));
161
+ var ritterRadius = Math.sqrt(radiusSquared);
162
+
163
+ // Find the center of the sphere found using the Naive method.
164
+ var minBoxPt = fromPointsMinBoxPt;
165
+ minBoxPt.x = xMin.x;
166
+ minBoxPt.y = yMin.y;
167
+ minBoxPt.z = zMin.z;
168
+
169
+ var maxBoxPt = fromPointsMaxBoxPt;
170
+ maxBoxPt.x = xMax.x;
171
+ maxBoxPt.y = yMax.y;
172
+ maxBoxPt.z = zMax.z;
173
+
174
+ var naiveCenter = Cartesian3.multiplyByScalar(Cartesian3.add(minBoxPt, maxBoxPt, fromPointsScratch), 0.5);
175
+
176
+ // Begin 2nd pass to find naive radius and modify the ritter sphere.
177
+ var naiveRadius = 0;
178
+ for (i = 0; i < numPositions; i++) {
179
+ Cartesian3.clone(positions[i], currentPos);
180
+
181
+ // Find the furthest point from the naive center to calculate the naive radius.
182
+ var r = Cartesian3.magnitude(Cartesian3.subtract(currentPos, naiveCenter, fromPointsScratch));
183
+ if (r > naiveRadius) {
184
+ naiveRadius = r;
185
+ }
186
+
187
+ // Make adjustments to the Ritter Sphere to include all points.
188
+ var oldCenterToPointSquared = Cartesian3.magnitudeSquared(Cartesian3.subtract(currentPos, ritterCenter, fromPointsScratch));
189
+ if (oldCenterToPointSquared > radiusSquared) {
190
+ var oldCenterToPoint = Math.sqrt(oldCenterToPointSquared);
191
+ // Calculate new radius to include the point that lies outside
192
+ ritterRadius = (ritterRadius + oldCenterToPoint) * 0.5;
193
+ radiusSquared = ritterRadius * ritterRadius;
194
+ // Calculate center of new Ritter sphere
195
+ var oldToNew = oldCenterToPoint - ritterRadius;
196
+ ritterCenter.x = (ritterRadius * ritterCenter.x + oldToNew * currentPos.x) / oldCenterToPoint;
197
+ ritterCenter.y = (ritterRadius * ritterCenter.y + oldToNew * currentPos.y) / oldCenterToPoint;
198
+ ritterCenter.z = (ritterRadius * ritterCenter.z + oldToNew * currentPos.z) / oldCenterToPoint;
199
+ }
200
+ }
201
+
202
+ if (ritterRadius < naiveRadius) {
203
+ Cartesian3.clone(ritterCenter, result.center);
204
+ result.radius = ritterRadius;
205
+ } else {
206
+ Cartesian3.clone(naiveCenter, result.center);
207
+ result.radius = naiveRadius;
208
+ }
209
+
210
+ return result;
211
+ };
212
+
213
+ var defaultProjection = new GeographicProjection();
214
+ var fromExtent2DLowerLeft = new Cartesian3(0.0, 0.0, 0.0);
215
+ var fromExtent2DUpperRight = new Cartesian3(0.0, 0.0, 0.0);
216
+ var fromExtent2DSouthwest = new Cartographic(0.0, 0.0, 0.0);
217
+ var fromExtent2DNortheast = new Cartographic(0.0, 0.0, 0.0);
218
+
219
+ /**
220
+ * Computes a bounding sphere from an extent projected in 2D.
221
+ *
222
+ * @memberof BoundingSphere
223
+ *
224
+ * @param {Extent} extent The extent around which to create a bounding sphere.
225
+ * @param {Object} [projection=GeographicProjection] The projection used to project the extent into 2D.
226
+ * @param {BoundingSphere} [result] The object onto which to store the result.
227
+ * @return {BoundingSphere} The modified result parameter or a new BoundingSphere instance if none was provided.
228
+ */
229
+ BoundingSphere.fromExtent2D = function(extent, projection, result) {
230
+ return BoundingSphere.fromExtentWithHeights2D(extent, projection, 0.0, 0.0, result);
231
+ };
232
+
233
+ /**
234
+ * Computes a bounding sphere from an extent projected in 2D. The bounding sphere accounts for the
235
+ * object's minimum and maximum heights over the extent.
236
+ *
237
+ * @memberof BoundingSphere
238
+ *
239
+ * @param {Extent} extent The extent around which to create a bounding sphere.
240
+ * @param {Object} [projection=GeographicProjection] The projection used to project the extent into 2D.
241
+ * @param {Number} [minimumHeight=0.0] The minimum height over the extent.
242
+ * @param {Number} [maximumHeight=0.0] The maximum height over the extent.
243
+ * @param {BoundingSphere} [result] The object onto which to store the result.
244
+ * @return {BoundingSphere} The modified result parameter or a new BoundingSphere instance if none was provided.
245
+ */
246
+ BoundingSphere.fromExtentWithHeights2D = function(extent, projection, minimumHeight, maximumHeight, result) {
247
+ if (typeof result === 'undefined') {
248
+ result = new BoundingSphere();
249
+ }
250
+
251
+ if (typeof extent === 'undefined') {
252
+ result.center = Cartesian3.ZERO.clone(result.center);
253
+ result.radius = 0.0;
254
+ return result;
255
+ }
256
+
257
+ projection = (typeof projection !== 'undefined') ? projection : defaultProjection;
258
+
259
+ extent.getSouthwest(fromExtent2DSouthwest);
260
+ fromExtent2DSouthwest.height = minimumHeight;
261
+ extent.getNortheast(fromExtent2DNortheast);
262
+ fromExtent2DNortheast.height = maximumHeight;
263
+
264
+ var lowerLeft = projection.project(fromExtent2DSouthwest, fromExtent2DLowerLeft);
265
+ var upperRight = projection.project(fromExtent2DNortheast, fromExtent2DUpperRight);
266
+
267
+ var width = upperRight.x - lowerLeft.x;
268
+ var height = upperRight.y - lowerLeft.y;
269
+ var elevation = upperRight.z - lowerLeft.z;
270
+
271
+ result.radius = Math.sqrt(width * width + height * height + elevation * elevation) * 0.5;
272
+ var center = result.center;
273
+ center.x = lowerLeft.x + width * 0.5;
274
+ center.y = lowerLeft.y + height * 0.5;
275
+ center.z = lowerLeft.z + elevation * 0.5;
276
+ return result;
277
+ };
278
+
279
+ var fromExtent3DScratch = [];
280
+
281
+ /**
282
+ * Computes a bounding sphere from an extent in 3D. The bounding sphere is created using a subsample of points
283
+ * on the ellipsoid and contained in the extent. It may not be accurate for all extents on all types of ellipsoids.
284
+ * @memberof BoundingSphere
285
+ *
286
+ * @param {Extent} extent The valid extent used to create a bounding sphere.
287
+ * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid used to determine positions of the extent.
288
+ * @param {BoundingSphere} [result] The object onto which to store the result.
289
+ * @return {BoundingSphere} The modified result parameter or a new BoundingSphere instance if none was provided.
290
+ */
291
+ BoundingSphere.fromExtent3D = function(extent, ellipsoid, result) {
292
+ ellipsoid = defaultValue(ellipsoid, Ellipsoid.WGS84);
293
+ var positions = typeof extent !== 'undefined' ? extent.subsample(ellipsoid, fromExtent3DScratch) : undefined;
294
+ return BoundingSphere.fromPoints(positions, result);
295
+ };
296
+
297
+ /**
298
+ * Computes a tight-fitting bounding sphere enclosing a list of 3D points, where the points are
299
+ * stored in a flat array in X, Y, Z, order. The bounding sphere is computed by running two
300
+ * algorithms, a naive algorithm and Ritter's algorithm. The smaller of the two spheres is used to
301
+ * ensure a tight fit.
302
+ *
303
+ * @memberof BoundingSphere
304
+ *
305
+ * @param {Array} positions An array of points that the bounding sphere will enclose. Each point
306
+ * is formed from three elements in the array in the order X, Y, Z.
307
+ * @param {Cartesian3} [center=Cartesian3.ZERO] The position to which the positions are relative, which need not be the
308
+ * origin of the coordinate system. This is useful when the positions are to be used for
309
+ * relative-to-center (RTC) rendering.
310
+ * @param {Number} [stride=3] The number of array elements per vertex. It must be at least 3, but it may
311
+ * be higher. Regardless of the value of this parameter, the X coordinate of the first position
312
+ * is at array index 0, the Y coordinate is at array index 1, and the Z coordinate is at array index
313
+ * 2. When stride is 3, the X coordinate of the next position then begins at array index 3. If
314
+ * the stride is 5, however, two array elements are skipped and the next position begins at array
315
+ * index 5.
316
+ * @param {BoundingSphere} [result] The object onto which to store the result.
317
+ * @return {BoundingSphere} The modified result parameter or a new BoundingSphere instance if one was not provided.
318
+ *
319
+ * @see <a href='http://blogs.agi.com/insight3d/index.php/2008/02/04/a-bounding/'>Bounding Sphere computation article</a>
320
+ *
321
+ * @example
322
+ * // Compute the bounding sphere from 3 positions, each specified relative to a center.
323
+ * // In addition to the X, Y, and Z coordinates, the points array contains two additional
324
+ * // elements per point which are ignored for the purpose of computing the bounding sphere.
325
+ * var center = new Cartesian3(1.0, 2.0, 3.0);
326
+ * var points = [1.0, 2.0, 3.0, 0.1, 0.2,
327
+ * 4.0, 5.0, 6.0, 0.1, 0.2,
328
+ * 7.0, 8.0, 9.0, 0.1, 0.2];
329
+ * var sphere = BoundingSphere.fromVertices(points, center, 5);
330
+ */
331
+ BoundingSphere.fromVertices = function(positions, center, stride, result) {
332
+ if (typeof result === 'undefined') {
333
+ result = new BoundingSphere();
334
+ }
335
+
336
+ if (typeof positions === 'undefined' || positions.length === 0) {
337
+ result.center = Cartesian3.ZERO.clone(result.center);
338
+ result.radius = 0.0;
339
+ return result;
340
+ }
341
+
342
+ if (typeof center === 'undefined') {
343
+ center = Cartesian3.ZERO;
344
+ }
345
+
346
+ if (typeof stride === 'undefined') {
347
+ stride = 3;
348
+ }
349
+
350
+ if (stride < 3) {
351
+ throw new DeveloperError('stride must be 3 or greater.');
352
+ }
353
+
354
+ var currentPos = fromPointsCurrentPos;
355
+ currentPos.x = positions[0] + center.x;
356
+ currentPos.y = positions[1] + center.y;
357
+ currentPos.z = positions[2] + center.z;
358
+
359
+ var xMin = Cartesian3.clone(currentPos, fromPointsXMin);
360
+ var yMin = Cartesian3.clone(currentPos, fromPointsYMin);
361
+ var zMin = Cartesian3.clone(currentPos, fromPointsZMin);
362
+
363
+ var xMax = Cartesian3.clone(currentPos, fromPointsXMax);
364
+ var yMax = Cartesian3.clone(currentPos, fromPointsYMax);
365
+ var zMax = Cartesian3.clone(currentPos, fromPointsZMax);
366
+
367
+ var numElements = positions.length;
368
+ for (var i = 0; i < numElements; i += stride) {
369
+ var x = positions[i] + center.x;
370
+ var y = positions[i + 1] + center.y;
371
+ var z = positions[i + 2] + center.z;
372
+
373
+ currentPos.x = x;
374
+ currentPos.y = y;
375
+ currentPos.z = z;
376
+
377
+ // Store points containing the the smallest and largest components
378
+ if (x < xMin.x) {
379
+ Cartesian3.clone(currentPos, xMin);
380
+ }
381
+
382
+ if (x > xMax.x) {
383
+ Cartesian3.clone(currentPos, xMax);
384
+ }
385
+
386
+ if (y < yMin.y) {
387
+ Cartesian3.clone(currentPos, yMin);
388
+ }
389
+
390
+ if (y > yMax.y) {
391
+ Cartesian3.clone(currentPos, yMax);
392
+ }
393
+
394
+ if (z < zMin.z) {
395
+ Cartesian3.clone(currentPos, zMin);
396
+ }
397
+
398
+ if (z > zMax.z) {
399
+ Cartesian3.clone(currentPos, zMax);
400
+ }
401
+ }
402
+
403
+ // Compute x-, y-, and z-spans (Squared distances b/n each component's min. and max.).
404
+ var xSpan = Cartesian3.magnitudeSquared(Cartesian3.subtract(xMax, xMin, fromPointsScratch));
405
+ var ySpan = Cartesian3.magnitudeSquared(Cartesian3.subtract(yMax, yMin, fromPointsScratch));
406
+ var zSpan = Cartesian3.magnitudeSquared(Cartesian3.subtract(zMax, zMin, fromPointsScratch));
407
+
408
+ // Set the diameter endpoints to the largest span.
409
+ var diameter1 = xMin;
410
+ var diameter2 = xMax;
411
+ var maxSpan = xSpan;
412
+ if (ySpan > maxSpan) {
413
+ maxSpan = ySpan;
414
+ diameter1 = yMin;
415
+ diameter2 = yMax;
416
+ }
417
+ if (zSpan > maxSpan) {
418
+ maxSpan = zSpan;
419
+ diameter1 = zMin;
420
+ diameter2 = zMax;
421
+ }
422
+
423
+ // Calculate the center of the initial sphere found by Ritter's algorithm
424
+ var ritterCenter = fromPointsRitterCenter;
425
+ ritterCenter.x = (diameter1.x + diameter2.x) * 0.5;
426
+ ritterCenter.y = (diameter1.y + diameter2.y) * 0.5;
427
+ ritterCenter.z = (diameter1.z + diameter2.z) * 0.5;
428
+
429
+ // Calculate the radius of the initial sphere found by Ritter's algorithm
430
+ var radiusSquared = Cartesian3.magnitudeSquared(Cartesian3.subtract(diameter2, ritterCenter, fromPointsScratch));
431
+ var ritterRadius = Math.sqrt(radiusSquared);
432
+
433
+ // Find the center of the sphere found using the Naive method.
434
+ var minBoxPt = fromPointsMinBoxPt;
435
+ minBoxPt.x = xMin.x;
436
+ minBoxPt.y = yMin.y;
437
+ minBoxPt.z = zMin.z;
438
+
439
+ var maxBoxPt = fromPointsMaxBoxPt;
440
+ maxBoxPt.x = xMax.x;
441
+ maxBoxPt.y = yMax.y;
442
+ maxBoxPt.z = zMax.z;
443
+
444
+ var naiveCenter = Cartesian3.multiplyByScalar(Cartesian3.add(minBoxPt, maxBoxPt, fromPointsScratch), 0.5);
445
+
446
+ // Begin 2nd pass to find naive radius and modify the ritter sphere.
447
+ var naiveRadius = 0;
448
+ for (i = 0; i < numElements; i += stride) {
449
+ currentPos.x = positions[i] + center.x;
450
+ currentPos.y = positions[i + 1] + center.y;
451
+ currentPos.z = positions[i + 2] + center.z;
452
+
453
+ // Find the furthest point from the naive center to calculate the naive radius.
454
+ var r = Cartesian3.magnitude(Cartesian3.subtract(currentPos, naiveCenter, fromPointsScratch));
455
+ if (r > naiveRadius) {
456
+ naiveRadius = r;
457
+ }
458
+
459
+ // Make adjustments to the Ritter Sphere to include all points.
460
+ var oldCenterToPointSquared = Cartesian3.magnitudeSquared(Cartesian3.subtract(currentPos, ritterCenter, fromPointsScratch));
461
+ if (oldCenterToPointSquared > radiusSquared) {
462
+ var oldCenterToPoint = Math.sqrt(oldCenterToPointSquared);
463
+ // Calculate new radius to include the point that lies outside
464
+ ritterRadius = (ritterRadius + oldCenterToPoint) * 0.5;
465
+ radiusSquared = ritterRadius * ritterRadius;
466
+ // Calculate center of new Ritter sphere
467
+ var oldToNew = oldCenterToPoint - ritterRadius;
468
+ ritterCenter.x = (ritterRadius * ritterCenter.x + oldToNew * currentPos.x) / oldCenterToPoint;
469
+ ritterCenter.y = (ritterRadius * ritterCenter.y + oldToNew * currentPos.y) / oldCenterToPoint;
470
+ ritterCenter.z = (ritterRadius * ritterCenter.z + oldToNew * currentPos.z) / oldCenterToPoint;
471
+ }
472
+ }
473
+
474
+ if (ritterRadius < naiveRadius) {
475
+ Cartesian3.clone(ritterCenter, result.center);
476
+ result.radius = ritterRadius;
477
+ } else {
478
+ Cartesian3.clone(naiveCenter, result.center);
479
+ result.radius = naiveRadius;
480
+ }
481
+
482
+ return result;
483
+ };
484
+
485
+ /**
486
+ * Duplicates a BoundingSphere instance.
487
+ * @memberof BoundingSphere
488
+ *
489
+ * @param {BoundingSphere} sphere The bounding sphere to duplicate.
490
+ * @param {BoundingSphere} [result] The object onto which to store the result.
491
+ * @return {BoundingSphere} The modified result parameter or a new BoundingSphere instance if none was provided.
492
+ *
493
+ * @exception {DeveloperError} sphere is required.
494
+ */
495
+ BoundingSphere.clone = function(sphere, result) {
496
+ if (typeof sphere === 'undefined') {
497
+ throw new DeveloperError('sphere is required');
498
+ }
499
+
500
+ if (typeof result === 'undefined') {
501
+ return new BoundingSphere(sphere.center, sphere.radius);
502
+ }
503
+
504
+ result.center = Cartesian3.clone(sphere.center, result.center);
505
+ result.radius = sphere.radius;
506
+ return result;
507
+ };
508
+
509
+ var unionScratch = new Cartesian3();
510
+ var unionScratchCenter = new Cartesian3();
511
+ /**
512
+ * Computes a bounding sphere that contains both the left and right bounding spheres.
513
+ * @memberof BoundingSphere
514
+ *
515
+ * @param {BoundingSphere} left A sphere to enclose in a bounding sphere.
516
+ * @param {BoundingSphere} right A sphere to enclose in a bounding sphere.
517
+ * @param {BoundingSphere} [result] The object onto which to store the result.
518
+ * @return {BoundingSphere} The modified result parameter or a new BoundingSphere instance if none was provided.
519
+ *
520
+ * @exception {DeveloperError} left is required.
521
+ * @exception {DeveloperError} right is required.
522
+ */
523
+ BoundingSphere.union = function(left, right, result) {
524
+ if (typeof left === 'undefined') {
525
+ throw new DeveloperError('left is required.');
526
+ }
527
+
528
+ if (typeof right === 'undefined') {
529
+ throw new DeveloperError('right is required.');
530
+ }
531
+
532
+ if (typeof result === 'undefined') {
533
+ result = new BoundingSphere();
534
+ }
535
+
536
+ var leftCenter = left.center;
537
+ var rightCenter = right.center;
538
+
539
+ Cartesian3.add(leftCenter, rightCenter, unionScratchCenter);
540
+ var center = Cartesian3.multiplyByScalar(unionScratchCenter, 0.5, unionScratchCenter);
541
+
542
+ var radius1 = Cartesian3.subtract(leftCenter, center, unionScratch).magnitude() + left.radius;
543
+ var radius2 = Cartesian3.subtract(rightCenter, center, unionScratch).magnitude() + right.radius;
544
+
545
+ result.radius = Math.max(radius1, radius2);
546
+ Cartesian3.clone(center, result.center);
547
+
548
+ return result;
549
+ };
550
+
551
+ var expandScratch = new Cartesian3();
552
+ /**
553
+ * Computes a bounding sphere by enlarging the provided sphere to contain the provided point.
554
+ * @memberof BoundingSphere
555
+ *
556
+ * @param {BoundingSphere} sphere A sphere to expand.
557
+ * @param {Cartesian3} point A point to enclose in a bounding sphere.
558
+ * @param {BoundingSphere} [result] The object onto which to store the result.
559
+ * @return {BoundingSphere} The modified result parameter or a new BoundingSphere instance if none was provided.
560
+ *
561
+ * @exception {DeveloperError} sphere is required.
562
+ * @exception {DeveloperError} point is required.
563
+ */
564
+ BoundingSphere.expand = function(sphere, point, result) {
565
+ if (typeof sphere === 'undefined') {
566
+ throw new DeveloperError('sphere is required.');
567
+ }
568
+
569
+ if (typeof point === 'undefined') {
570
+ throw new DeveloperError('point is required.');
571
+ }
572
+
573
+ result = BoundingSphere.clone(sphere, result);
574
+
575
+ var radius = Cartesian3.subtract(point, result.center, expandScratch).magnitude();
576
+ if (radius > result.radius) {
577
+ result.radius = radius;
578
+ }
579
+
580
+ return result;
581
+ };
582
+
583
+ /**
584
+ * Determines which side of a plane a sphere is located.
585
+ * @memberof BoundingSphere
586
+ *
587
+ * @param {BoundingSphere} sphere The bounding sphere to test.
588
+ * @param {Cartesian4} plane The coefficients of the plane in the for ax + by + cz + d = 0
589
+ * where the coefficients a, b, c, and d are the components x, y, z,
590
+ * and w of the {Cartesian4}, respectively.
591
+ * @return {Intersect} {Intersect.INSIDE} if the entire sphere is on the side of the plane the normal
592
+ * is pointing, {Intersect.OUTSIDE} if the entire sphere is on the opposite side,
593
+ * and {Intersect.INTERSETING} if the sphere intersects the plane.
594
+ *
595
+ * @exception {DeveloperError} sphere is required.
596
+ * @exception {DeveloperError} plane is required.
597
+ */
598
+ BoundingSphere.intersect = function(sphere, plane) {
599
+ if (typeof sphere === 'undefined') {
600
+ throw new DeveloperError('sphere is required.');
601
+ }
602
+
603
+ if (typeof plane === 'undefined') {
604
+ throw new DeveloperError('plane is required.');
605
+ }
606
+
607
+ var center = sphere.center;
608
+ var radius = sphere.radius;
609
+ var distanceToPlane = Cartesian3.dot(plane, center) + plane.w;
610
+
611
+ if (distanceToPlane < -radius) {
612
+ // The center point is negative side of the plane normal
613
+ return Intersect.OUTSIDE;
614
+ } else if (distanceToPlane < radius) {
615
+ // The center point is positive side of the plane, but radius extends beyond it; partial overlap
616
+ return Intersect.INTERSECTING;
617
+ }
618
+ return Intersect.INSIDE;
619
+ };
620
+
621
+ var transformCart4 = Cartesian4.UNIT_W.clone();
622
+ /**
623
+ * Applies a 4x4 affine transformation matrix to a bounding sphere.
624
+ * @memberof BoundingSphere
625
+ *
626
+ * @param {BoundingSphere} sphere The bounding sphere to apply the transformation to.
627
+ * @param {Matrix4} transform The transformation matrix to apply to the bounding sphere.
628
+ * @param {BoundingSphere} [result] The object onto which to store the result.
629
+ * @return {BoundingSphere} The modified result parameter or a new BoundingSphere instance if none was provided.
630
+ *
631
+ * @exception {DeveloperError} sphere is required.
632
+ * @exception {DeveloperError} transform is required.
633
+ */
634
+ BoundingSphere.transform = function(sphere, transform, result) {
635
+ if (typeof sphere === 'undefined') {
636
+ throw new DeveloperError('sphere is required.');
637
+ }
638
+
639
+ if (typeof transform === 'undefined') {
640
+ throw new DeveloperError('transform is required.');
641
+ }
642
+
643
+ if (typeof result === 'undefined') {
644
+ result = new BoundingSphere();
645
+ }
646
+
647
+ Matrix4.multiplyByPoint(transform, sphere.center, transformCart4);
648
+
649
+ Cartesian3.clone(transformCart4, result.center);
650
+ result.radius = sphere.radius;
651
+ return result;
652
+ };
653
+
654
+ var scratchCartesian3 = new Cartesian3();
655
+ /**
656
+ * The distances calculated by the vector from the center of the bounding sphere to position projected onto direction
657
+ * plus/minus the radius of the bounding sphere.
658
+ * <br>
659
+ * If you imagine the infinite number of planes with normal direction, this computes the smallest distance to the
660
+ * closest and farthest planes from position that intersect the bounding sphere.
661
+ * @memberof BoundingSphere
662
+ *
663
+ * @param {BoundingSphere} sphere The bounding sphere to calculate the distance to.
664
+ * @param {Cartesian3} position The position to calculate the distance from.
665
+ * @param {Cartesian3} direction The direction from position.
666
+ * @param {Cartesian2} [result] A Cartesian2 to store the nearest and farthest distances.
667
+ * @return {Interval} The nearest and farthest distances on the bounding sphere from position in direction.
668
+ *
669
+ * @exception {DeveloperError} sphere is required.
670
+ * @exception {DeveloperError} position is required.
671
+ * @exception {DeveloperError} direction is required.
672
+ */
673
+ BoundingSphere.getPlaneDistances = function(sphere, position, direction, result) {
674
+ if (typeof sphere === 'undefined') {
675
+ throw new DeveloperError('sphere is required.');
676
+ }
677
+
678
+ if (typeof position === 'undefined') {
679
+ throw new DeveloperError('position is required.');
680
+ }
681
+
682
+ if (typeof direction === 'undefined') {
683
+ throw new DeveloperError('direction is required.');
684
+ }
685
+
686
+ if (typeof result === 'undefined') {
687
+ result = new Interval();
688
+ }
689
+
690
+ var toCenter = Cartesian3.subtract(sphere.center, position, scratchCartesian3);
691
+ var proj = Cartesian3.multiplyByScalar(direction, direction.dot(toCenter), scratchCartesian3);
692
+ var mag = proj.magnitude();
693
+
694
+ result.start = mag - sphere.radius;
695
+ result.stop = mag + sphere.radius;
696
+ return result;
697
+ };
698
+
699
+ /**
700
+ * Compares the provided BoundingSphere componentwise and returns
701
+ * <code>true</code> if they are equal, <code>false</code> otherwise.
702
+ * @memberof BoundingSphere
703
+ *
704
+ * @param {BoundingSphere} [left] The first BoundingSphere.
705
+ * @param {BoundingSphere} [right] The second BoundingSphere.
706
+ * @return {Boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.
707
+ */
708
+ BoundingSphere.equals = function(left, right) {
709
+ return (left === right) ||
710
+ ((typeof left !== 'undefined') &&
711
+ (typeof right !== 'undefined') &&
712
+ Cartesian3.equals(left.center, right.center) &&
713
+ left.radius === right.radius);
714
+ };
715
+
716
+ /**
717
+ * Duplicates this BoundingSphere instance.
718
+ * @memberof BoundingSphere
719
+ *
720
+ * @param {BoundingSphere} [result] The object onto which to store the result.
721
+ * @return {BoundingSphere} The modified result parameter or a new BoundingSphere instance if none was provided.
722
+ */
723
+ BoundingSphere.prototype.clone = function(result) {
724
+ return BoundingSphere.clone(this, result);
725
+ };
726
+
727
+ /**
728
+ * Computes a bounding sphere that contains both this bounding sphere and the argument sphere.
729
+ * @memberof BoundingSphere
730
+ *
731
+ * @param {BoundingSphere} right The sphere to enclose in this bounding sphere.
732
+ * @param {BoundingSphere} [result] The object onto which to store the result.
733
+ * @return {BoundingSphere} The modified result parameter or a new BoundingSphere instance if none was provided.
734
+ *
735
+ * @exception {DeveloperError} sphere is required.
736
+ */
737
+ BoundingSphere.prototype.union = function(right, result) {
738
+ return BoundingSphere.union(this, right, result);
739
+ };
740
+
741
+ /**
742
+ * Computes a bounding sphere that is sphere expanded to contain point.
743
+ * @memberof BoundingSphere
744
+ *
745
+ * @param {Cartesian3} point A point to enclose in a bounding sphere.
746
+ * @param {BoundingSphere} [result] The object onto which to store the result.
747
+ * @return {BoundingSphere} The modified result parameter or a new BoundingSphere instance if one was not provided.
748
+ *
749
+ * @exception {DeveloperError} point is required.
750
+ */
751
+ BoundingSphere.prototype.expand = function(point, result) {
752
+ return BoundingSphere.expand(this, point, result);
753
+ };
754
+
755
+ /**
756
+ * Determines which side of a plane the sphere is located.
757
+ * @memberof BoundingSphere
758
+ *
759
+ * @param {Cartesian4} plane The coefficients of the plane in the for ax + by + cz + d = 0
760
+ * where the coefficients a, b, c, and d are the components x, y, z,
761
+ * and w of the {Cartesian4}, respectively.
762
+ * @return {Intersect} {Intersect.INSIDE} if the entire sphere is on the side of the plane the normal
763
+ * is pointing, {Intersect.OUTSIDE} if the entire sphere is on the opposite side,
764
+ * and {Intersect.INTERSETING} if the sphere intersects the plane.
765
+ *
766
+ * @exception {DeveloperError} plane is required.
767
+ */
768
+ BoundingSphere.prototype.intersect = function(plane) {
769
+ return BoundingSphere.intersect(this, plane);
770
+ };
771
+
772
+ /**
773
+ * Applies a 4x4 affine transformation matrix to this bounding sphere.
774
+ * @memberof BoundingSphere
775
+ *
776
+ * @param {Matrix4} transform The transformation matrix to apply to the bounding sphere.
777
+ * @param {BoundingSphere} [result] The object onto which to store the result.
778
+ * @return {BoundingSphere} The modified result parameter or a new BoundingSphere instance if none was provided.
779
+ *
780
+ * @exception {DeveloperError} transform is required.
781
+ */
782
+ BoundingSphere.prototype.transform = function(transform, result) {
783
+ return BoundingSphere.transform(this, transform, result);
784
+ };
785
+
786
+ /**
787
+ * The distances calculated by the vector from the center of the bounding sphere to position projected onto direction
788
+ * plus/minus the radius of the bounding sphere.
789
+ * <br>
790
+ * If you imagine the infinite number of planes with normal direction, this computes the smallest distance to the
791
+ * closest and farthest planes from position that intersect the bounding sphere.
792
+ * @memberof BoundingSphere
793
+ *
794
+ * @param {Cartesian3} position The position to calculate the distance from.
795
+ * @param {Cartesian3} direction The direction from position.
796
+ * @param {Cartesian2} [result] A Cartesian2 to store the nearest and farthest distances.
797
+ * @return {Interval} The nearest and farthest distances on the bounding sphere from position in direction.
798
+ *
799
+ * @exception {DeveloperError} position is required.
800
+ * @exception {DeveloperError} direction is required.
801
+ */
802
+ BoundingSphere.prototype.getPlaneDistances = function(position, direction, result) {
803
+ return BoundingSphere.getPlaneDistances(this, position, direction, result);
804
+ };
805
+
806
+ /**
807
+ * Compares this BoundingSphere against the provided BoundingSphere componentwise and returns
808
+ * <code>true</code> if they are equal, <code>false</code> otherwise.
809
+ * @memberof BoundingSphere
810
+ *
811
+ * @param {BoundingSphere} [right] The right hand side BoundingSphere.
812
+ * @return {Boolean} <code>true</code> if they are equal, <code>false</code> otherwise.
813
+ */
814
+ BoundingSphere.prototype.equals = function(right) {
815
+ return BoundingSphere.equals(this, right);
816
+ };
817
+
818
+ return BoundingSphere;
819
+ });