cosineAndSine.js 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. //This file is automatically rebuilt by the Cesium build process.
  2. export default "/**\n\
  3. * @private\n\
  4. */\n\
  5. vec2 cordic(float angle)\n\
  6. {\n\
  7. // Scale the vector by the appropriate factor for the 24 iterations to follow.\n\
  8. vec2 vector = vec2(6.0725293500888267e-1, 0.0);\n\
  9. // Iteration 1\n\
  10. float sense = (angle < 0.0) ? -1.0 : 1.0;\n\
  11. // float factor = sense * 1.0; // 2^-0\n\
  12. mat2 rotation = mat2(1.0, sense, -sense, 1.0);\n\
  13. vector = rotation * vector;\n\
  14. angle -= sense * 7.8539816339744828e-1; // atan(2^-0)\n\
  15. // Iteration 2\n\
  16. sense = (angle < 0.0) ? -1.0 : 1.0;\n\
  17. float factor = sense * 5.0e-1; // 2^-1\n\
  18. rotation[0][1] = factor;\n\
  19. rotation[1][0] = -factor;\n\
  20. vector = rotation * vector;\n\
  21. angle -= sense * 4.6364760900080609e-1; // atan(2^-1)\n\
  22. // Iteration 3\n\
  23. sense = (angle < 0.0) ? -1.0 : 1.0;\n\
  24. factor = sense * 2.5e-1; // 2^-2\n\
  25. rotation[0][1] = factor;\n\
  26. rotation[1][0] = -factor;\n\
  27. vector = rotation * vector;\n\
  28. angle -= sense * 2.4497866312686414e-1; // atan(2^-2)\n\
  29. // Iteration 4\n\
  30. sense = (angle < 0.0) ? -1.0 : 1.0;\n\
  31. factor = sense * 1.25e-1; // 2^-3\n\
  32. rotation[0][1] = factor;\n\
  33. rotation[1][0] = -factor;\n\
  34. vector = rotation * vector;\n\
  35. angle -= sense * 1.2435499454676144e-1; // atan(2^-3)\n\
  36. // Iteration 5\n\
  37. sense = (angle < 0.0) ? -1.0 : 1.0;\n\
  38. factor = sense * 6.25e-2; // 2^-4\n\
  39. rotation[0][1] = factor;\n\
  40. rotation[1][0] = -factor;\n\
  41. vector = rotation * vector;\n\
  42. angle -= sense * 6.2418809995957350e-2; // atan(2^-4)\n\
  43. // Iteration 6\n\
  44. sense = (angle < 0.0) ? -1.0 : 1.0;\n\
  45. factor = sense * 3.125e-2; // 2^-5\n\
  46. rotation[0][1] = factor;\n\
  47. rotation[1][0] = -factor;\n\
  48. vector = rotation * vector;\n\
  49. angle -= sense * 3.1239833430268277e-2; // atan(2^-5)\n\
  50. // Iteration 7\n\
  51. sense = (angle < 0.0) ? -1.0 : 1.0;\n\
  52. factor = sense * 1.5625e-2; // 2^-6\n\
  53. rotation[0][1] = factor;\n\
  54. rotation[1][0] = -factor;\n\
  55. vector = rotation * vector;\n\
  56. angle -= sense * 1.5623728620476831e-2; // atan(2^-6)\n\
  57. // Iteration 8\n\
  58. sense = (angle < 0.0) ? -1.0 : 1.0;\n\
  59. factor = sense * 7.8125e-3; // 2^-7\n\
  60. rotation[0][1] = factor;\n\
  61. rotation[1][0] = -factor;\n\
  62. vector = rotation * vector;\n\
  63. angle -= sense * 7.8123410601011111e-3; // atan(2^-7)\n\
  64. // Iteration 9\n\
  65. sense = (angle < 0.0) ? -1.0 : 1.0;\n\
  66. factor = sense * 3.90625e-3; // 2^-8\n\
  67. rotation[0][1] = factor;\n\
  68. rotation[1][0] = -factor;\n\
  69. vector = rotation * vector;\n\
  70. angle -= sense * 3.9062301319669718e-3; // atan(2^-8)\n\
  71. // Iteration 10\n\
  72. sense = (angle < 0.0) ? -1.0 : 1.0;\n\
  73. factor = sense * 1.953125e-3; // 2^-9\n\
  74. rotation[0][1] = factor;\n\
  75. rotation[1][0] = -factor;\n\
  76. vector = rotation * vector;\n\
  77. angle -= sense * 1.9531225164788188e-3; // atan(2^-9)\n\
  78. // Iteration 11\n\
  79. sense = (angle < 0.0) ? -1.0 : 1.0;\n\
  80. factor = sense * 9.765625e-4; // 2^-10\n\
  81. rotation[0][1] = factor;\n\
  82. rotation[1][0] = -factor;\n\
  83. vector = rotation * vector;\n\
  84. angle -= sense * 9.7656218955931946e-4; // atan(2^-10)\n\
  85. // Iteration 12\n\
  86. sense = (angle < 0.0) ? -1.0 : 1.0;\n\
  87. factor = sense * 4.8828125e-4; // 2^-11\n\
  88. rotation[0][1] = factor;\n\
  89. rotation[1][0] = -factor;\n\
  90. vector = rotation * vector;\n\
  91. angle -= sense * 4.8828121119489829e-4; // atan(2^-11)\n\
  92. // Iteration 13\n\
  93. sense = (angle < 0.0) ? -1.0 : 1.0;\n\
  94. factor = sense * 2.44140625e-4; // 2^-12\n\
  95. rotation[0][1] = factor;\n\
  96. rotation[1][0] = -factor;\n\
  97. vector = rotation * vector;\n\
  98. angle -= sense * 2.4414062014936177e-4; // atan(2^-12)\n\
  99. // Iteration 14\n\
  100. sense = (angle < 0.0) ? -1.0 : 1.0;\n\
  101. factor = sense * 1.220703125e-4; // 2^-13\n\
  102. rotation[0][1] = factor;\n\
  103. rotation[1][0] = -factor;\n\
  104. vector = rotation * vector;\n\
  105. angle -= sense * 1.2207031189367021e-4; // atan(2^-13)\n\
  106. // Iteration 15\n\
  107. sense = (angle < 0.0) ? -1.0 : 1.0;\n\
  108. factor = sense * 6.103515625e-5; // 2^-14\n\
  109. rotation[0][1] = factor;\n\
  110. rotation[1][0] = -factor;\n\
  111. vector = rotation * vector;\n\
  112. angle -= sense * 6.1035156174208773e-5; // atan(2^-14)\n\
  113. // Iteration 16\n\
  114. sense = (angle < 0.0) ? -1.0 : 1.0;\n\
  115. factor = sense * 3.0517578125e-5; // 2^-15\n\
  116. rotation[0][1] = factor;\n\
  117. rotation[1][0] = -factor;\n\
  118. vector = rotation * vector;\n\
  119. angle -= sense * 3.0517578115526096e-5; // atan(2^-15)\n\
  120. // Iteration 17\n\
  121. sense = (angle < 0.0) ? -1.0 : 1.0;\n\
  122. factor = sense * 1.52587890625e-5; // 2^-16\n\
  123. rotation[0][1] = factor;\n\
  124. rotation[1][0] = -factor;\n\
  125. vector = rotation * vector;\n\
  126. angle -= sense * 1.5258789061315762e-5; // atan(2^-16)\n\
  127. // Iteration 18\n\
  128. sense = (angle < 0.0) ? -1.0 : 1.0;\n\
  129. factor = sense * 7.62939453125e-6; // 2^-17\n\
  130. rotation[0][1] = factor;\n\
  131. rotation[1][0] = -factor;\n\
  132. vector = rotation * vector;\n\
  133. angle -= sense * 7.6293945311019700e-6; // atan(2^-17)\n\
  134. // Iteration 19\n\
  135. sense = (angle < 0.0) ? -1.0 : 1.0;\n\
  136. factor = sense * 3.814697265625e-6; // 2^-18\n\
  137. rotation[0][1] = factor;\n\
  138. rotation[1][0] = -factor;\n\
  139. vector = rotation * vector;\n\
  140. angle -= sense * 3.8146972656064961e-6; // atan(2^-18)\n\
  141. // Iteration 20\n\
  142. sense = (angle < 0.0) ? -1.0 : 1.0;\n\
  143. factor = sense * 1.9073486328125e-6; // 2^-19\n\
  144. rotation[0][1] = factor;\n\
  145. rotation[1][0] = -factor;\n\
  146. vector = rotation * vector;\n\
  147. angle -= sense * 1.9073486328101870e-6; // atan(2^-19)\n\
  148. // Iteration 21\n\
  149. sense = (angle < 0.0) ? -1.0 : 1.0;\n\
  150. factor = sense * 9.5367431640625e-7; // 2^-20\n\
  151. rotation[0][1] = factor;\n\
  152. rotation[1][0] = -factor;\n\
  153. vector = rotation * vector;\n\
  154. angle -= sense * 9.5367431640596084e-7; // atan(2^-20)\n\
  155. // Iteration 22\n\
  156. sense = (angle < 0.0) ? -1.0 : 1.0;\n\
  157. factor = sense * 4.76837158203125e-7; // 2^-21\n\
  158. rotation[0][1] = factor;\n\
  159. rotation[1][0] = -factor;\n\
  160. vector = rotation * vector;\n\
  161. angle -= sense * 4.7683715820308884e-7; // atan(2^-21)\n\
  162. // Iteration 23\n\
  163. sense = (angle < 0.0) ? -1.0 : 1.0;\n\
  164. factor = sense * 2.384185791015625e-7; // 2^-22\n\
  165. rotation[0][1] = factor;\n\
  166. rotation[1][0] = -factor;\n\
  167. vector = rotation * vector;\n\
  168. angle -= sense * 2.3841857910155797e-7; // atan(2^-22)\n\
  169. // Iteration 24\n\
  170. sense = (angle < 0.0) ? -1.0 : 1.0;\n\
  171. factor = sense * 1.1920928955078125e-7; // 2^-23\n\
  172. rotation[0][1] = factor;\n\
  173. rotation[1][0] = -factor;\n\
  174. vector = rotation * vector;\n\
  175. // angle -= sense * 1.1920928955078068e-7; // atan(2^-23)\n\
  176. \n\
  177. return vector;\n\
  178. }\n\
  179. \n\
  180. /**\n\
  181. * Computes the cosine and sine of the provided angle using the CORDIC algorithm.\n\
  182. *\n\
  183. * @name czm_cosineAndSine\n\
  184. * @glslFunction\n\
  185. *\n\
  186. * @param {float} angle The angle in radians.\n\
  187. *\n\
  188. * @returns {vec2} The resulting cosine of the angle (as the x coordinate) and sine of the angle (as the y coordinate).\n\
  189. *\n\
  190. * @example\n\
  191. * vec2 v = czm_cosineAndSine(czm_piOverSix);\n\
  192. * float cosine = v.x;\n\
  193. * float sine = v.y;\n\
  194. */\n\
  195. vec2 czm_cosineAndSine(float angle)\n\
  196. {\n\
  197. if (angle < -czm_piOverTwo || angle > czm_piOverTwo)\n\
  198. {\n\
  199. if (angle < 0.0)\n\
  200. {\n\
  201. return -cordic(angle + czm_pi);\n\
  202. }\n\
  203. else\n\
  204. {\n\
  205. return -cordic(angle - czm_pi);\n\
  206. }\n\
  207. }\n\
  208. else\n\
  209. {\n\
  210. return cordic(angle);\n\
  211. }\n\
  212. }\n\
  213. ";