cesium 0.13.0

Sign up to get free protection for your applications and to get access to all the features.
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
+ });