j1-template 2022.4.7 → 2022.4.10

Sign up to get free protection for your applications and to get access to all the features.
Files changed (285) hide show
  1. checksums.yaml +4 -4
  2. data/_includes/themes/j1/blocks/footer/boxes/contacts_box.proc +3 -3
  3. data/_includes/themes/j1/blocks/footer/boxes/legal_statements.proc +7 -7
  4. data/_includes/themes/j1/blocks/footer/boxes/links_box.proc +1 -1
  5. data/_includes/themes/j1/blocks/footer/boxes/news_box.proc +1 -1
  6. data/_includes/themes/j1/modules/attics/generator.html +7 -7
  7. data/_includes/themes/j1/modules/navigator/generator.html +30 -30
  8. data/_includes/themes/j1/procedures/global/create_bs_button.proc +1 -1
  9. data/_includes/themes/j1/procedures/posts/collate_timeline.proc +1 -1
  10. data/assets/data/authclient.html +16 -14
  11. data/assets/data/banner.html +6 -2
  12. data/assets/data/carousel.json +10 -0
  13. data/assets/data/cookieconsent.html +3 -1
  14. data/assets/data/fab.html +27 -12
  15. data/assets/data/footer.html +10 -10
  16. data/assets/data/galleries.json +7 -0
  17. data/assets/data/gallery_customizer.html +13 -10
  18. data/assets/data/iso-639-language-codes-flags.json +9 -0
  19. data/assets/data/iso-639-language-codes.json +9 -0
  20. data/assets/data/j1_config.json +8 -2
  21. data/assets/data/masterslider.html +342 -0
  22. data/assets/data/mdi_icons.json +5 -0
  23. data/assets/data/mdil_icons.json +5 -0
  24. data/assets/data/menu.html +56 -53
  25. data/assets/data/mmenu.html +44 -40
  26. data/assets/data/mmenu_sidebar.html +15 -13
  27. data/assets/data/mmenu_toc.html +11 -8
  28. data/assets/data/nbinteract.html +3 -2
  29. data/assets/data/panel.html +16 -14
  30. data/assets/data/private.json +2 -2
  31. data/assets/data/quicklinks.html +11 -9
  32. data/assets/data/rtext_resizer.html +11 -7
  33. data/assets/data/themes.bootswatch.json +4 -0
  34. data/assets/data/themes.json +4 -0
  35. data/assets/data/translator.html +3 -1
  36. data/assets/data/twa_v1.json +6 -0
  37. data/assets/themes/j1/adapter/js/advertising.js +2 -0
  38. data/assets/themes/j1/adapter/js/algolia.js +3 -1
  39. data/assets/themes/j1/adapter/js/analytics.js +2 -0
  40. data/assets/themes/j1/adapter/js/asciidoctor.js +16 -0
  41. data/assets/themes/j1/adapter/js/attic.js +5 -4
  42. data/assets/themes/j1/adapter/js/bmd.js +16 -0
  43. data/assets/themes/j1/adapter/js/carousel.js +8 -7
  44. data/assets/themes/j1/adapter/js/clipboard.js +2 -1
  45. data/assets/themes/j1/adapter/js/comments.js +2 -0
  46. data/assets/themes/j1/adapter/js/cookieConsent.js +3 -1
  47. data/assets/themes/j1/adapter/js/customFunctions.js +3 -1
  48. data/assets/themes/j1/adapter/js/customModule.js +5 -3
  49. data/assets/themes/j1/adapter/js/dropdowns.js +3 -1
  50. data/assets/themes/j1/adapter/js/fab.js +3 -1
  51. data/assets/themes/j1/adapter/js/framer.js +3 -1
  52. data/assets/themes/j1/adapter/js/j1.js +25 -19
  53. data/assets/themes/j1/adapter/js/justifiedGallery.js +3 -1
  54. data/assets/themes/j1/adapter/js/justifiedGalleryCustomizer.js +2 -0
  55. data/assets/themes/j1/adapter/js/lightbox.js +3 -1
  56. data/assets/themes/j1/adapter/js/logger.js +2 -0
  57. data/assets/themes/j1/adapter/js/lunr.js +2 -0
  58. data/assets/themes/j1/adapter/js/masterslider.js +529 -0
  59. data/assets/themes/j1/adapter/js/mmenu.js +2 -0
  60. data/assets/themes/j1/adapter/js/navigator.js +716 -72
  61. data/assets/themes/j1/adapter/js/nbinteract.js +10 -8
  62. data/assets/themes/j1/adapter/js/rangeSlider.js +3 -1
  63. data/assets/themes/j1/adapter/js/rouge.js +7 -0
  64. data/assets/themes/j1/adapter/js/rtable.js +3 -1
  65. data/assets/themes/j1/adapter/js/rtextResizer.js +2 -1
  66. data/assets/themes/j1/adapter/js/scroller.js +2 -0
  67. data/assets/themes/j1/adapter/js/themer.js +26 -34
  68. data/assets/themes/j1/adapter/js/toccer.js +24 -78
  69. data/assets/themes/j1/adapter/js/translator.js +3 -1
  70. data/assets/themes/j1/core/css/animate.css +1282 -504
  71. data/assets/themes/j1/core/css/animate.min.css +1 -1
  72. data/assets/themes/j1/core/css/themes/bootstrap/bootstrap.css +1938 -1379
  73. data/assets/themes/j1/core/css/themes/bootstrap/bootstrap.min.css +3 -3
  74. data/assets/themes/j1/core/css/themes/theme_vapor/bootstrap.css +1939 -1380
  75. data/assets/themes/j1/core/css/themes/theme_vapor/bootstrap.min.css +3 -3
  76. data/assets/themes/j1/core/css/themes/unodark/bootstrap.css +2189 -1486
  77. data/assets/themes/j1/core/css/themes/unodark/bootstrap.min.css +3 -3
  78. data/assets/themes/j1/core/css/themes/unolight/bootstrap.css +2168 -1502
  79. data/assets/themes/j1/core/css/themes/unolight/bootstrap.min.css +10 -9
  80. data/assets/themes/j1/core/js/template.js +3 -3
  81. data/assets/themes/j1/core/js/template.min.js +1 -1
  82. data/assets/themes/j1/core/js/template.min.js.map +1 -1
  83. data/assets/themes/j1/modules/cookieConsent/js/cookieConsent.js +2 -2
  84. data/assets/themes/j1/modules/cookieConsent/js/cookieConsent.min.js +1 -1
  85. data/assets/themes/j1/modules/lightbox/js/lightbox.js +1 -1
  86. data/assets/themes/j1/modules/lightbox/js/lightbox.min.js +1 -1
  87. data/assets/themes/j1/modules/masterslider/css/blank.gif +0 -0
  88. data/assets/themes/j1/modules/masterslider/css/common/grab.cur +0 -0
  89. data/assets/themes/j1/modules/masterslider/css/common/grab.png +0 -0
  90. data/assets/themes/j1/modules/masterslider/css/common/grabbing.cur +0 -0
  91. data/assets/themes/j1/modules/masterslider/css/common/grabbing.png +0 -0
  92. data/assets/themes/j1/modules/masterslider/css/common/loading-1-dark.gif +0 -0
  93. data/assets/themes/j1/modules/masterslider/css/common/loading-1.gif +0 -0
  94. data/assets/themes/j1/modules/masterslider/css/common/loading-2-dark.gif +0 -0
  95. data/assets/themes/j1/modules/masterslider/css/common/loading-2-light.gif +0 -0
  96. data/assets/themes/j1/modules/masterslider/css/common/loading-2.gif +0 -0
  97. data/assets/themes/j1/modules/masterslider/css/common/video-close-btn.png +0 -0
  98. data/assets/themes/j1/modules/masterslider/css/masterslider.css +2637 -0
  99. data/assets/themes/j1/modules/masterslider/css/masterslider.min.css +2655 -0
  100. data/assets/themes/j1/modules/masterslider/css/skins/black-skin-1-retina.png +0 -0
  101. data/assets/themes/j1/modules/masterslider/css/skins/black-skin-1.png +0 -0
  102. data/assets/themes/j1/modules/masterslider/css/skins/black-skin-2-retina.png +0 -0
  103. data/assets/themes/j1/modules/masterslider/css/skins/black-skin-2.png +0 -0
  104. data/assets/themes/j1/modules/masterslider/css/skins/contrast-skin-retina.png +0 -0
  105. data/assets/themes/j1/modules/masterslider/css/skins/contrast-skin.png +0 -0
  106. data/assets/themes/j1/modules/masterslider/css/skins/light-skin-1-retina.png +0 -0
  107. data/assets/themes/j1/modules/masterslider/css/skins/light-skin-1.png +0 -0
  108. data/assets/themes/j1/modules/masterslider/css/skins/light-skin-2-retina.png +0 -0
  109. data/assets/themes/j1/modules/masterslider/css/skins/light-skin-2.png +0 -0
  110. data/assets/themes/j1/modules/masterslider/css/skins/light-skin-3-retina.png +0 -0
  111. data/assets/themes/j1/modules/masterslider/css/skins/light-skin-3.png +0 -0
  112. data/assets/themes/j1/modules/masterslider/css/skins/light-skin-4-retina.png +0 -0
  113. data/assets/themes/j1/modules/masterslider/css/skins/light-skin-4.png +0 -0
  114. data/assets/themes/j1/modules/masterslider/css/skins/light-skin-5-retina.png +0 -0
  115. data/assets/themes/j1/modules/masterslider/css/skins/light-skin-5.png +0 -0
  116. data/assets/themes/j1/modules/masterslider/css/skins/light-skin-6-retina.png +0 -0
  117. data/assets/themes/j1/modules/masterslider/css/skins/light-skin-6.png +0 -0
  118. data/assets/themes/j1/modules/masterslider/css/skins/metro-skin-retina.png +0 -0
  119. data/assets/themes/j1/modules/masterslider/css/skins/metro-skin.png +0 -0
  120. data/assets/themes/j1/modules/masterslider/css/skins/minimal.svg +11 -0
  121. data/assets/themes/j1/modules/masterslider/css/templates/device-skin.png +0 -0
  122. data/assets/themes/j1/modules/masterslider/css/templates/display.png +0 -0
  123. data/assets/themes/j1/modules/masterslider/css/templates/flat-display.png +0 -0
  124. data/assets/themes/j1/modules/masterslider/css/templates/flat-laptop.png +0 -0
  125. data/assets/themes/j1/modules/masterslider/css/templates/flat-phone-land.png +0 -0
  126. data/assets/themes/j1/modules/masterslider/css/templates/flat-phone.png +0 -0
  127. data/assets/themes/j1/modules/masterslider/css/templates/flat-tablet-land.png +0 -0
  128. data/assets/themes/j1/modules/masterslider/css/templates/flat-tablet.png +0 -0
  129. data/assets/themes/j1/modules/masterslider/css/templates/gallery-btns.png +0 -0
  130. data/assets/themes/j1/modules/masterslider/css/templates/laptop.png +0 -0
  131. data/assets/themes/j1/modules/masterslider/css/templates/phone-land.png +0 -0
  132. data/assets/themes/j1/modules/masterslider/css/templates/phone.png +0 -0
  133. data/assets/themes/j1/modules/masterslider/css/templates/staff-arrows.png +0 -0
  134. data/assets/themes/j1/modules/masterslider/css/templates/tablet-land.png +0 -0
  135. data/assets/themes/j1/modules/masterslider/css/templates/tablet.png +0 -0
  136. data/assets/themes/j1/modules/masterslider/css/templates/vertical-arrows.png +0 -0
  137. data/assets/themes/j1/modules/masterslider/css/theme/uno.css +95 -0
  138. data/assets/themes/j1/modules/masterslider/css/theme/uno.min.css +95 -0
  139. data/assets/themes/j1/modules/masterslider/css/themes/ms-skin-sample.css +172 -0
  140. data/assets/themes/j1/modules/masterslider/css/themes/ms-skin-sample.min.css +172 -0
  141. data/assets/themes/j1/modules/masterslider/js/addons/masterslider.flickr.min.js +1 -0
  142. data/assets/themes/j1/modules/masterslider/js/addons/public.js +10 -0
  143. data/assets/themes/j1/modules/masterslider/js/masterslider.js +5544 -0
  144. data/assets/themes/j1/modules/masterslider/js/masterslider.min.js +11 -0
  145. data/assets/themes/j1/modules/masterslider/js/plugins/jquery.easing.js +211 -0
  146. data/assets/themes/j1/modules/masterslider/js/plugins/jquery.easing.min.js +51 -0
  147. data/assets/themes/j1/modules/mmenuLight/css/theme/uno/mmenu.css +3 -3
  148. data/assets/themes/j1/modules/mmenuLight/css/theme/uno/mmenu.min.css +1 -1
  149. data/assets/themes/j1/modules/rouge/css/uno.dark/theme.css +11 -11
  150. data/assets/themes/j1/modules/rouge/css/uno.light/theme.css +24 -18
  151. data/assets/themes/j1/modules/translator/js/translator.js +2 -2
  152. data/assets/themes/j1/modules/translator/js/translator.min.js +1 -1
  153. data/assets/themes/j1/modules/twemoji/js/picker/twemoji-picker.js +2 -2
  154. data/assets/themes/j1/modules/twemoji/js/picker/twemoji-picker.min.js +304 -1
  155. data/lib/j1/version.rb +1 -1
  156. data/lib/starter_web/Gemfile +1 -1
  157. data/lib/starter_web/_config.yml +2 -2
  158. data/lib/starter_web/_data/blocks/banner.yml +8 -5
  159. data/lib/starter_web/_data/blocks/footer.yml +1 -1
  160. data/lib/starter_web/_data/modules/attics.yml +16 -4
  161. data/lib/starter_web/_data/modules/defaults/attics.yml +12 -5
  162. data/lib/starter_web/_data/modules/defaults/lightbox.yml +1 -1
  163. data/lib/starter_web/_data/modules/defaults/masterslider.yml +235 -0
  164. data/lib/starter_web/_data/modules/defaults/navigator.yml +7 -5
  165. data/lib/starter_web/_data/modules/defaults/toccer.yml +1 -1
  166. data/lib/starter_web/_data/modules/fab.yml +39 -118
  167. data/lib/starter_web/_data/modules/lightbox.yml +4 -2
  168. data/lib/starter_web/_data/modules/masterslider.yml +1153 -0
  169. data/lib/starter_web/_data/modules/navigator_menu.yml +234 -5
  170. data/lib/starter_web/_data/resources.yml +166 -95
  171. data/lib/starter_web/_plugins/asciidoctor-extensions/masterslider-block.rb +47 -0
  172. data/lib/starter_web/_plugins/lunr_index.rb +1 -1
  173. data/lib/starter_web/assets/images/modules/masterslider/slider_1/cat-1.jpg +0 -0
  174. data/lib/starter_web/assets/images/modules/masterslider/slider_1/cat-2.jpg +0 -0
  175. data/lib/starter_web/assets/images/modules/masterslider/slider_1/cat-3.jpg +0 -0
  176. data/lib/starter_web/assets/images/modules/masterslider/slider_1/cat-4.jpg +0 -0
  177. data/lib/starter_web/assets/images/modules/masterslider/slider_1/cat-5.jpg +0 -0
  178. data/lib/starter_web/assets/images/modules/masterslider/slider_1/cat-6.jpg +0 -0
  179. data/lib/starter_web/assets/images/modules/masterslider/slider_1/cat-7.jpg +0 -0
  180. data/lib/starter_web/assets/images/modules/masterslider/slider_1/cat-8.jpg +0 -0
  181. data/lib/starter_web/assets/images/modules/masterslider/slider_10/panorama-bg-slide1.jpg +0 -0
  182. data/lib/starter_web/assets/images/modules/masterslider/slider_10/panorama-bg-slide2.jpg +0 -0
  183. data/lib/starter_web/assets/images/modules/masterslider/slider_2/andreas-brucker.jpg +0 -0
  184. data/lib/starter_web/assets/images/modules/masterslider/slider_2/denys-nevozhai-1.jpg +0 -0
  185. data/lib/starter_web/assets/images/modules/masterslider/slider_2/denys-nevozhai-2.jpg +0 -0
  186. data/lib/starter_web/assets/images/modules/masterslider/slider_2/luca-bravo.jpg +0 -0
  187. data/lib/starter_web/assets/images/modules/masterslider/slider_2/thomas-tucker.jpg +0 -0
  188. data/lib/starter_web/assets/images/modules/masterslider/slider_3/ms-free-food-family-2.jpg +0 -0
  189. data/lib/starter_web/assets/images/modules/masterslider/slider_3/ms-free-food-hamburger.jpg +0 -0
  190. data/lib/starter_web/assets/images/modules/masterslider/slider_3/ms-free-food-restaurant.jpg +0 -0
  191. data/lib/starter_web/assets/images/modules/masterslider/slider_4/ms-free-animals-1-100x80.jpg +0 -0
  192. data/lib/starter_web/assets/images/modules/masterslider/slider_4/ms-free-animals-1.jpg +0 -0
  193. data/lib/starter_web/assets/images/modules/masterslider/slider_4/ms-free-animals-2-100x80.jpg +0 -0
  194. data/lib/starter_web/assets/images/modules/masterslider/slider_4/ms-free-animals-2.jpg +0 -0
  195. data/lib/starter_web/assets/images/modules/masterslider/slider_4/ms-free-animals-3-100x80.jpg +0 -0
  196. data/lib/starter_web/assets/images/modules/masterslider/slider_4/ms-free-animals-3.jpg +0 -0
  197. data/lib/starter_web/assets/images/modules/masterslider/slider_4/ms-free-animals-4-100x80.jpg +0 -0
  198. data/lib/starter_web/assets/images/modules/masterslider/slider_4/ms-free-animals-4.jpg +0 -0
  199. data/lib/starter_web/assets/images/modules/masterslider/slider_4/ms-free-animals-5-100x80.jpg +0 -0
  200. data/lib/starter_web/assets/images/modules/masterslider/slider_4/ms-free-animals-5.jpg +0 -0
  201. data/lib/starter_web/assets/images/modules/masterslider/slider_4/ms-free-animals-6-100x80.jpg +0 -0
  202. data/lib/starter_web/assets/images/modules/masterslider/slider_4/ms-free-animals-6.jpg +0 -0
  203. data/lib/starter_web/assets/images/modules/masterslider/slider_4/ms-free-animals-7-100x80.jpg +0 -0
  204. data/lib/starter_web/assets/images/modules/masterslider/slider_4/ms-free-animals-7.jpg +0 -0
  205. data/lib/starter_web/assets/images/modules/masterslider/slider_5/ms-free-food-family-140x80.jpg +0 -0
  206. data/lib/starter_web/assets/images/modules/masterslider/slider_5/ms-free-food-family-2-140x80.jpg +0 -0
  207. data/lib/starter_web/assets/images/modules/masterslider/slider_5/ms-free-food-family-2.jpg +0 -0
  208. data/lib/starter_web/assets/images/modules/masterslider/slider_5/ms-free-food-family-3-140x80.jpg +0 -0
  209. data/lib/starter_web/assets/images/modules/masterslider/slider_5/ms-free-food-family-3.jpg +0 -0
  210. data/lib/starter_web/assets/images/modules/masterslider/slider_5/ms-free-food-family.jpg +0 -0
  211. data/lib/starter_web/assets/images/modules/masterslider/slider_5/ms-free-food-hamburger-140x80.jpg +0 -0
  212. data/lib/starter_web/assets/images/modules/masterslider/slider_5/ms-free-food-hamburger.jpg +0 -0
  213. data/lib/starter_web/assets/images/modules/masterslider/slider_5/ms-free-food-pizza-140x80.jpg +0 -0
  214. data/lib/starter_web/assets/images/modules/masterslider/slider_5/ms-free-food-pizza.jpg +0 -0
  215. data/lib/starter_web/assets/images/modules/masterslider/slider_5/ms-free-food-restaurant-140x80.jpg +0 -0
  216. data/lib/starter_web/assets/images/modules/masterslider/slider_5/ms-free-food-restaurant.jpg +0 -0
  217. data/lib/starter_web/assets/images/modules/masterslider/slider_5/ms-free-food-single-man-140x80.jpg +0 -0
  218. data/lib/starter_web/assets/images/modules/masterslider/slider_5/ms-free-food-single-man.jpg +0 -0
  219. data/lib/starter_web/assets/images/modules/masterslider/slider_5/ms-free-food-single-woman-140x80.jpg +0 -0
  220. data/lib/starter_web/assets/images/modules/masterslider/slider_5/ms-free-food-single-woman.jpg +0 -0
  221. data/lib/starter_web/assets/images/modules/masterslider/slider_5/ms-free-food-table-140x80.jpg +0 -0
  222. data/lib/starter_web/assets/images/modules/masterslider/slider_5/ms-free-food-table.jpg +0 -0
  223. data/lib/starter_web/assets/images/modules/masterslider/slider_5/ms-free-food-woman-hand-140x80.jpg +0 -0
  224. data/lib/starter_web/assets/images/modules/masterslider/slider_5/ms-free-food-woman-hand.jpg +0 -0
  225. data/lib/starter_web/assets/images/modules/masterslider/slider_6_7/6876385555_74a0d7d7ee_b.jpg +0 -0
  226. data/lib/starter_web/assets/images/modules/masterslider/slider_6_7/6876387431_d86867a3d9_b.jpg +0 -0
  227. data/lib/starter_web/assets/images/modules/masterslider/slider_6_7/6876388511_d618d53455_b.jpg +0 -0
  228. data/lib/starter_web/assets/images/modules/masterslider/slider_6_7/6876389463_db27a377e1_b.jpg +0 -0
  229. data/lib/starter_web/assets/images/modules/masterslider/slider_6_7/6876390339_2e4dd9dbbb_b.jpg +0 -0
  230. data/lib/starter_web/assets/images/modules/masterslider/slider_8/postslider-5-img-1.jpg +0 -0
  231. data/lib/starter_web/assets/images/modules/masterslider/slider_8/postslider-5-img-2.jpg +0 -0
  232. data/lib/starter_web/assets/images/modules/masterslider/slider_8/postslider-5-img-3.jpg +0 -0
  233. data/lib/starter_web/assets/images/modules/masterslider/slider_8/postslider6-bg-slide2-1024x622.jpg +0 -0
  234. data/lib/starter_web/assets/images/modules/masterslider/slider_9/1-2.jpg +0 -0
  235. data/lib/starter_web/assets/images/modules/masterslider/slider_9/5-2.jpg +0 -0
  236. data/lib/starter_web/assets/images/modules/masterslider/slider_9/6-2.jpg +0 -0
  237. data/lib/starter_web/assets/images/modules/masterslider/slider_9/6-3.jpg +0 -0
  238. data/lib/starter_web/assets/images/modules/masterslider/slider_9/8-1.jpg +0 -0
  239. data/lib/starter_web/assets/images/modules/masterslider/slider_9/8.jpg +0 -0
  240. data/lib/starter_web/assets/images/modules/masterslider/unify-examples/charity-white-tile-bg.png +0 -0
  241. data/lib/starter_web/assets/images/modules/masterslider/unify-examples/fashion2-controller-arrow-next.png +0 -0
  242. data/lib/starter_web/assets/images/modules/masterslider/unify-examples/fashion2-controller-arrow-prv.png +0 -0
  243. data/lib/starter_web/assets/images/modules/masterslider/unify-examples/fashion2-img-slide1.jpg +0 -0
  244. data/lib/starter_web/assets/images/modules/masterslider/unify-examples/fashion2-img-slide2.jpg +0 -0
  245. data/lib/starter_web/assets/images/modules/masterslider/unify-examples/fashion2-img-slide3.jpg +0 -0
  246. data/lib/starter_web/assets/images/modules/masterslider/wp-examples/ms-free-business-1.jpg +0 -0
  247. data/lib/starter_web/assets/images/modules/masterslider/wp-examples/ms-free-business-2.jpg +0 -0
  248. data/lib/starter_web/assets/images/modules/masterslider/wp-examples/ms-free-business-3.jpg +0 -0
  249. data/lib/starter_web/index.html +0 -1
  250. data/lib/starter_web/package.json +1 -1
  251. data/lib/starter_web/pages/public/features/general.adoc +1 -1
  252. data/lib/starter_web/pages/public/jupyter/notebooks/textbooks/j1_circular_times_table.html +747 -747
  253. data/lib/starter_web/pages/public/jupyter/notebooks/textbooks/j1_climate_change_forecast.html +1250 -1250
  254. data/lib/starter_web/pages/public/jupyter/notebooks/textbooks/j1_docs_example_dynamic.html +186 -186
  255. data/lib/starter_web/pages/public/jupyter/notebooks/textbooks/j1_interactive_widgets.html +512 -512
  256. data/lib/starter_web/pages/public/jupyter/notebooks/textbooks/j1_nbi_widgets.html +629 -629
  257. data/lib/starter_web/pages/public/jupyter/notebooks/textbooks/j1_nbi_widgets_hist_chart.html +93 -93
  258. data/lib/starter_web/pages/public/jupyter/notebooks/textbooks/j1_nbi_widgets_question_multiple_choice.html +70 -70
  259. data/lib/starter_web/pages/public/jupyter/notebooks/textbooks/j1_nbi_widgets_question_short_answer.html +156 -156
  260. data/lib/starter_web/pages/public/jupyter/notebooks/textbooks/j1_odes_in_python.html +955 -955
  261. data/lib/starter_web/pages/public/learn/quickstart.adoc +1 -1
  262. data/lib/starter_web/pages/public/learn/roundtrip/100_present_images.adoc +90 -7
  263. data/lib/starter_web/pages/public/learn/roundtrip/100_present_videos.adoc +1 -1
  264. data/lib/starter_web/pages/public/learn/roundtrip/200_typography.adoc +1 -1
  265. data/lib/starter_web/pages/public/learn/roundtrip/300_icon_fonts.adoc +1 -1
  266. data/lib/starter_web/pages/public/learn/roundtrip/400_asciidoc_extensions.adoc +1 -1
  267. data/lib/starter_web/pages/public/learn/roundtrip/410_bs_modals_extentions.adoc +1 -1
  268. data/lib/starter_web/pages/public/learn/roundtrip/420_responsive_tables_extensions.adoc +1 -1
  269. data/lib/starter_web/pages/public/learn/roundtrip/500_themes.adoc +1 -1
  270. data/lib/starter_web/pages/public/learn/roundtrip/600_quicksearch.adoc +1 -1
  271. data/lib/starter_web/pages/public/legal/de/100_copyright.adoc +1 -1
  272. data/lib/starter_web/pages/public/legal/de/100_impress.adoc +1 -1
  273. data/lib/starter_web/pages/public/legal/de/300_privacy.adoc +1 -1
  274. data/lib/starter_web/pages/public/legal/de/400_comment_policy.adoc +1 -1
  275. data/lib/starter_web/pages/public/legal/en/100_copyright.adoc +1 -1
  276. data/lib/starter_web/pages/public/legal/en/200_impress.adoc +1 -1
  277. data/lib/starter_web/pages/public/legal/en/300_privacy.adoc +1 -1
  278. data/lib/starter_web/pages/public/legal/en/400_comment_policy.adoc +1 -1
  279. data/lib/starter_web/pages/public/panels/intro_panel/panel.adoc +1 -1
  280. data/lib/starter_web/pages/public/plans/plans.adoc +1 -1
  281. data/lib/starter_web/pages/public/previewer/preview_bootstrap_theme.adoc +143 -132
  282. data/lib/starter_web/utilsrv/_defaults/package.json +1 -1
  283. data/lib/starter_web/utilsrv/package.json +1 -1
  284. metadata +143 -3
  285. data/_includes/themes/j1/procedures/global/create_bs_button.1.proc +0 -172
@@ -1,747 +1,747 @@
1
- <div class="cell text_cell">
2
- <button class="js-nbinteract-widget">
3
- Loading widgets...
4
- </button>
5
- </div>
6
-
7
-
8
-
9
- <div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
10
- <div class="text_cell_render border-box-sizing rendered_html">
11
- <h2 id="Mathologer">Mathologer<a class="anchor-link" href="#Mathologer">&#182;</a></h2><p>The Times Tables, Mandelbrot and the Heart of Mathematics. The good old <strong>times tables</strong> lead a very exciting secret life involving the infamous <strong>Mandelbrot</strong> set.</p>
12
-
13
- </div>
14
- </div>
15
- </div>
16
-
17
-
18
-
19
- <div class="
20
- cell border-box-sizing code_cell rendered">
21
- <div class="input">
22
-
23
- <div class="inner_cell">
24
- <div class="input_area">
25
- <div class=" highlight hl-ipython3"><pre><span></span><span class="o">%%HTML</span>
26
-
27
- <span class="p">&lt;</span><span class="nt">center</span><span class="p">&gt;</span>
28
- <span class="p">&lt;</span><span class="nt">iframe</span>
29
- <span class="na">width</span><span class="o">=</span><span class="s">&quot;900&quot;</span> <span class="na">height</span><span class="o">=</span><span class="s">&quot;540&quot;</span>
30
- <span class="na">frameborder</span><span class="o">=</span><span class="s">&quot;0&quot;</span> <span class="na">allowfullscreen</span>
31
- <span class="na">src</span><span class="o">=</span><span class="s">&quot;https://www.youtube.com/embed/qhbuKbxJsk8&quot;</span><span class="p">&gt;</span>
32
- <span class="p">&lt;/</span><span class="nt">iframe</span><span class="p">&gt;</span>
33
- <span class="p">&lt;/</span><span class="nt">center</span><span class="p">&gt;</span>
34
- </pre></div>
35
-
36
- </div>
37
- </div>
38
- </div>
39
-
40
- <div class="output_wrapper">
41
- <div class="output">
42
-
43
-
44
- <div class="output_area">
45
-
46
-
47
-
48
-
49
- <div class="output_html rendered_html output_subarea ">
50
-
51
- <center>
52
- <iframe
53
- width="900" height="540"
54
- frameborder="0" allowfullscreen
55
- src="https://www.youtube.com/embed/qhbuKbxJsk8">
56
- </iframe>
57
- </center>
58
-
59
- </div>
60
-
61
- </div>
62
-
63
- </div>
64
- </div>
65
-
66
- </div>
67
- <div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
68
- <div class="text_cell_render border-box-sizing rendered_html">
69
- <h2 id="General-Imports-and-Functions">General Imports and Functions<a class="anchor-link" href="#General-Imports-and-Functions">&#182;</a></h2><p>It's a good practice to place all the imports at the top of the document to better trace dependencies and keep them updated, and also to know which tools are required. In this case there are General Purpose imports and Jupyter specifics.</p>
70
-
71
- </div>
72
- </div>
73
- </div>
74
-
75
-
76
-
77
- <div class="
78
- cell border-box-sizing code_cell rendered">
79
- <div class="input">
80
-
81
- <div class="inner_cell">
82
- <div class="input_area">
83
- <div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># General Purpose</span>
84
- <span class="c1">#</span>
85
- <span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
86
- <span class="kn">from</span> <span class="nn">matplotlib</span> <span class="kn">import</span> <span class="n">pyplot</span> <span class="k">as</span> <span class="n">plt</span>
87
- <span class="kn">from</span> <span class="nn">matplotlib</span> <span class="kn">import</span> <span class="n">animation</span><span class="p">,</span> <span class="n">rc</span>
88
- <span class="kn">import</span> <span class="nn">matplotlib.lines</span> <span class="k">as</span> <span class="nn">mlines</span>
89
- <span class="kn">import</span> <span class="nn">colorsys</span>
90
- <span class="kn">from</span> <span class="nn">matplotlib.collections</span> <span class="kn">import</span> <span class="n">LineCollection</span>
91
-
92
- <span class="c1"># Jupyter Specifics</span>
93
- <span class="c1">#</span>
94
- <span class="kn">import</span> <span class="nn">matplotlib</span> <span class="k">as</span> <span class="nn">mpl</span>
95
- <span class="kn">from</span> <span class="nn">IPython.display</span> <span class="kn">import</span> <span class="n">HTML</span>
96
- <span class="kn">from</span> <span class="nn">ipywidgets.widgets</span> <span class="kn">import</span> <span class="n">interact</span><span class="p">,</span> <span class="n">IntSlider</span><span class="p">,</span> <span class="n">FloatSlider</span><span class="p">,</span> <span class="n">Dropdown</span><span class="p">,</span> <span class="n">Layout</span>
97
-
98
- <span class="c1"># Some magics</span>
99
- <span class="c1">#</span>
100
- <span class="o">%</span><span class="k">matplotlib</span> inline
101
- </pre></div>
102
-
103
- </div>
104
- </div>
105
- </div>
106
-
107
- </div>
108
-
109
-
110
-
111
- <div class="nbinteract-hide_in
112
- cell border-box-sizing code_cell rendered">
113
- <div class="input">
114
-
115
- <div class="inner_cell">
116
- <div class="input_area">
117
- <div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># nbi:hide_in</span>
118
-
119
- <span class="c1"># The method (of the animation instances) to manage the</span>
120
- <span class="c1"># player is controlled by the animation rc parameter.</span>
121
- <span class="c1">#</span>
122
- <span class="c1"># The rc parameter currently supports values of &quot;none&quot;, &quot;html5&quot;</span>
123
- <span class="c1"># and &quot;jshtml&quot;.</span>
124
- <span class="c1">#</span>
125
- <span class="c1"># none: no player (display) is shown </span>
126
- <span class="c1"># html5: use the native HTML5 player widget</span>
127
- <span class="c1"># jshtml: use the interactive JavaScript widget</span>
128
- <span class="c1">#</span>
129
- <span class="c1"># The default is none to not display a player. To display</span>
130
- <span class="c1"># the native HTML5 player, # set it to &quot;html5&quot;. For the</span>
131
- <span class="c1"># interactive JavaScript widget to &quot;jshtml&quot;.</span>
132
- <span class="c1">#</span>
133
- <span class="n">rc</span><span class="p">(</span><span class="s1">&#39;animation&#39;</span><span class="p">,</span> <span class="n">html</span><span class="o">=</span><span class="s1">&#39;html5&#39;</span><span class="p">,</span> <span class="n">embed_limit</span><span class="o">=</span><span class="s1">&#39;256&#39;</span><span class="p">)</span>
134
- <span class="c1"># rc(&#39;animation&#39;, html=&#39;jshtml&#39;, embed_limit=&#39;512&#39;)</span>
135
- </pre></div>
136
-
137
- </div>
138
- </div>
139
- </div>
140
-
141
- </div>
142
- <div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
143
- <div class="text_cell_render border-box-sizing rendered_html">
144
- <h3 id="Basic-Functions">Basic Functions<a class="anchor-link" href="#Basic-Functions">&#182;</a></h3><p>Once everything is imported and ready to use, several functions must be defined, namely:</p>
145
- <ol>
146
- <li>A function to calculate the points arround a circle</li>
147
- <li>A function to generate each of the lines</li>
148
- <li>A function to plot the labels and the point in the circle</li>
149
- <li>A function to plot the lines in the circle</li>
150
- </ol>
151
- <p>The first function is called <em>points_arround_circle</em> and it basically uses polar coordinates to place a given number of points arround a circle of a given radius. Here numpy is needed to make the calculation performant.</p>
152
-
153
- </div>
154
- </div>
155
- </div>
156
-
157
-
158
-
159
- <div class="
160
- cell border-box-sizing code_cell rendered">
161
- <div class="input">
162
-
163
- <div class="inner_cell">
164
- <div class="input_area">
165
- <div class=" highlight hl-ipython3"><pre><span></span><span class="k">def</span> <span class="nf">points_arround_circle</span><span class="p">(</span><span class="n">number</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span> <span class="n">center</span><span class="o">=</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">),</span> <span class="n">radius</span><span class="o">=</span><span class="mi">1</span><span class="p">):</span>
166
- <span class="n">theta</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">linspace</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">2</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">pi</span> <span class="o">-</span> <span class="p">(</span><span class="mi">2</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">pi</span> <span class="o">/</span> <span class="n">number</span><span class="p">),</span> <span class="n">number</span><span class="p">)</span>
167
- <span class="n">x</span> <span class="o">=</span> <span class="n">radius</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">cos</span><span class="p">(</span><span class="n">theta</span><span class="p">)</span>
168
- <span class="n">y</span> <span class="o">=</span> <span class="n">radius</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sin</span><span class="p">(</span><span class="n">theta</span><span class="p">)</span>
169
- <span class="k">return</span> <span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">)</span>
170
- </pre></div>
171
-
172
- </div>
173
- </div>
174
- </div>
175
-
176
- </div>
177
- <div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
178
- <div class="text_cell_render border-box-sizing rendered_html">
179
- <p>Second, in order to generate the lines, the list of points is given and a new line is generated by the function <em>get_lines_from_points</em>.</p>
180
-
181
- </div>
182
- </div>
183
- </div>
184
-
185
-
186
-
187
- <div class="
188
- cell border-box-sizing code_cell rendered">
189
- <div class="input">
190
-
191
- <div class="inner_cell">
192
- <div class="input_area">
193
- <div class=" highlight hl-ipython3"><pre><span></span><span class="k">def</span> <span class="nf">get_lines_from_points</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">factor</span><span class="p">,</span> <span class="n">animated</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
194
- <span class="n">limit</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
195
- <span class="k">if</span> <span class="n">animated</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
196
- <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">limit</span><span class="p">):</span>
197
- <span class="n">x_range</span> <span class="o">=</span> <span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">x</span><span class="p">[</span><span class="nb">int</span><span class="p">(</span><span class="n">i</span> <span class="o">*</span> <span class="n">factor</span><span class="p">)</span> <span class="o">%</span> <span class="n">limit</span><span class="p">])</span>
198
- <span class="n">y_range</span> <span class="o">=</span> <span class="p">(</span><span class="n">y</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">y</span><span class="p">[</span><span class="nb">int</span><span class="p">(</span><span class="n">i</span> <span class="o">*</span> <span class="n">factor</span><span class="p">)</span> <span class="o">%</span> <span class="n">limit</span><span class="p">])</span>
199
- <span class="k">yield</span> <span class="n">mlines</span><span class="o">.</span><span class="n">Line2D</span><span class="p">(</span><span class="n">x_range</span><span class="p">,</span> <span class="n">y_range</span><span class="p">)</span>
200
- <span class="k">else</span><span class="p">:</span>
201
- <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">limit</span><span class="p">):</span>
202
- <span class="n">start</span> <span class="o">=</span> <span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">y</span><span class="p">[</span><span class="n">i</span><span class="p">])</span>
203
- <span class="n">index</span> <span class="o">=</span> <span class="nb">int</span><span class="p">((</span><span class="n">i</span> <span class="o">*</span> <span class="n">factor</span><span class="p">)</span> <span class="o">%</span> <span class="n">limit</span><span class="p">)</span>
204
- <span class="n">end</span> <span class="o">=</span> <span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="n">index</span><span class="p">],</span> <span class="n">y</span><span class="p">[</span><span class="n">index</span><span class="p">])</span>
205
- <span class="k">yield</span> <span class="n">end</span><span class="p">,</span> <span class="n">start</span>
206
- </pre></div>
207
-
208
- </div>
209
- </div>
210
- </div>
211
-
212
- </div>
213
- <div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
214
- <div class="text_cell_render border-box-sizing rendered_html">
215
- <p>Now it's time to plot the point around the circle by <em>plot_circle_points</em>. Both in the circle, the points and the labels are plotted.</p>
216
-
217
- </div>
218
- </div>
219
- </div>
220
-
221
-
222
-
223
- <div class="
224
- cell border-box-sizing code_cell rendered">
225
- <div class="input">
226
-
227
- <div class="inner_cell">
228
- <div class="input_area">
229
- <div class=" highlight hl-ipython3"><pre><span></span><span class="k">def</span> <span class="nf">plot_circle_points</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">ax</span><span class="p">,</span> <span class="n">labels</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
230
- <span class="n">ax</span><span class="o">.</span><span class="n">annotate</span><span class="p">(</span><span class="s2">&quot;Points: </span><span class="si">{}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">x</span><span class="p">)),</span> <span class="p">(</span><span class="mf">0.8</span><span class="p">,</span> <span class="mf">0.9</span><span class="p">))</span>
231
- <span class="n">ax</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="s2">&quot;-ko&quot;</span><span class="p">,</span> <span class="n">markevery</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
232
- <span class="k">if</span> <span class="ow">not</span> <span class="n">labels</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
233
- <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">)</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="nb">zip</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">)):</span>
234
- <span class="n">ax</span><span class="o">.</span><span class="n">annotate</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">))</span>
235
- </pre></div>
236
-
237
- </div>
238
- </div>
239
- </div>
240
-
241
- </div>
242
- <div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
243
- <div class="text_cell_render border-box-sizing rendered_html">
244
- <p>Finally, a function <em>plot_lines</em> which receives the axis object to plot all the lines. With the option (if given), a color for the lines in a HSV format is calculated.</p>
245
-
246
- </div>
247
- </div>
248
- </div>
249
-
250
-
251
-
252
- <div class="
253
- cell border-box-sizing code_cell rendered">
254
- <div class="input">
255
-
256
- <div class="inner_cell">
257
- <div class="input_area">
258
- <div class=" highlight hl-ipython3"><pre><span></span><span class="k">def</span> <span class="nf">plot_lines</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">factor</span><span class="p">,</span> <span class="n">ax</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
259
- <span class="n">ax</span><span class="o">.</span><span class="n">annotate</span><span class="p">(</span><span class="s2">&quot;Factor: </span><span class="si">{}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">factor</span><span class="p">),</span> <span class="p">(</span><span class="mf">0.8</span><span class="p">,</span> <span class="mi">1</span><span class="p">))</span>
260
- <span class="n">lines</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">get_lines_from_points</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">factor</span><span class="p">))</span>
261
- <span class="k">if</span> <span class="n">color</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
262
- <span class="n">line_segments</span> <span class="o">=</span> <span class="n">LineCollection</span><span class="p">(</span><span class="n">lines</span><span class="p">)</span>
263
- <span class="k">else</span><span class="p">:</span>
264
- <span class="n">line_segments</span> <span class="o">=</span> <span class="n">LineCollection</span><span class="p">(</span><span class="n">lines</span><span class="p">,</span> <span class="n">colors</span><span class="o">=</span><span class="n">colorsys</span><span class="o">.</span><span class="n">hsv_to_rgb</span><span class="p">(</span><span class="n">color</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">,</span> <span class="mf">0.8</span><span class="p">))</span>
265
-
266
- <span class="n">ax</span><span class="o">.</span><span class="n">add_collection</span><span class="p">(</span><span class="n">line_segments</span><span class="p">)</span>
267
- </pre></div>
268
-
269
- </div>
270
- </div>
271
- </div>
272
-
273
- </div>
274
- <div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
275
- <div class="text_cell_render border-box-sizing rendered_html">
276
- <h2 id="Create-a-static-plot">Create a static plot<a class="anchor-link" href="#Create-a-static-plot">&#182;</a></h2><p>After all the functions needed are defined, now plotting is quite simple. Just generate the axis object and invoke the functions in the logical order, and you get the image.</p>
277
- <p>One approach is manually changing the factor and points variables and then executing the plot. Since Jupyter provides support for <strong>interaction</strong>, a more user-friendly approach can be used. Change the image by moving the <strong>sliders</strong> to either side.</p>
278
-
279
- </div>
280
- </div>
281
- </div>
282
-
283
-
284
-
285
- <div class="
286
- cell border-box-sizing code_cell rendered">
287
- <div class="input">
288
-
289
- <div class="inner_cell">
290
- <div class="input_area">
291
- <div class=" highlight hl-ipython3"><pre><span></span><span class="k">def</span> <span class="nf">plot_parametric</span><span class="p">(</span><span class="n">Factor</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="n">Points</span><span class="o">=</span><span class="mi">100</span><span class="p">):</span>
292
- <span class="n">plt</span><span class="o">.</span><span class="n">figure</span><span class="p">(</span><span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">10</span><span class="p">,</span> <span class="mi">10</span><span class="p">))</span>
293
- <span class="n">ax</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplot</span><span class="p">()</span>
294
- <span class="n">plt</span><span class="o">.</span><span class="n">axis</span><span class="p">(</span><span class="s1">&#39;off&#39;</span><span class="p">)</span>
295
- <span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="n">points_arround_circle</span><span class="p">(</span><span class="n">number</span><span class="o">=</span><span class="n">Points</span><span class="p">)</span>
296
- <span class="n">plot_circle_points</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">ax</span><span class="p">)</span>
297
- <span class="n">plot_lines</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">Factor</span><span class="p">,</span> <span class="n">ax</span><span class="p">)</span>
298
- <span class="n">plt</span><span class="o">.</span><span class="n">show</span><span class="p">()</span>
299
-
300
- <span class="n">factors</span> <span class="o">=</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="mi">8</span><span class="p">,</span> <span class="mi">10</span><span class="p">,</span> <span class="mi">16</span><span class="p">,</span> <span class="mi">20</span><span class="p">,</span> <span class="mi">21</span><span class="p">,</span> <span class="mi">25</span><span class="p">,</span> <span class="mi">26</span><span class="p">,</span> <span class="mi">34</span>
301
- <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">Try these Factors with different number of Points:</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">,</span> <span class="o">*</span><span class="n">factors</span><span class="p">,</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">)</span>
302
- </pre></div>
303
-
304
- </div>
305
- </div>
306
- </div>
307
-
308
- <div class="output_wrapper">
309
- <div class="output">
310
-
311
-
312
- <div class="output_area">
313
-
314
-
315
-
316
- <div class="output_subarea output_stream output_stdout output_text">
317
- <pre>
318
- Try these Factors with different number of Points:
319
- 2 3 4 5 8 10 16 20 21 25 26 34
320
-
321
- </pre>
322
- </div>
323
- </div>
324
-
325
- </div>
326
- </div>
327
-
328
- </div>
329
-
330
-
331
-
332
- <div class="nbinteract-hide_in
333
- cell border-box-sizing code_cell rendered">
334
- <div class="input">
335
-
336
- <div class="inner_cell">
337
- <div class="input_area">
338
- <div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># nbi:hide_in</span>
339
-
340
- <span class="n">interact</span><span class="p">(</span><span class="n">plot_parametric</span><span class="p">,</span>
341
- <span class="n">Factor</span><span class="o">=</span><span class="n">IntSlider</span><span class="p">(</span><span class="nb">min</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="nb">max</span><span class="o">=</span><span class="mi">34</span><span class="p">,</span> <span class="n">step</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">value</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="n">layout</span><span class="o">=</span><span class="n">Layout</span><span class="p">(</span><span class="n">width</span><span class="o">=</span><span class="s1">&#39;90%&#39;</span><span class="p">)),</span>
342
- <span class="n">Points</span><span class="o">=</span><span class="n">IntSlider</span><span class="p">(</span><span class="nb">min</span><span class="o">=</span><span class="mi">25</span><span class="p">,</span> <span class="nb">max</span><span class="o">=</span><span class="mi">200</span><span class="p">,</span> <span class="n">step</span><span class="o">=</span><span class="mi">5</span><span class="p">,</span> <span class="n">value</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span> <span class="n">layout</span><span class="o">=</span><span class="n">Layout</span><span class="p">(</span><span class="n">width</span><span class="o">=</span><span class="s1">&#39;90%&#39;</span><span class="p">)));</span>
343
-
344
- </pre></div>
345
-
346
- </div>
347
- </div>
348
- </div>
349
-
350
- <div class="output_wrapper">
351
- <div class="output">
352
-
353
-
354
- <div class="output_area">
355
-
356
-
357
-
358
-
359
-
360
- <div class="output_subarea output_widget_view ">
361
- <button class="js-nbinteract-widget">
362
- Loading widgets...
363
- </button>
364
- </div>
365
-
366
- </div>
367
-
368
- </div>
369
- </div>
370
-
371
- </div>
372
- <div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
373
- <div class="text_cell_render border-box-sizing rendered_html">
374
- <h2 id="Construction-Line-by-Line">Construction Line by Line<a class="anchor-link" href="#Construction-Line-by-Line">&#182;</a></h2><p>The factor and the number of points is fixed for the plot by your selection, but each <strong>line</strong> is plotted per iteration. Try different factors (for the times table) and vary the number of points placed on the circle.</p>
375
-
376
- </div>
377
- </div>
378
- </div>
379
-
380
-
381
-
382
- <div class="nbinteract-hide_in
383
- cell border-box-sizing code_cell rendered">
384
- <div class="input">
385
-
386
- <div class="inner_cell">
387
- <div class="input_area">
388
- <div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># nbi:hide_in</span>
389
-
390
- <span class="c1"># animation function. This is called sequentially.</span>
391
- <span class="c1">#</span>
392
- <span class="k">def</span> <span class="nf">animate_line_by_line</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">lines</span><span class="p">,</span> <span class="n">ax</span><span class="p">):</span>
393
- <span class="n">ax</span><span class="o">.</span><span class="n">add_line</span><span class="p">(</span><span class="nb">next</span><span class="p">(</span><span class="n">lines</span><span class="p">))</span>
394
- <span class="k">return</span> <span class="p">[]</span>
395
-
396
- <span class="k">def</span> <span class="nf">line_by_line</span><span class="p">(</span><span class="n">Factor</span><span class="p">,</span> <span class="n">Points</span><span class="p">,</span> <span class="n">Interval</span><span class="p">):</span>
397
- <span class="n">fig</span><span class="p">,</span> <span class="n">ax</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplots</span><span class="p">(</span><span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">10</span><span class="p">,</span> <span class="mi">10</span><span class="p">));</span>
398
- <span class="n">plt</span><span class="o">.</span><span class="n">axis</span><span class="p">(</span><span class="s1">&#39;off&#39;</span><span class="p">)</span>
399
- <span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="n">points_arround_circle</span><span class="p">(</span><span class="n">number</span><span class="o">=</span><span class="n">Points</span><span class="p">)</span>
400
- <span class="n">plot_circle_points</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">ax</span><span class="p">)</span>
401
- <span class="n">ax</span><span class="o">.</span><span class="n">annotate</span><span class="p">(</span><span class="s2">&quot;Factor: </span><span class="si">{}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">Factor</span><span class="p">),</span> <span class="p">(</span><span class="mf">0.8</span><span class="p">,</span> <span class="mi">1</span><span class="p">))</span>
402
- <span class="n">ax</span><span class="o">.</span><span class="n">annotate</span><span class="p">(</span><span class="s2">&quot;Delay: </span><span class="si">{}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">Interval</span><span class="p">),</span> <span class="p">(</span><span class="mf">0.8</span><span class="p">,</span> <span class="mf">0.8</span><span class="p">))</span>
403
- <span class="n">lines</span> <span class="o">=</span> <span class="n">get_lines_from_points</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">Factor</span><span class="p">,</span> <span class="n">animated</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
404
-
405
- <span class="c1"># call the animator. blit=True means only re-draw the parts that have changed.</span>
406
- <span class="c1">#</span>
407
- <span class="n">anim</span> <span class="o">=</span> <span class="n">animation</span><span class="o">.</span><span class="n">FuncAnimation</span><span class="p">(</span>
408
- <span class="n">fig</span><span class="p">,</span> <span class="n">animate_line_by_line</span><span class="p">,</span> <span class="n">frames</span><span class="o">=</span><span class="nb">len</span><span class="p">(</span><span class="n">x</span><span class="p">)</span><span class="o">-</span><span class="mi">2</span><span class="p">,</span>
409
- <span class="n">interval</span><span class="o">=</span><span class="n">Interval</span><span class="p">,</span> <span class="n">blit</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">fargs</span><span class="o">=</span><span class="p">(</span><span class="n">lines</span><span class="p">,</span> <span class="n">ax</span><span class="p">)</span>
410
- <span class="p">);</span>
411
- <span class="n">plt</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
412
-
413
- <span class="k">return</span> <span class="n">anim</span>
414
- </pre></div>
415
-
416
- </div>
417
- </div>
418
- </div>
419
-
420
- </div>
421
-
422
-
423
-
424
- <div class="nbinteract-hide_in
425
- cell border-box-sizing code_cell rendered">
426
- <div class="input">
427
-
428
- <div class="inner_cell">
429
- <div class="input_area">
430
- <div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># nbi:hide_in</span>
431
-
432
- <span class="n">anim</span> <span class="o">=</span> <span class="n">line_by_line</span><span class="p">(</span><span class="n">Factor</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="n">Points</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span> <span class="n">Interval</span><span class="o">=</span><span class="mi">500</span><span class="p">)</span>
433
-
434
- <span class="n">interact</span><span class="p">(</span><span class="n">line_by_line</span><span class="p">,</span>
435
- <span class="n">Factor</span><span class="o">=</span><span class="n">Dropdown</span><span class="p">(</span>
436
- <span class="n">value</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
437
- <span class="n">options</span><span class="o">=</span><span class="p">[</span><span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="mi">8</span><span class="p">,</span> <span class="mi">10</span><span class="p">,</span> <span class="mi">16</span><span class="p">,</span> <span class="mi">20</span><span class="p">,</span> <span class="mi">21</span><span class="p">,</span> <span class="mi">25</span><span class="p">,</span> <span class="mi">26</span><span class="p">,</span> <span class="mi">34</span><span class="p">],</span>
438
- <span class="n">description</span><span class="o">=</span><span class="s1">&#39;Factor&#39;</span>
439
- <span class="p">),</span>
440
- <span class="n">Points</span><span class="o">=</span><span class="n">Dropdown</span><span class="p">(</span>
441
- <span class="n">value</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span>
442
- <span class="n">options</span><span class="o">=</span><span class="p">[</span><span class="mi">5</span><span class="p">,</span> <span class="mi">15</span><span class="p">,</span> <span class="mi">25</span><span class="p">,</span> <span class="mi">50</span><span class="p">,</span> <span class="mi">75</span><span class="p">,</span> <span class="mi">100</span><span class="p">,</span> <span class="mi">150</span><span class="p">,</span> <span class="mi">200</span><span class="p">],</span>
443
- <span class="n">description</span><span class="o">=</span><span class="s1">&#39;Points&#39;</span>
444
- <span class="p">),</span>
445
- <span class="n">Interval</span><span class="o">=</span><span class="n">Dropdown</span><span class="p">(</span>
446
- <span class="n">value</span><span class="o">=</span><span class="mi">150</span><span class="p">,</span>
447
- <span class="n">options</span><span class="o">=</span><span class="p">[</span><span class="mi">300</span><span class="p">,</span> <span class="mi">200</span><span class="p">,</span> <span class="mi">150</span><span class="p">,</span> <span class="mi">100</span><span class="p">,</span> <span class="mi">75</span><span class="p">],</span>
448
- <span class="n">description</span><span class="o">=</span><span class="s1">&#39;Delay&#39;</span>
449
- <span class="p">)</span>
450
- <span class="p">);</span>
451
- </pre></div>
452
-
453
- </div>
454
- </div>
455
- </div>
456
-
457
- <div class="output_wrapper">
458
- <div class="output">
459
-
460
-
461
- <div class="output_area">
462
-
463
-
464
-
465
-
466
-
467
- <div class="output_subarea output_widget_view ">
468
- <button class="js-nbinteract-widget">
469
- Loading widgets...
470
- </button>
471
- </div>
472
-
473
- </div>
474
-
475
- </div>
476
- </div>
477
-
478
- </div>
479
-
480
-
481
-
482
- <div class="nbinteract-hide_in
483
- cell border-box-sizing code_cell rendered">
484
- <div class="input">
485
-
486
- <div class="inner_cell">
487
- <div class="input_area">
488
- <div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># nbi:hide_in</span>
489
-
490
- <span class="n">Writer</span> <span class="o">=</span> <span class="n">animation</span><span class="o">.</span><span class="n">writers</span><span class="p">[</span><span class="s1">&#39;ffmpeg&#39;</span><span class="p">]</span>
491
- <span class="n">writer</span> <span class="o">=</span> <span class="n">Writer</span><span class="p">(</span><span class="n">fps</span><span class="o">=</span><span class="mi">30</span><span class="p">)</span>
492
-
493
- <span class="n">anim</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="s1">&#39;line_by_line.mp4&#39;</span><span class="p">,</span> <span class="n">writer</span><span class="o">=</span><span class="n">writer</span><span class="p">)</span>
494
- </pre></div>
495
-
496
- </div>
497
- </div>
498
- </div>
499
-
500
- </div>
501
- <div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
502
- <div class="text_cell_render border-box-sizing rendered_html">
503
- <h2 id="Construction-Point-by-Point">Construction Point by Point<a class="anchor-link" href="#Construction-Point-by-Point">&#182;</a></h2><p>The factor and the lines are <strong>fixed</strong> to construct the plotted image point-by-point, but each iteration <strong>increases</strong> the number of <strong>points</strong>. Try different factors (for the times table) and vary the number of points placed on the circle. Try different factors (for the times table) and vary the number of points placed on the circle.</p>
504
-
505
- </div>
506
- </div>
507
- </div>
508
-
509
-
510
-
511
- <div class="nbinteract-hide_in
512
- cell border-box-sizing code_cell rendered">
513
- <div class="input">
514
-
515
- <div class="inner_cell">
516
- <div class="input_area">
517
- <div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># nbi:hide_in</span>
518
-
519
- <span class="k">def</span> <span class="nf">animate_point_by_point</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">ax</span><span class="p">,</span> <span class="n">Factor</span><span class="p">,</span> <span class="n">Interval</span><span class="p">):</span>
520
- <span class="n">ax</span><span class="o">.</span><span class="n">cla</span><span class="p">()</span>
521
- <span class="n">ax</span><span class="o">.</span><span class="n">axis</span><span class="p">(</span><span class="s1">&#39;off&#39;</span><span class="p">)</span>
522
- <span class="n">ax</span><span class="o">.</span><span class="n">set_ylim</span><span class="p">(</span><span class="o">-</span><span class="mf">1.2</span><span class="p">,</span> <span class="mf">1.2</span><span class="p">)</span>
523
- <span class="n">ax</span><span class="o">.</span><span class="n">set_xlim</span><span class="p">(</span><span class="o">-</span><span class="mf">1.2</span><span class="p">,</span> <span class="mf">1.2</span><span class="p">)</span>
524
- <span class="n">ax</span><span class="o">.</span><span class="n">annotate</span><span class="p">(</span><span class="s2">&quot;Delay: </span><span class="si">{}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">Interval</span><span class="p">),</span> <span class="p">(</span><span class="mf">0.8</span><span class="p">,</span> <span class="mf">0.8</span><span class="p">))</span>
525
- <span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="n">points_arround_circle</span><span class="p">(</span><span class="n">number</span><span class="o">=</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span>
526
- <span class="n">plot_circle_points</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">ax</span><span class="p">)</span>
527
- <span class="n">plot_lines</span><span class="p">(</span><span class="n">x</span><span class="p">,</span><span class="n">y</span><span class="p">,</span><span class="n">Factor</span><span class="p">,</span> <span class="n">ax</span><span class="p">)</span>
528
- <span class="k">return</span> <span class="p">[]</span>
529
-
530
- <span class="k">def</span> <span class="nf">point_by_point</span><span class="p">(</span><span class="n">Factor</span><span class="p">,</span> <span class="n">Interval</span><span class="p">,</span> <span class="n">Points</span><span class="p">):</span>
531
- <span class="n">fig</span><span class="p">,</span> <span class="n">ax</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplots</span><span class="p">(</span><span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">10</span><span class="p">,</span> <span class="mi">10</span><span class="p">));</span>
532
- <span class="n">anim</span> <span class="o">=</span> <span class="n">animation</span><span class="o">.</span><span class="n">FuncAnimation</span><span class="p">(</span><span class="n">fig</span><span class="p">,</span> <span class="n">animate_point_by_point</span><span class="p">,</span> <span class="n">frames</span><span class="o">=</span><span class="n">Points</span><span class="p">,</span> <span class="n">interval</span><span class="o">=</span><span class="n">Interval</span><span class="p">,</span> <span class="n">blit</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">fargs</span><span class="o">=</span><span class="p">(</span><span class="n">ax</span><span class="p">,</span> <span class="n">Factor</span><span class="p">,</span> <span class="n">Interval</span><span class="p">));</span>
533
- <span class="n">plt</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
534
-
535
- <span class="k">return</span> <span class="n">anim</span>
536
- </pre></div>
537
-
538
- </div>
539
- </div>
540
- </div>
541
-
542
- </div>
543
-
544
-
545
-
546
- <div class="nbinteract-hide_in
547
- cell border-box-sizing code_cell rendered">
548
- <div class="input">
549
-
550
- <div class="inner_cell">
551
- <div class="input_area">
552
- <div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># nbi:hide_in</span>
553
-
554
- <span class="n">anim</span> <span class="o">=</span> <span class="n">point_by_point</span><span class="p">(</span><span class="n">Factor</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="n">Points</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span> <span class="n">Interval</span><span class="o">=</span><span class="mi">150</span><span class="p">)</span>
555
-
556
- <span class="n">interact</span><span class="p">(</span><span class="n">point_by_point</span><span class="p">,</span>
557
- <span class="n">Factor</span><span class="o">=</span><span class="n">Dropdown</span><span class="p">(</span>
558
- <span class="n">value</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
559
- <span class="n">options</span><span class="o">=</span><span class="p">[</span><span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="mi">8</span><span class="p">,</span> <span class="mi">10</span><span class="p">,</span> <span class="mi">16</span><span class="p">,</span> <span class="mi">20</span><span class="p">,</span> <span class="mi">21</span><span class="p">,</span> <span class="mi">25</span><span class="p">,</span> <span class="mi">26</span><span class="p">,</span> <span class="mi">34</span><span class="p">],</span>
560
- <span class="n">description</span><span class="o">=</span><span class="s1">&#39;Factor&#39;</span>
561
- <span class="p">),</span>
562
- <span class="n">Points</span><span class="o">=</span><span class="n">Dropdown</span><span class="p">(</span>
563
- <span class="n">value</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span>
564
- <span class="n">options</span><span class="o">=</span><span class="p">[</span><span class="mi">5</span><span class="p">,</span> <span class="mi">15</span><span class="p">,</span> <span class="mi">25</span><span class="p">,</span> <span class="mi">50</span><span class="p">,</span> <span class="mi">75</span><span class="p">,</span> <span class="mi">100</span><span class="p">,</span> <span class="mi">150</span><span class="p">,</span> <span class="mi">200</span><span class="p">],</span>
565
- <span class="n">description</span><span class="o">=</span><span class="s1">&#39;Points&#39;</span>
566
- <span class="p">),</span>
567
- <span class="n">Interval</span><span class="o">=</span><span class="n">Dropdown</span><span class="p">(</span>
568
- <span class="n">value</span><span class="o">=</span><span class="mi">150</span><span class="p">,</span>
569
- <span class="n">options</span><span class="o">=</span><span class="p">[</span><span class="mi">300</span><span class="p">,</span> <span class="mi">200</span><span class="p">,</span> <span class="mi">150</span><span class="p">,</span> <span class="mi">100</span><span class="p">,</span> <span class="mi">75</span><span class="p">],</span>
570
- <span class="n">description</span><span class="o">=</span><span class="s1">&#39;Delay&#39;</span>
571
- <span class="p">)</span>
572
- <span class="p">);</span>
573
- </pre></div>
574
-
575
- </div>
576
- </div>
577
- </div>
578
-
579
- <div class="output_wrapper">
580
- <div class="output">
581
-
582
-
583
- <div class="output_area">
584
-
585
-
586
-
587
-
588
-
589
- <div class="output_subarea output_widget_view ">
590
- <button class="js-nbinteract-widget">
591
- Loading widgets...
592
- </button>
593
- </div>
594
-
595
- </div>
596
-
597
- </div>
598
- </div>
599
-
600
- </div>
601
-
602
-
603
-
604
- <div class="nbinteract-hide_in
605
- cell border-box-sizing code_cell rendered">
606
- <div class="input">
607
-
608
- <div class="inner_cell">
609
- <div class="input_area">
610
- <div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># nbi:hide_in</span>
611
-
612
- <span class="n">Writer</span> <span class="o">=</span> <span class="n">animation</span><span class="o">.</span><span class="n">writers</span><span class="p">[</span><span class="s1">&#39;ffmpeg&#39;</span><span class="p">]</span>
613
- <span class="n">writer</span> <span class="o">=</span> <span class="n">Writer</span><span class="p">(</span><span class="n">fps</span><span class="o">=</span><span class="mi">15</span><span class="p">)</span>
614
-
615
- <span class="n">anim</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="s1">&#39;point_by_point.mp4&#39;</span><span class="p">,</span> <span class="n">writer</span><span class="o">=</span><span class="n">writer</span><span class="p">)</span>
616
- </pre></div>
617
-
618
- </div>
619
- </div>
620
- </div>
621
-
622
- </div>
623
- <div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
624
- <div class="text_cell_render border-box-sizing rendered_html">
625
- <h2 id="Construction-Factor-by-Factor">Construction Factor by Factor<a class="anchor-link" href="#Construction-Factor-by-Factor">&#182;</a></h2><p>For the animation shown in the video, the number of <strong>points</strong> on the circle is <strong>fixed</strong>. All lines are plotted simultaneously, but the factor is <strong>increased</strong> each iteration. Try different factors (for the times table) and vary the number of points placed on the circle. Try different factors (for the times table) and vary the number of points placed on the circle.</p>
626
-
627
- </div>
628
- </div>
629
- </div>
630
-
631
-
632
-
633
- <div class="nbinteract-hide_in
634
- cell border-box-sizing code_cell rendered">
635
- <div class="input">
636
-
637
- <div class="inner_cell">
638
- <div class="input_area">
639
- <div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># nbi:hide_in</span>
640
-
641
- <span class="k">def</span> <span class="nf">animate_factor_by_factor</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">ax</span><span class="p">,</span> <span class="n">Max_Points</span><span class="p">,</span> <span class="n">Interval</span><span class="p">,</span> <span class="n">frames</span><span class="p">):</span>
642
- <span class="n">ax</span><span class="o">.</span><span class="n">cla</span><span class="p">()</span>
643
- <span class="n">ax</span><span class="o">.</span><span class="n">axis</span><span class="p">(</span><span class="s1">&#39;off&#39;</span><span class="p">)</span>
644
- <span class="n">ax</span><span class="o">.</span><span class="n">set_ylim</span><span class="p">(</span><span class="o">-</span><span class="mf">1.2</span><span class="p">,</span> <span class="mf">1.2</span><span class="p">)</span>
645
- <span class="n">ax</span><span class="o">.</span><span class="n">set_xlim</span><span class="p">(</span><span class="o">-</span><span class="mf">1.2</span><span class="p">,</span> <span class="mf">1.2</span><span class="p">)</span>
646
- <span class="n">ax</span><span class="o">.</span><span class="n">annotate</span><span class="p">(</span><span class="s2">&quot;Delay: </span><span class="si">{}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">Interval</span><span class="p">),</span> <span class="p">(</span><span class="mf">0.8</span><span class="p">,</span> <span class="mf">0.8</span><span class="p">))</span>
647
- <span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="n">points_arround_circle</span><span class="p">(</span><span class="n">number</span><span class="o">=</span><span class="n">Max_Points</span><span class="p">)</span>
648
- <span class="n">plot_circle_points</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">ax</span><span class="p">)</span>
649
- <span class="n">plot_lines</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">i</span> <span class="o">/</span> <span class="mi">10</span><span class="p">,</span> <span class="n">ax</span><span class="p">)</span>
650
- <span class="k">return</span> <span class="p">[]</span>
651
-
652
- <span class="k">def</span> <span class="nf">factor_by_factor</span><span class="p">(</span><span class="n">Factor</span><span class="p">,</span> <span class="n">Interval</span><span class="p">,</span> <span class="n">Max_Points</span><span class="p">):</span>
653
- <span class="n">fig</span><span class="p">,</span> <span class="n">ax</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplots</span><span class="p">(</span><span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">10</span><span class="p">,</span> <span class="mi">10</span><span class="p">));</span>
654
- <span class="n">frames</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">Factor</span> <span class="o">*</span> <span class="mi">10</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span>
655
- <span class="n">anim</span> <span class="o">=</span> <span class="n">animation</span><span class="o">.</span><span class="n">FuncAnimation</span><span class="p">(</span><span class="n">fig</span><span class="p">,</span> <span class="n">animate_factor_by_factor</span><span class="p">,</span> <span class="n">frames</span><span class="o">=</span><span class="n">frames</span><span class="p">,</span> <span class="n">interval</span><span class="o">=</span><span class="n">Interval</span><span class="p">,</span> <span class="n">blit</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">fargs</span><span class="o">=</span><span class="p">(</span><span class="n">ax</span><span class="p">,</span> <span class="n">Max_Points</span><span class="p">,</span> <span class="n">Interval</span><span class="p">,</span> <span class="n">frames</span><span class="p">));</span>
656
-
657
- <span class="n">plt</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
658
-
659
- <span class="k">return</span> <span class="n">anim</span>
660
- </pre></div>
661
-
662
- </div>
663
- </div>
664
- </div>
665
-
666
- </div>
667
-
668
-
669
-
670
- <div class="nbinteract-hide_in
671
- cell border-box-sizing code_cell rendered">
672
- <div class="input">
673
-
674
- <div class="inner_cell">
675
- <div class="input_area">
676
- <div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># nbi:hide_in</span>
677
-
678
- <span class="n">anim</span> <span class="o">=</span> <span class="n">factor_by_factor</span><span class="p">(</span><span class="n">Factor</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="n">Max_Points</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span> <span class="n">Interval</span><span class="o">=</span><span class="mi">500</span><span class="p">)</span>
679
-
680
- <span class="n">interact</span><span class="p">(</span><span class="n">factor_by_factor</span><span class="p">,</span>
681
- <span class="n">Factor</span><span class="o">=</span><span class="n">Dropdown</span><span class="p">(</span>
682
- <span class="n">value</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
683
- <span class="n">options</span><span class="o">=</span><span class="p">[</span><span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="mi">8</span><span class="p">,</span> <span class="mi">10</span><span class="p">,</span> <span class="mi">16</span><span class="p">,</span> <span class="mi">20</span><span class="p">,</span> <span class="mi">21</span><span class="p">,</span> <span class="mi">25</span><span class="p">,</span> <span class="mi">26</span><span class="p">,</span> <span class="mi">34</span><span class="p">],</span>
684
- <span class="n">description</span><span class="o">=</span><span class="s1">&#39;Factor&#39;</span>
685
- <span class="p">),</span>
686
- <span class="n">Max_Points</span><span class="o">=</span><span class="n">Dropdown</span><span class="p">(</span>
687
- <span class="n">value</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span>
688
- <span class="n">options</span><span class="o">=</span><span class="p">[</span><span class="mi">5</span><span class="p">,</span> <span class="mi">15</span><span class="p">,</span> <span class="mi">25</span><span class="p">,</span> <span class="mi">50</span><span class="p">,</span> <span class="mi">75</span><span class="p">,</span> <span class="mi">100</span><span class="p">,</span> <span class="mi">150</span><span class="p">,</span> <span class="mi">200</span><span class="p">],</span>
689
- <span class="n">description</span><span class="o">=</span><span class="s1">&#39;Points&#39;</span>
690
- <span class="p">),</span>
691
- <span class="n">Interval</span><span class="o">=</span><span class="n">Dropdown</span><span class="p">(</span>
692
- <span class="n">value</span><span class="o">=</span><span class="mi">150</span><span class="p">,</span>
693
- <span class="n">options</span><span class="o">=</span><span class="p">[</span><span class="mi">300</span><span class="p">,</span> <span class="mi">200</span><span class="p">,</span> <span class="mi">150</span><span class="p">,</span> <span class="mi">100</span><span class="p">,</span> <span class="mi">75</span><span class="p">],</span>
694
- <span class="n">description</span><span class="o">=</span><span class="s1">&#39;Delay&#39;</span>
695
- <span class="p">)</span>
696
- <span class="p">);</span>
697
- </pre></div>
698
-
699
- </div>
700
- </div>
701
- </div>
702
-
703
- <div class="output_wrapper">
704
- <div class="output">
705
-
706
-
707
- <div class="output_area">
708
-
709
-
710
-
711
-
712
-
713
- <div class="output_subarea output_widget_view ">
714
- <button class="js-nbinteract-widget">
715
- Loading widgets...
716
- </button>
717
- </div>
718
-
719
- </div>
720
-
721
- </div>
722
- </div>
723
-
724
- </div>
725
-
726
-
727
-
728
- <div class="nbinteract-hide_in
729
- cell border-box-sizing code_cell rendered">
730
- <div class="input">
731
-
732
- <div class="inner_cell">
733
- <div class="input_area">
734
- <div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># nbi:hide_in</span>
735
-
736
- <span class="n">Writer</span> <span class="o">=</span> <span class="n">animation</span><span class="o">.</span><span class="n">writers</span><span class="p">[</span><span class="s1">&#39;ffmpeg&#39;</span><span class="p">]</span>
737
- <span class="n">writer</span> <span class="o">=</span> <span class="n">Writer</span><span class="p">(</span><span class="n">fps</span><span class="o">=</span><span class="mi">12</span><span class="p">)</span>
738
-
739
- <span class="n">anim</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="s1">&#39;factor_by_factor.mp4&#39;</span><span class="p">,</span> <span class="n">writer</span><span class="o">=</span><span class="n">writer</span><span class="p">)</span>
740
- </pre></div>
741
-
742
- </div>
743
- </div>
744
- </div>
745
-
746
- </div>
747
-
1
+ <div class="cell text_cell">
2
+ <button class="js-nbinteract-widget">
3
+ Loading widgets...
4
+ </button>
5
+ </div>
6
+
7
+
8
+
9
+ <div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
10
+ <div class="text_cell_render border-box-sizing rendered_html">
11
+ <h2 id="Mathologer">Mathologer<a class="anchor-link" href="#Mathologer">&#182;</a></h2><p>The Times Tables, Mandelbrot and the Heart of Mathematics. The good old <strong>times tables</strong> lead a very exciting secret life involving the infamous <strong>Mandelbrot</strong> set.</p>
12
+
13
+ </div>
14
+ </div>
15
+ </div>
16
+
17
+
18
+
19
+ <div class="
20
+ cell border-box-sizing code_cell rendered">
21
+ <div class="input">
22
+
23
+ <div class="inner_cell">
24
+ <div class="input_area">
25
+ <div class=" highlight hl-ipython3"><pre><span></span><span class="o">%%HTML</span>
26
+
27
+ <span class="p">&lt;</span><span class="nt">center</span><span class="p">&gt;</span>
28
+ <span class="p">&lt;</span><span class="nt">iframe</span>
29
+ <span class="na">width</span><span class="o">=</span><span class="s">&quot;900&quot;</span> <span class="na">height</span><span class="o">=</span><span class="s">&quot;540&quot;</span>
30
+ <span class="na">frameborder</span><span class="o">=</span><span class="s">&quot;0&quot;</span> <span class="na">allowfullscreen</span>
31
+ <span class="na">src</span><span class="o">=</span><span class="s">&quot;https://www.youtube.com/embed/qhbuKbxJsk8&quot;</span><span class="p">&gt;</span>
32
+ <span class="p">&lt;/</span><span class="nt">iframe</span><span class="p">&gt;</span>
33
+ <span class="p">&lt;/</span><span class="nt">center</span><span class="p">&gt;</span>
34
+ </pre></div>
35
+
36
+ </div>
37
+ </div>
38
+ </div>
39
+
40
+ <div class="output_wrapper">
41
+ <div class="output">
42
+
43
+
44
+ <div class="output_area">
45
+
46
+
47
+
48
+
49
+ <div class="output_html rendered_html output_subarea ">
50
+
51
+ <center>
52
+ <iframe
53
+ width="900" height="540"
54
+ frameborder="0" allowfullscreen
55
+ src="https://www.youtube.com/embed/qhbuKbxJsk8">
56
+ </iframe>
57
+ </center>
58
+
59
+ </div>
60
+
61
+ </div>
62
+
63
+ </div>
64
+ </div>
65
+
66
+ </div>
67
+ <div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
68
+ <div class="text_cell_render border-box-sizing rendered_html">
69
+ <h2 id="General-Imports-and-Functions">General Imports and Functions<a class="anchor-link" href="#General-Imports-and-Functions">&#182;</a></h2><p>It's a good practice to place all the imports at the top of the document to better trace dependencies and keep them updated, and also to know which tools are required. In this case there are General Purpose imports and Jupyter specifics.</p>
70
+
71
+ </div>
72
+ </div>
73
+ </div>
74
+
75
+
76
+
77
+ <div class="
78
+ cell border-box-sizing code_cell rendered">
79
+ <div class="input">
80
+
81
+ <div class="inner_cell">
82
+ <div class="input_area">
83
+ <div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># General Purpose</span>
84
+ <span class="c1">#</span>
85
+ <span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
86
+ <span class="kn">from</span> <span class="nn">matplotlib</span> <span class="kn">import</span> <span class="n">pyplot</span> <span class="k">as</span> <span class="n">plt</span>
87
+ <span class="kn">from</span> <span class="nn">matplotlib</span> <span class="kn">import</span> <span class="n">animation</span><span class="p">,</span> <span class="n">rc</span>
88
+ <span class="kn">import</span> <span class="nn">matplotlib.lines</span> <span class="k">as</span> <span class="nn">mlines</span>
89
+ <span class="kn">import</span> <span class="nn">colorsys</span>
90
+ <span class="kn">from</span> <span class="nn">matplotlib.collections</span> <span class="kn">import</span> <span class="n">LineCollection</span>
91
+
92
+ <span class="c1"># Jupyter Specifics</span>
93
+ <span class="c1">#</span>
94
+ <span class="kn">import</span> <span class="nn">matplotlib</span> <span class="k">as</span> <span class="nn">mpl</span>
95
+ <span class="kn">from</span> <span class="nn">IPython.display</span> <span class="kn">import</span> <span class="n">HTML</span>
96
+ <span class="kn">from</span> <span class="nn">ipywidgets.widgets</span> <span class="kn">import</span> <span class="n">interact</span><span class="p">,</span> <span class="n">IntSlider</span><span class="p">,</span> <span class="n">FloatSlider</span><span class="p">,</span> <span class="n">Dropdown</span><span class="p">,</span> <span class="n">Layout</span>
97
+
98
+ <span class="c1"># Some magics</span>
99
+ <span class="c1">#</span>
100
+ <span class="o">%</span><span class="k">matplotlib</span> inline
101
+ </pre></div>
102
+
103
+ </div>
104
+ </div>
105
+ </div>
106
+
107
+ </div>
108
+
109
+
110
+
111
+ <div class="nbinteract-hide_in
112
+ cell border-box-sizing code_cell rendered">
113
+ <div class="input">
114
+
115
+ <div class="inner_cell">
116
+ <div class="input_area">
117
+ <div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># nbi:hide_in</span>
118
+
119
+ <span class="c1"># The method (of the animation instances) to manage the</span>
120
+ <span class="c1"># player is controlled by the animation rc parameter.</span>
121
+ <span class="c1">#</span>
122
+ <span class="c1"># The rc parameter currently supports values of &quot;none&quot;, &quot;html5&quot;</span>
123
+ <span class="c1"># and &quot;jshtml&quot;.</span>
124
+ <span class="c1">#</span>
125
+ <span class="c1"># none: no player (display) is shown </span>
126
+ <span class="c1"># html5: use the native HTML5 player widget</span>
127
+ <span class="c1"># jshtml: use the interactive JavaScript widget</span>
128
+ <span class="c1">#</span>
129
+ <span class="c1"># The default is none to not display a player. To display</span>
130
+ <span class="c1"># the native HTML5 player, # set it to &quot;html5&quot;. For the</span>
131
+ <span class="c1"># interactive JavaScript widget to &quot;jshtml&quot;.</span>
132
+ <span class="c1">#</span>
133
+ <span class="n">rc</span><span class="p">(</span><span class="s1">&#39;animation&#39;</span><span class="p">,</span> <span class="n">html</span><span class="o">=</span><span class="s1">&#39;html5&#39;</span><span class="p">,</span> <span class="n">embed_limit</span><span class="o">=</span><span class="s1">&#39;256&#39;</span><span class="p">)</span>
134
+ <span class="c1"># rc(&#39;animation&#39;, html=&#39;jshtml&#39;, embed_limit=&#39;512&#39;)</span>
135
+ </pre></div>
136
+
137
+ </div>
138
+ </div>
139
+ </div>
140
+
141
+ </div>
142
+ <div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
143
+ <div class="text_cell_render border-box-sizing rendered_html">
144
+ <h3 id="Basic-Functions">Basic Functions<a class="anchor-link" href="#Basic-Functions">&#182;</a></h3><p>Once everything is imported and ready to use, several functions must be defined, namely:</p>
145
+ <ol>
146
+ <li>A function to calculate the points arround a circle</li>
147
+ <li>A function to generate each of the lines</li>
148
+ <li>A function to plot the labels and the point in the circle</li>
149
+ <li>A function to plot the lines in the circle</li>
150
+ </ol>
151
+ <p>The first function is called <em>points_arround_circle</em> and it basically uses polar coordinates to place a given number of points arround a circle of a given radius. Here numpy is needed to make the calculation performant.</p>
152
+
153
+ </div>
154
+ </div>
155
+ </div>
156
+
157
+
158
+
159
+ <div class="
160
+ cell border-box-sizing code_cell rendered">
161
+ <div class="input">
162
+
163
+ <div class="inner_cell">
164
+ <div class="input_area">
165
+ <div class=" highlight hl-ipython3"><pre><span></span><span class="k">def</span> <span class="nf">points_arround_circle</span><span class="p">(</span><span class="n">number</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span> <span class="n">center</span><span class="o">=</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">),</span> <span class="n">radius</span><span class="o">=</span><span class="mi">1</span><span class="p">):</span>
166
+ <span class="n">theta</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">linspace</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">2</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">pi</span> <span class="o">-</span> <span class="p">(</span><span class="mi">2</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">pi</span> <span class="o">/</span> <span class="n">number</span><span class="p">),</span> <span class="n">number</span><span class="p">)</span>
167
+ <span class="n">x</span> <span class="o">=</span> <span class="n">radius</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">cos</span><span class="p">(</span><span class="n">theta</span><span class="p">)</span>
168
+ <span class="n">y</span> <span class="o">=</span> <span class="n">radius</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sin</span><span class="p">(</span><span class="n">theta</span><span class="p">)</span>
169
+ <span class="k">return</span> <span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">)</span>
170
+ </pre></div>
171
+
172
+ </div>
173
+ </div>
174
+ </div>
175
+
176
+ </div>
177
+ <div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
178
+ <div class="text_cell_render border-box-sizing rendered_html">
179
+ <p>Second, in order to generate the lines, the list of points is given and a new line is generated by the function <em>get_lines_from_points</em>.</p>
180
+
181
+ </div>
182
+ </div>
183
+ </div>
184
+
185
+
186
+
187
+ <div class="
188
+ cell border-box-sizing code_cell rendered">
189
+ <div class="input">
190
+
191
+ <div class="inner_cell">
192
+ <div class="input_area">
193
+ <div class=" highlight hl-ipython3"><pre><span></span><span class="k">def</span> <span class="nf">get_lines_from_points</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">factor</span><span class="p">,</span> <span class="n">animated</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
194
+ <span class="n">limit</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
195
+ <span class="k">if</span> <span class="n">animated</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
196
+ <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">limit</span><span class="p">):</span>
197
+ <span class="n">x_range</span> <span class="o">=</span> <span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">x</span><span class="p">[</span><span class="nb">int</span><span class="p">(</span><span class="n">i</span> <span class="o">*</span> <span class="n">factor</span><span class="p">)</span> <span class="o">%</span> <span class="n">limit</span><span class="p">])</span>
198
+ <span class="n">y_range</span> <span class="o">=</span> <span class="p">(</span><span class="n">y</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">y</span><span class="p">[</span><span class="nb">int</span><span class="p">(</span><span class="n">i</span> <span class="o">*</span> <span class="n">factor</span><span class="p">)</span> <span class="o">%</span> <span class="n">limit</span><span class="p">])</span>
199
+ <span class="k">yield</span> <span class="n">mlines</span><span class="o">.</span><span class="n">Line2D</span><span class="p">(</span><span class="n">x_range</span><span class="p">,</span> <span class="n">y_range</span><span class="p">)</span>
200
+ <span class="k">else</span><span class="p">:</span>
201
+ <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">limit</span><span class="p">):</span>
202
+ <span class="n">start</span> <span class="o">=</span> <span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">y</span><span class="p">[</span><span class="n">i</span><span class="p">])</span>
203
+ <span class="n">index</span> <span class="o">=</span> <span class="nb">int</span><span class="p">((</span><span class="n">i</span> <span class="o">*</span> <span class="n">factor</span><span class="p">)</span> <span class="o">%</span> <span class="n">limit</span><span class="p">)</span>
204
+ <span class="n">end</span> <span class="o">=</span> <span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="n">index</span><span class="p">],</span> <span class="n">y</span><span class="p">[</span><span class="n">index</span><span class="p">])</span>
205
+ <span class="k">yield</span> <span class="n">end</span><span class="p">,</span> <span class="n">start</span>
206
+ </pre></div>
207
+
208
+ </div>
209
+ </div>
210
+ </div>
211
+
212
+ </div>
213
+ <div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
214
+ <div class="text_cell_render border-box-sizing rendered_html">
215
+ <p>Now it's time to plot the point around the circle by <em>plot_circle_points</em>. Both in the circle, the points and the labels are plotted.</p>
216
+
217
+ </div>
218
+ </div>
219
+ </div>
220
+
221
+
222
+
223
+ <div class="
224
+ cell border-box-sizing code_cell rendered">
225
+ <div class="input">
226
+
227
+ <div class="inner_cell">
228
+ <div class="input_area">
229
+ <div class=" highlight hl-ipython3"><pre><span></span><span class="k">def</span> <span class="nf">plot_circle_points</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">ax</span><span class="p">,</span> <span class="n">labels</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
230
+ <span class="n">ax</span><span class="o">.</span><span class="n">annotate</span><span class="p">(</span><span class="s2">&quot;Points: </span><span class="si">{}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">x</span><span class="p">)),</span> <span class="p">(</span><span class="mf">0.8</span><span class="p">,</span> <span class="mf">0.9</span><span class="p">))</span>
231
+ <span class="n">ax</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="s2">&quot;-ko&quot;</span><span class="p">,</span> <span class="n">markevery</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
232
+ <span class="k">if</span> <span class="ow">not</span> <span class="n">labels</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
233
+ <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">)</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="nb">zip</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">)):</span>
234
+ <span class="n">ax</span><span class="o">.</span><span class="n">annotate</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">))</span>
235
+ </pre></div>
236
+
237
+ </div>
238
+ </div>
239
+ </div>
240
+
241
+ </div>
242
+ <div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
243
+ <div class="text_cell_render border-box-sizing rendered_html">
244
+ <p>Finally, a function <em>plot_lines</em> which receives the axis object to plot all the lines. With the option (if given), a color for the lines in a HSV format is calculated.</p>
245
+
246
+ </div>
247
+ </div>
248
+ </div>
249
+
250
+
251
+
252
+ <div class="
253
+ cell border-box-sizing code_cell rendered">
254
+ <div class="input">
255
+
256
+ <div class="inner_cell">
257
+ <div class="input_area">
258
+ <div class=" highlight hl-ipython3"><pre><span></span><span class="k">def</span> <span class="nf">plot_lines</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">factor</span><span class="p">,</span> <span class="n">ax</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
259
+ <span class="n">ax</span><span class="o">.</span><span class="n">annotate</span><span class="p">(</span><span class="s2">&quot;Factor: </span><span class="si">{}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">factor</span><span class="p">),</span> <span class="p">(</span><span class="mf">0.8</span><span class="p">,</span> <span class="mi">1</span><span class="p">))</span>
260
+ <span class="n">lines</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">get_lines_from_points</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">factor</span><span class="p">))</span>
261
+ <span class="k">if</span> <span class="n">color</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
262
+ <span class="n">line_segments</span> <span class="o">=</span> <span class="n">LineCollection</span><span class="p">(</span><span class="n">lines</span><span class="p">)</span>
263
+ <span class="k">else</span><span class="p">:</span>
264
+ <span class="n">line_segments</span> <span class="o">=</span> <span class="n">LineCollection</span><span class="p">(</span><span class="n">lines</span><span class="p">,</span> <span class="n">colors</span><span class="o">=</span><span class="n">colorsys</span><span class="o">.</span><span class="n">hsv_to_rgb</span><span class="p">(</span><span class="n">color</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">,</span> <span class="mf">0.8</span><span class="p">))</span>
265
+
266
+ <span class="n">ax</span><span class="o">.</span><span class="n">add_collection</span><span class="p">(</span><span class="n">line_segments</span><span class="p">)</span>
267
+ </pre></div>
268
+
269
+ </div>
270
+ </div>
271
+ </div>
272
+
273
+ </div>
274
+ <div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
275
+ <div class="text_cell_render border-box-sizing rendered_html">
276
+ <h2 id="Create-a-static-plot">Create a static plot<a class="anchor-link" href="#Create-a-static-plot">&#182;</a></h2><p>After all the functions needed are defined, now plotting is quite simple. Just generate the axis object and invoke the functions in the logical order, and you get the image.</p>
277
+ <p>One approach is manually changing the factor and points variables and then executing the plot. Since Jupyter provides support for <strong>interaction</strong>, a more user-friendly approach can be used. Change the image by moving the <strong>sliders</strong> to either side.</p>
278
+
279
+ </div>
280
+ </div>
281
+ </div>
282
+
283
+
284
+
285
+ <div class="
286
+ cell border-box-sizing code_cell rendered">
287
+ <div class="input">
288
+
289
+ <div class="inner_cell">
290
+ <div class="input_area">
291
+ <div class=" highlight hl-ipython3"><pre><span></span><span class="k">def</span> <span class="nf">plot_parametric</span><span class="p">(</span><span class="n">Factor</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="n">Points</span><span class="o">=</span><span class="mi">100</span><span class="p">):</span>
292
+ <span class="n">plt</span><span class="o">.</span><span class="n">figure</span><span class="p">(</span><span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">10</span><span class="p">,</span> <span class="mi">10</span><span class="p">))</span>
293
+ <span class="n">ax</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplot</span><span class="p">()</span>
294
+ <span class="n">plt</span><span class="o">.</span><span class="n">axis</span><span class="p">(</span><span class="s1">&#39;off&#39;</span><span class="p">)</span>
295
+ <span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="n">points_arround_circle</span><span class="p">(</span><span class="n">number</span><span class="o">=</span><span class="n">Points</span><span class="p">)</span>
296
+ <span class="n">plot_circle_points</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">ax</span><span class="p">)</span>
297
+ <span class="n">plot_lines</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">Factor</span><span class="p">,</span> <span class="n">ax</span><span class="p">)</span>
298
+ <span class="n">plt</span><span class="o">.</span><span class="n">show</span><span class="p">()</span>
299
+
300
+ <span class="n">factors</span> <span class="o">=</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="mi">8</span><span class="p">,</span> <span class="mi">10</span><span class="p">,</span> <span class="mi">16</span><span class="p">,</span> <span class="mi">20</span><span class="p">,</span> <span class="mi">21</span><span class="p">,</span> <span class="mi">25</span><span class="p">,</span> <span class="mi">26</span><span class="p">,</span> <span class="mi">34</span>
301
+ <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">Try these Factors with different number of Points:</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">,</span> <span class="o">*</span><span class="n">factors</span><span class="p">,</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">)</span>
302
+ </pre></div>
303
+
304
+ </div>
305
+ </div>
306
+ </div>
307
+
308
+ <div class="output_wrapper">
309
+ <div class="output">
310
+
311
+
312
+ <div class="output_area">
313
+
314
+
315
+
316
+ <div class="output_subarea output_stream output_stdout output_text">
317
+ <pre>
318
+ Try these Factors with different number of Points:
319
+ 2 3 4 5 8 10 16 20 21 25 26 34
320
+
321
+ </pre>
322
+ </div>
323
+ </div>
324
+
325
+ </div>
326
+ </div>
327
+
328
+ </div>
329
+
330
+
331
+
332
+ <div class="nbinteract-hide_in
333
+ cell border-box-sizing code_cell rendered">
334
+ <div class="input">
335
+
336
+ <div class="inner_cell">
337
+ <div class="input_area">
338
+ <div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># nbi:hide_in</span>
339
+
340
+ <span class="n">interact</span><span class="p">(</span><span class="n">plot_parametric</span><span class="p">,</span>
341
+ <span class="n">Factor</span><span class="o">=</span><span class="n">IntSlider</span><span class="p">(</span><span class="nb">min</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="nb">max</span><span class="o">=</span><span class="mi">34</span><span class="p">,</span> <span class="n">step</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">value</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="n">layout</span><span class="o">=</span><span class="n">Layout</span><span class="p">(</span><span class="n">width</span><span class="o">=</span><span class="s1">&#39;90%&#39;</span><span class="p">)),</span>
342
+ <span class="n">Points</span><span class="o">=</span><span class="n">IntSlider</span><span class="p">(</span><span class="nb">min</span><span class="o">=</span><span class="mi">25</span><span class="p">,</span> <span class="nb">max</span><span class="o">=</span><span class="mi">200</span><span class="p">,</span> <span class="n">step</span><span class="o">=</span><span class="mi">5</span><span class="p">,</span> <span class="n">value</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span> <span class="n">layout</span><span class="o">=</span><span class="n">Layout</span><span class="p">(</span><span class="n">width</span><span class="o">=</span><span class="s1">&#39;90%&#39;</span><span class="p">)));</span>
343
+
344
+ </pre></div>
345
+
346
+ </div>
347
+ </div>
348
+ </div>
349
+
350
+ <div class="output_wrapper">
351
+ <div class="output">
352
+
353
+
354
+ <div class="output_area">
355
+
356
+
357
+
358
+
359
+
360
+ <div class="output_subarea output_widget_view ">
361
+ <button class="js-nbinteract-widget">
362
+ Loading widgets...
363
+ </button>
364
+ </div>
365
+
366
+ </div>
367
+
368
+ </div>
369
+ </div>
370
+
371
+ </div>
372
+ <div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
373
+ <div class="text_cell_render border-box-sizing rendered_html">
374
+ <h2 id="Construction-Line-by-Line">Construction Line by Line<a class="anchor-link" href="#Construction-Line-by-Line">&#182;</a></h2><p>The factor and the number of points is fixed for the plot by your selection, but each <strong>line</strong> is plotted per iteration. Try different factors (for the times table) and vary the number of points placed on the circle.</p>
375
+
376
+ </div>
377
+ </div>
378
+ </div>
379
+
380
+
381
+
382
+ <div class="nbinteract-hide_in
383
+ cell border-box-sizing code_cell rendered">
384
+ <div class="input">
385
+
386
+ <div class="inner_cell">
387
+ <div class="input_area">
388
+ <div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># nbi:hide_in</span>
389
+
390
+ <span class="c1"># animation function. This is called sequentially.</span>
391
+ <span class="c1">#</span>
392
+ <span class="k">def</span> <span class="nf">animate_line_by_line</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">lines</span><span class="p">,</span> <span class="n">ax</span><span class="p">):</span>
393
+ <span class="n">ax</span><span class="o">.</span><span class="n">add_line</span><span class="p">(</span><span class="nb">next</span><span class="p">(</span><span class="n">lines</span><span class="p">))</span>
394
+ <span class="k">return</span> <span class="p">[]</span>
395
+
396
+ <span class="k">def</span> <span class="nf">line_by_line</span><span class="p">(</span><span class="n">Factor</span><span class="p">,</span> <span class="n">Points</span><span class="p">,</span> <span class="n">Interval</span><span class="p">):</span>
397
+ <span class="n">fig</span><span class="p">,</span> <span class="n">ax</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplots</span><span class="p">(</span><span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">10</span><span class="p">,</span> <span class="mi">10</span><span class="p">));</span>
398
+ <span class="n">plt</span><span class="o">.</span><span class="n">axis</span><span class="p">(</span><span class="s1">&#39;off&#39;</span><span class="p">)</span>
399
+ <span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="n">points_arround_circle</span><span class="p">(</span><span class="n">number</span><span class="o">=</span><span class="n">Points</span><span class="p">)</span>
400
+ <span class="n">plot_circle_points</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">ax</span><span class="p">)</span>
401
+ <span class="n">ax</span><span class="o">.</span><span class="n">annotate</span><span class="p">(</span><span class="s2">&quot;Factor: </span><span class="si">{}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">Factor</span><span class="p">),</span> <span class="p">(</span><span class="mf">0.8</span><span class="p">,</span> <span class="mi">1</span><span class="p">))</span>
402
+ <span class="n">ax</span><span class="o">.</span><span class="n">annotate</span><span class="p">(</span><span class="s2">&quot;Delay: </span><span class="si">{}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">Interval</span><span class="p">),</span> <span class="p">(</span><span class="mf">0.8</span><span class="p">,</span> <span class="mf">0.8</span><span class="p">))</span>
403
+ <span class="n">lines</span> <span class="o">=</span> <span class="n">get_lines_from_points</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">Factor</span><span class="p">,</span> <span class="n">animated</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
404
+
405
+ <span class="c1"># call the animator. blit=True means only re-draw the parts that have changed.</span>
406
+ <span class="c1">#</span>
407
+ <span class="n">anim</span> <span class="o">=</span> <span class="n">animation</span><span class="o">.</span><span class="n">FuncAnimation</span><span class="p">(</span>
408
+ <span class="n">fig</span><span class="p">,</span> <span class="n">animate_line_by_line</span><span class="p">,</span> <span class="n">frames</span><span class="o">=</span><span class="nb">len</span><span class="p">(</span><span class="n">x</span><span class="p">)</span><span class="o">-</span><span class="mi">2</span><span class="p">,</span>
409
+ <span class="n">interval</span><span class="o">=</span><span class="n">Interval</span><span class="p">,</span> <span class="n">blit</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">fargs</span><span class="o">=</span><span class="p">(</span><span class="n">lines</span><span class="p">,</span> <span class="n">ax</span><span class="p">)</span>
410
+ <span class="p">);</span>
411
+ <span class="n">plt</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
412
+
413
+ <span class="k">return</span> <span class="n">anim</span>
414
+ </pre></div>
415
+
416
+ </div>
417
+ </div>
418
+ </div>
419
+
420
+ </div>
421
+
422
+
423
+
424
+ <div class="nbinteract-hide_in
425
+ cell border-box-sizing code_cell rendered">
426
+ <div class="input">
427
+
428
+ <div class="inner_cell">
429
+ <div class="input_area">
430
+ <div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># nbi:hide_in</span>
431
+
432
+ <span class="n">anim</span> <span class="o">=</span> <span class="n">line_by_line</span><span class="p">(</span><span class="n">Factor</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="n">Points</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span> <span class="n">Interval</span><span class="o">=</span><span class="mi">500</span><span class="p">)</span>
433
+
434
+ <span class="n">interact</span><span class="p">(</span><span class="n">line_by_line</span><span class="p">,</span>
435
+ <span class="n">Factor</span><span class="o">=</span><span class="n">Dropdown</span><span class="p">(</span>
436
+ <span class="n">value</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
437
+ <span class="n">options</span><span class="o">=</span><span class="p">[</span><span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="mi">8</span><span class="p">,</span> <span class="mi">10</span><span class="p">,</span> <span class="mi">16</span><span class="p">,</span> <span class="mi">20</span><span class="p">,</span> <span class="mi">21</span><span class="p">,</span> <span class="mi">25</span><span class="p">,</span> <span class="mi">26</span><span class="p">,</span> <span class="mi">34</span><span class="p">],</span>
438
+ <span class="n">description</span><span class="o">=</span><span class="s1">&#39;Factor&#39;</span>
439
+ <span class="p">),</span>
440
+ <span class="n">Points</span><span class="o">=</span><span class="n">Dropdown</span><span class="p">(</span>
441
+ <span class="n">value</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span>
442
+ <span class="n">options</span><span class="o">=</span><span class="p">[</span><span class="mi">5</span><span class="p">,</span> <span class="mi">15</span><span class="p">,</span> <span class="mi">25</span><span class="p">,</span> <span class="mi">50</span><span class="p">,</span> <span class="mi">75</span><span class="p">,</span> <span class="mi">100</span><span class="p">,</span> <span class="mi">150</span><span class="p">,</span> <span class="mi">200</span><span class="p">],</span>
443
+ <span class="n">description</span><span class="o">=</span><span class="s1">&#39;Points&#39;</span>
444
+ <span class="p">),</span>
445
+ <span class="n">Interval</span><span class="o">=</span><span class="n">Dropdown</span><span class="p">(</span>
446
+ <span class="n">value</span><span class="o">=</span><span class="mi">150</span><span class="p">,</span>
447
+ <span class="n">options</span><span class="o">=</span><span class="p">[</span><span class="mi">300</span><span class="p">,</span> <span class="mi">200</span><span class="p">,</span> <span class="mi">150</span><span class="p">,</span> <span class="mi">100</span><span class="p">,</span> <span class="mi">75</span><span class="p">],</span>
448
+ <span class="n">description</span><span class="o">=</span><span class="s1">&#39;Delay&#39;</span>
449
+ <span class="p">)</span>
450
+ <span class="p">);</span>
451
+ </pre></div>
452
+
453
+ </div>
454
+ </div>
455
+ </div>
456
+
457
+ <div class="output_wrapper">
458
+ <div class="output">
459
+
460
+
461
+ <div class="output_area">
462
+
463
+
464
+
465
+
466
+
467
+ <div class="output_subarea output_widget_view ">
468
+ <button class="js-nbinteract-widget">
469
+ Loading widgets...
470
+ </button>
471
+ </div>
472
+
473
+ </div>
474
+
475
+ </div>
476
+ </div>
477
+
478
+ </div>
479
+
480
+
481
+
482
+ <div class="nbinteract-hide_in
483
+ cell border-box-sizing code_cell rendered">
484
+ <div class="input">
485
+
486
+ <div class="inner_cell">
487
+ <div class="input_area">
488
+ <div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># nbi:hide_in</span>
489
+
490
+ <span class="n">Writer</span> <span class="o">=</span> <span class="n">animation</span><span class="o">.</span><span class="n">writers</span><span class="p">[</span><span class="s1">&#39;ffmpeg&#39;</span><span class="p">]</span>
491
+ <span class="n">writer</span> <span class="o">=</span> <span class="n">Writer</span><span class="p">(</span><span class="n">fps</span><span class="o">=</span><span class="mi">30</span><span class="p">)</span>
492
+
493
+ <span class="n">anim</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="s1">&#39;line_by_line.mp4&#39;</span><span class="p">,</span> <span class="n">writer</span><span class="o">=</span><span class="n">writer</span><span class="p">)</span>
494
+ </pre></div>
495
+
496
+ </div>
497
+ </div>
498
+ </div>
499
+
500
+ </div>
501
+ <div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
502
+ <div class="text_cell_render border-box-sizing rendered_html">
503
+ <h2 id="Construction-Point-by-Point">Construction Point by Point<a class="anchor-link" href="#Construction-Point-by-Point">&#182;</a></h2><p>The factor and the lines are <strong>fixed</strong> to construct the plotted image point-by-point, but each iteration <strong>increases</strong> the number of <strong>points</strong>. Try different factors (for the times table) and vary the number of points placed on the circle. Try different factors (for the times table) and vary the number of points placed on the circle.</p>
504
+
505
+ </div>
506
+ </div>
507
+ </div>
508
+
509
+
510
+
511
+ <div class="nbinteract-hide_in
512
+ cell border-box-sizing code_cell rendered">
513
+ <div class="input">
514
+
515
+ <div class="inner_cell">
516
+ <div class="input_area">
517
+ <div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># nbi:hide_in</span>
518
+
519
+ <span class="k">def</span> <span class="nf">animate_point_by_point</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">ax</span><span class="p">,</span> <span class="n">Factor</span><span class="p">,</span> <span class="n">Interval</span><span class="p">):</span>
520
+ <span class="n">ax</span><span class="o">.</span><span class="n">cla</span><span class="p">()</span>
521
+ <span class="n">ax</span><span class="o">.</span><span class="n">axis</span><span class="p">(</span><span class="s1">&#39;off&#39;</span><span class="p">)</span>
522
+ <span class="n">ax</span><span class="o">.</span><span class="n">set_ylim</span><span class="p">(</span><span class="o">-</span><span class="mf">1.2</span><span class="p">,</span> <span class="mf">1.2</span><span class="p">)</span>
523
+ <span class="n">ax</span><span class="o">.</span><span class="n">set_xlim</span><span class="p">(</span><span class="o">-</span><span class="mf">1.2</span><span class="p">,</span> <span class="mf">1.2</span><span class="p">)</span>
524
+ <span class="n">ax</span><span class="o">.</span><span class="n">annotate</span><span class="p">(</span><span class="s2">&quot;Delay: </span><span class="si">{}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">Interval</span><span class="p">),</span> <span class="p">(</span><span class="mf">0.8</span><span class="p">,</span> <span class="mf">0.8</span><span class="p">))</span>
525
+ <span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="n">points_arround_circle</span><span class="p">(</span><span class="n">number</span><span class="o">=</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span>
526
+ <span class="n">plot_circle_points</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">ax</span><span class="p">)</span>
527
+ <span class="n">plot_lines</span><span class="p">(</span><span class="n">x</span><span class="p">,</span><span class="n">y</span><span class="p">,</span><span class="n">Factor</span><span class="p">,</span> <span class="n">ax</span><span class="p">)</span>
528
+ <span class="k">return</span> <span class="p">[]</span>
529
+
530
+ <span class="k">def</span> <span class="nf">point_by_point</span><span class="p">(</span><span class="n">Factor</span><span class="p">,</span> <span class="n">Interval</span><span class="p">,</span> <span class="n">Points</span><span class="p">):</span>
531
+ <span class="n">fig</span><span class="p">,</span> <span class="n">ax</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplots</span><span class="p">(</span><span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">10</span><span class="p">,</span> <span class="mi">10</span><span class="p">));</span>
532
+ <span class="n">anim</span> <span class="o">=</span> <span class="n">animation</span><span class="o">.</span><span class="n">FuncAnimation</span><span class="p">(</span><span class="n">fig</span><span class="p">,</span> <span class="n">animate_point_by_point</span><span class="p">,</span> <span class="n">frames</span><span class="o">=</span><span class="n">Points</span><span class="p">,</span> <span class="n">interval</span><span class="o">=</span><span class="n">Interval</span><span class="p">,</span> <span class="n">blit</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">fargs</span><span class="o">=</span><span class="p">(</span><span class="n">ax</span><span class="p">,</span> <span class="n">Factor</span><span class="p">,</span> <span class="n">Interval</span><span class="p">));</span>
533
+ <span class="n">plt</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
534
+
535
+ <span class="k">return</span> <span class="n">anim</span>
536
+ </pre></div>
537
+
538
+ </div>
539
+ </div>
540
+ </div>
541
+
542
+ </div>
543
+
544
+
545
+
546
+ <div class="nbinteract-hide_in
547
+ cell border-box-sizing code_cell rendered">
548
+ <div class="input">
549
+
550
+ <div class="inner_cell">
551
+ <div class="input_area">
552
+ <div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># nbi:hide_in</span>
553
+
554
+ <span class="n">anim</span> <span class="o">=</span> <span class="n">point_by_point</span><span class="p">(</span><span class="n">Factor</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="n">Points</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span> <span class="n">Interval</span><span class="o">=</span><span class="mi">150</span><span class="p">)</span>
555
+
556
+ <span class="n">interact</span><span class="p">(</span><span class="n">point_by_point</span><span class="p">,</span>
557
+ <span class="n">Factor</span><span class="o">=</span><span class="n">Dropdown</span><span class="p">(</span>
558
+ <span class="n">value</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
559
+ <span class="n">options</span><span class="o">=</span><span class="p">[</span><span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="mi">8</span><span class="p">,</span> <span class="mi">10</span><span class="p">,</span> <span class="mi">16</span><span class="p">,</span> <span class="mi">20</span><span class="p">,</span> <span class="mi">21</span><span class="p">,</span> <span class="mi">25</span><span class="p">,</span> <span class="mi">26</span><span class="p">,</span> <span class="mi">34</span><span class="p">],</span>
560
+ <span class="n">description</span><span class="o">=</span><span class="s1">&#39;Factor&#39;</span>
561
+ <span class="p">),</span>
562
+ <span class="n">Points</span><span class="o">=</span><span class="n">Dropdown</span><span class="p">(</span>
563
+ <span class="n">value</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span>
564
+ <span class="n">options</span><span class="o">=</span><span class="p">[</span><span class="mi">5</span><span class="p">,</span> <span class="mi">15</span><span class="p">,</span> <span class="mi">25</span><span class="p">,</span> <span class="mi">50</span><span class="p">,</span> <span class="mi">75</span><span class="p">,</span> <span class="mi">100</span><span class="p">,</span> <span class="mi">150</span><span class="p">,</span> <span class="mi">200</span><span class="p">],</span>
565
+ <span class="n">description</span><span class="o">=</span><span class="s1">&#39;Points&#39;</span>
566
+ <span class="p">),</span>
567
+ <span class="n">Interval</span><span class="o">=</span><span class="n">Dropdown</span><span class="p">(</span>
568
+ <span class="n">value</span><span class="o">=</span><span class="mi">150</span><span class="p">,</span>
569
+ <span class="n">options</span><span class="o">=</span><span class="p">[</span><span class="mi">300</span><span class="p">,</span> <span class="mi">200</span><span class="p">,</span> <span class="mi">150</span><span class="p">,</span> <span class="mi">100</span><span class="p">,</span> <span class="mi">75</span><span class="p">],</span>
570
+ <span class="n">description</span><span class="o">=</span><span class="s1">&#39;Delay&#39;</span>
571
+ <span class="p">)</span>
572
+ <span class="p">);</span>
573
+ </pre></div>
574
+
575
+ </div>
576
+ </div>
577
+ </div>
578
+
579
+ <div class="output_wrapper">
580
+ <div class="output">
581
+
582
+
583
+ <div class="output_area">
584
+
585
+
586
+
587
+
588
+
589
+ <div class="output_subarea output_widget_view ">
590
+ <button class="js-nbinteract-widget">
591
+ Loading widgets...
592
+ </button>
593
+ </div>
594
+
595
+ </div>
596
+
597
+ </div>
598
+ </div>
599
+
600
+ </div>
601
+
602
+
603
+
604
+ <div class="nbinteract-hide_in
605
+ cell border-box-sizing code_cell rendered">
606
+ <div class="input">
607
+
608
+ <div class="inner_cell">
609
+ <div class="input_area">
610
+ <div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># nbi:hide_in</span>
611
+
612
+ <span class="n">Writer</span> <span class="o">=</span> <span class="n">animation</span><span class="o">.</span><span class="n">writers</span><span class="p">[</span><span class="s1">&#39;ffmpeg&#39;</span><span class="p">]</span>
613
+ <span class="n">writer</span> <span class="o">=</span> <span class="n">Writer</span><span class="p">(</span><span class="n">fps</span><span class="o">=</span><span class="mi">15</span><span class="p">)</span>
614
+
615
+ <span class="n">anim</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="s1">&#39;point_by_point.mp4&#39;</span><span class="p">,</span> <span class="n">writer</span><span class="o">=</span><span class="n">writer</span><span class="p">)</span>
616
+ </pre></div>
617
+
618
+ </div>
619
+ </div>
620
+ </div>
621
+
622
+ </div>
623
+ <div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
624
+ <div class="text_cell_render border-box-sizing rendered_html">
625
+ <h2 id="Construction-Factor-by-Factor">Construction Factor by Factor<a class="anchor-link" href="#Construction-Factor-by-Factor">&#182;</a></h2><p>For the animation shown in the video, the number of <strong>points</strong> on the circle is <strong>fixed</strong>. All lines are plotted simultaneously, but the factor is <strong>increased</strong> each iteration. Try different factors (for the times table) and vary the number of points placed on the circle. Try different factors (for the times table) and vary the number of points placed on the circle.</p>
626
+
627
+ </div>
628
+ </div>
629
+ </div>
630
+
631
+
632
+
633
+ <div class="nbinteract-hide_in
634
+ cell border-box-sizing code_cell rendered">
635
+ <div class="input">
636
+
637
+ <div class="inner_cell">
638
+ <div class="input_area">
639
+ <div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># nbi:hide_in</span>
640
+
641
+ <span class="k">def</span> <span class="nf">animate_factor_by_factor</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">ax</span><span class="p">,</span> <span class="n">Max_Points</span><span class="p">,</span> <span class="n">Interval</span><span class="p">,</span> <span class="n">frames</span><span class="p">):</span>
642
+ <span class="n">ax</span><span class="o">.</span><span class="n">cla</span><span class="p">()</span>
643
+ <span class="n">ax</span><span class="o">.</span><span class="n">axis</span><span class="p">(</span><span class="s1">&#39;off&#39;</span><span class="p">)</span>
644
+ <span class="n">ax</span><span class="o">.</span><span class="n">set_ylim</span><span class="p">(</span><span class="o">-</span><span class="mf">1.2</span><span class="p">,</span> <span class="mf">1.2</span><span class="p">)</span>
645
+ <span class="n">ax</span><span class="o">.</span><span class="n">set_xlim</span><span class="p">(</span><span class="o">-</span><span class="mf">1.2</span><span class="p">,</span> <span class="mf">1.2</span><span class="p">)</span>
646
+ <span class="n">ax</span><span class="o">.</span><span class="n">annotate</span><span class="p">(</span><span class="s2">&quot;Delay: </span><span class="si">{}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">Interval</span><span class="p">),</span> <span class="p">(</span><span class="mf">0.8</span><span class="p">,</span> <span class="mf">0.8</span><span class="p">))</span>
647
+ <span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="n">points_arround_circle</span><span class="p">(</span><span class="n">number</span><span class="o">=</span><span class="n">Max_Points</span><span class="p">)</span>
648
+ <span class="n">plot_circle_points</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">ax</span><span class="p">)</span>
649
+ <span class="n">plot_lines</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">i</span> <span class="o">/</span> <span class="mi">10</span><span class="p">,</span> <span class="n">ax</span><span class="p">)</span>
650
+ <span class="k">return</span> <span class="p">[]</span>
651
+
652
+ <span class="k">def</span> <span class="nf">factor_by_factor</span><span class="p">(</span><span class="n">Factor</span><span class="p">,</span> <span class="n">Interval</span><span class="p">,</span> <span class="n">Max_Points</span><span class="p">):</span>
653
+ <span class="n">fig</span><span class="p">,</span> <span class="n">ax</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplots</span><span class="p">(</span><span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">10</span><span class="p">,</span> <span class="mi">10</span><span class="p">));</span>
654
+ <span class="n">frames</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">Factor</span> <span class="o">*</span> <span class="mi">10</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span>
655
+ <span class="n">anim</span> <span class="o">=</span> <span class="n">animation</span><span class="o">.</span><span class="n">FuncAnimation</span><span class="p">(</span><span class="n">fig</span><span class="p">,</span> <span class="n">animate_factor_by_factor</span><span class="p">,</span> <span class="n">frames</span><span class="o">=</span><span class="n">frames</span><span class="p">,</span> <span class="n">interval</span><span class="o">=</span><span class="n">Interval</span><span class="p">,</span> <span class="n">blit</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">fargs</span><span class="o">=</span><span class="p">(</span><span class="n">ax</span><span class="p">,</span> <span class="n">Max_Points</span><span class="p">,</span> <span class="n">Interval</span><span class="p">,</span> <span class="n">frames</span><span class="p">));</span>
656
+
657
+ <span class="n">plt</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
658
+
659
+ <span class="k">return</span> <span class="n">anim</span>
660
+ </pre></div>
661
+
662
+ </div>
663
+ </div>
664
+ </div>
665
+
666
+ </div>
667
+
668
+
669
+
670
+ <div class="nbinteract-hide_in
671
+ cell border-box-sizing code_cell rendered">
672
+ <div class="input">
673
+
674
+ <div class="inner_cell">
675
+ <div class="input_area">
676
+ <div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># nbi:hide_in</span>
677
+
678
+ <span class="n">anim</span> <span class="o">=</span> <span class="n">factor_by_factor</span><span class="p">(</span><span class="n">Factor</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="n">Max_Points</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span> <span class="n">Interval</span><span class="o">=</span><span class="mi">500</span><span class="p">)</span>
679
+
680
+ <span class="n">interact</span><span class="p">(</span><span class="n">factor_by_factor</span><span class="p">,</span>
681
+ <span class="n">Factor</span><span class="o">=</span><span class="n">Dropdown</span><span class="p">(</span>
682
+ <span class="n">value</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
683
+ <span class="n">options</span><span class="o">=</span><span class="p">[</span><span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="mi">8</span><span class="p">,</span> <span class="mi">10</span><span class="p">,</span> <span class="mi">16</span><span class="p">,</span> <span class="mi">20</span><span class="p">,</span> <span class="mi">21</span><span class="p">,</span> <span class="mi">25</span><span class="p">,</span> <span class="mi">26</span><span class="p">,</span> <span class="mi">34</span><span class="p">],</span>
684
+ <span class="n">description</span><span class="o">=</span><span class="s1">&#39;Factor&#39;</span>
685
+ <span class="p">),</span>
686
+ <span class="n">Max_Points</span><span class="o">=</span><span class="n">Dropdown</span><span class="p">(</span>
687
+ <span class="n">value</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span>
688
+ <span class="n">options</span><span class="o">=</span><span class="p">[</span><span class="mi">5</span><span class="p">,</span> <span class="mi">15</span><span class="p">,</span> <span class="mi">25</span><span class="p">,</span> <span class="mi">50</span><span class="p">,</span> <span class="mi">75</span><span class="p">,</span> <span class="mi">100</span><span class="p">,</span> <span class="mi">150</span><span class="p">,</span> <span class="mi">200</span><span class="p">],</span>
689
+ <span class="n">description</span><span class="o">=</span><span class="s1">&#39;Points&#39;</span>
690
+ <span class="p">),</span>
691
+ <span class="n">Interval</span><span class="o">=</span><span class="n">Dropdown</span><span class="p">(</span>
692
+ <span class="n">value</span><span class="o">=</span><span class="mi">150</span><span class="p">,</span>
693
+ <span class="n">options</span><span class="o">=</span><span class="p">[</span><span class="mi">300</span><span class="p">,</span> <span class="mi">200</span><span class="p">,</span> <span class="mi">150</span><span class="p">,</span> <span class="mi">100</span><span class="p">,</span> <span class="mi">75</span><span class="p">],</span>
694
+ <span class="n">description</span><span class="o">=</span><span class="s1">&#39;Delay&#39;</span>
695
+ <span class="p">)</span>
696
+ <span class="p">);</span>
697
+ </pre></div>
698
+
699
+ </div>
700
+ </div>
701
+ </div>
702
+
703
+ <div class="output_wrapper">
704
+ <div class="output">
705
+
706
+
707
+ <div class="output_area">
708
+
709
+
710
+
711
+
712
+
713
+ <div class="output_subarea output_widget_view ">
714
+ <button class="js-nbinteract-widget">
715
+ Loading widgets...
716
+ </button>
717
+ </div>
718
+
719
+ </div>
720
+
721
+ </div>
722
+ </div>
723
+
724
+ </div>
725
+
726
+
727
+
728
+ <div class="nbinteract-hide_in
729
+ cell border-box-sizing code_cell rendered">
730
+ <div class="input">
731
+
732
+ <div class="inner_cell">
733
+ <div class="input_area">
734
+ <div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># nbi:hide_in</span>
735
+
736
+ <span class="n">Writer</span> <span class="o">=</span> <span class="n">animation</span><span class="o">.</span><span class="n">writers</span><span class="p">[</span><span class="s1">&#39;ffmpeg&#39;</span><span class="p">]</span>
737
+ <span class="n">writer</span> <span class="o">=</span> <span class="n">Writer</span><span class="p">(</span><span class="n">fps</span><span class="o">=</span><span class="mi">12</span><span class="p">)</span>
738
+
739
+ <span class="n">anim</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="s1">&#39;factor_by_factor.mp4&#39;</span><span class="p">,</span> <span class="n">writer</span><span class="o">=</span><span class="n">writer</span><span class="p">)</span>
740
+ </pre></div>
741
+
742
+ </div>
743
+ </div>
744
+ </div>
745
+
746
+ </div>
747
+