Rainbow Voronoi on a Sphere: midpoints and spherical regions

Rainbow Voronoi on a Sphere: midpoints and spherical regions
Loading the math board and drawing, please wait…
2021-01-13 15:41
This example demonstrates how to build a “rainbow” Voronoi-style partition on the surface of a sphere. Each point on the sphere is assigned to a region according to its distance/metric relationship to multiple site points, producing colored layers with piecewise-defined boundaries that visibly change as the governing conditions vary. The main mathematical ideas are spherical geometry, Voronoi (Dirichlet) partitioning, midpoint/median-value constructions on the sphere, angle-related measurements, and the emergence of intersection boundaries from competing region constraints. Construction highlights: using Sequence and Zip to generate and organize multiple spherical objects/sites and their parameter sets in bulk, Midpoint to compute midpoint-based references for boundary formation, and Sphere to define the spherical surface on which all regions and their separating curves are drawn. Suitable for middle school through undergraduate geometry visualization, and for instruction/practice in computational geometry and geometric constructions.

GeoGebra Commands & Parameters

  1. Sequence(1, M) → Lm
  2. Zip("sphere" + (Text[m]), m, Lm) → Sname
  3. Zip("C" + (Text[m]), m, Lm) → Pname
  4. Zip((Px(k), Py(k), Pz(k)), k, Lm) → Ps
  5. Midpoint(Element[Ps, 1], (0, 0, 0)) → C1
  6. Sphere(C1, 1 / 2) → sphere1
  7. Midpoint(Element[Ps, 2], (0, 0, 0)) → C2
  8. Sphere(C2, 1 / 2) → sphere2
  9. Midpoint(Element[Ps, 3], (0, 0, 0)) → C3
  10. Sphere(C3, 1 / 2) → sphere3
  11. Midpoint(Element[Ps, 4], (0, 0, 0)) → C4
  12. Sphere(C4, 1 / 2) → sphere4
  13. Midpoint(Element[Ps, 5], (0, 0, 0)) → C5
  14. Sphere(C5, 1 / 2) → sphere5
  15. Midpoint(Element[Ps, 6], (0, 0, 0)) → C6
  16. Sphere(C6, 1 / 2) → sphere6
  17. Midpoint(Element[Ps, 7], (0, 0, 0)) → C7
  18. Sphere(C7, 1 / 2) → sphere7
  19. Midpoint(Element[Ps, 8], (0, 0, 0)) → C8
  20. Sphere(C8, 1 / 2) → sphere8
  21. Midpoint(Element[Ps, 9], (0, 0, 0)) → C9
  22. Sphere(C9, 1 / 2) → sphere9
  23. Midpoint(Element[Ps, 10], (0, 0, 0)) → C10
  24. Sphere(C10, 1 / 2) → sphere10
  25. Midpoint(Element[Ps, 11], (0, 0, 0)) → C11
  26. Sphere(C11, 1 / 2) → sphere11
  27. Midpoint(Element[Ps, 12], (0, 0, 0)) → C12
  28. Sphere(C12, 1 / 2) → sphere12
  29. Midpoint(Element[Ps, 13], (0, 0, 0)) → C13
  30. Sphere(C13, 1 / 2) → sphere13
  31. Midpoint(Element[Ps, 14], (0, 0, 0)) → C14
  32. Sphere(C14, 1 / 2) → sphere14
  33. Midpoint(Element[Ps, 15], (0, 0, 0)) → C15
  34. Sphere(C15, 1 / 2) → sphere15
  35. Midpoint(Element[Ps, 16], (0, 0, 0)) → C16
  36. Sphere(C16, 1 / 2) → sphere16
  37. Midpoint(Element[Ps, 17], (0, 0, 0)) → C17
  38. Sphere(C17, 1 / 2) → sphere17
  39. Midpoint(Element[Ps, 18], (0, 0, 0)) → C18
  40. Sphere(C18, 1 / 2) → sphere18
  41. Midpoint(Element[Ps, 19], (0, 0, 0)) → C19
  42. Sphere(C19, 1 / 2) → sphere19
  43. Midpoint(Element[Ps, 20], (0, 0, 0)) → C20
  44. Sphere(C20, 1 / 2) → sphere20
  45. Midpoint(Element[Ps, 21], (0, 0, 0)) → C21
  46. Sphere(C21, 1 / 2) → sphere21
  47. Midpoint(Element[Ps, 22], (0, 0, 0)) → C22
  48. Sphere(C22, 1 / 2) → sphere22
  49. Midpoint(Element[Ps, 23], (0, 0, 0)) → C23
  50. Sphere(C23, 1 / 2) → sphere23
  51. Midpoint(Element[Ps, 24], (0, 0, 0)) → C24
  52. Sphere(C24, 1 / 2) → sphere24
  53. Midpoint(Element[Ps, 25], (0, 0, 0)) → C25
  54. Sphere(C25, 1 / 2) → sphere25
  55. Midpoint(Element[Ps, 26], (0, 0, 0)) → C26
  56. Sphere(C26, 1 / 2) → sphere26
  57. Midpoint(Element[Ps, 27], (0, 0, 0)) → C27
  58. Sphere(C27, 1 / 2) → sphere27
  59. Midpoint(Element[Ps, 28], (0, 0, 0)) → C28
  60. Sphere(C28, 1 / 2) → sphere28
  61. Midpoint(Element[Ps, 29], (0, 0, 0)) → C29
  62. Sphere(C29, 1 / 2) → sphere29
  63. Midpoint(Element[Ps, 30], (0, 0, 0)) → C30
  64. Sphere(C30, 1 / 2) → sphere30
  65. Midpoint(Element[Ps, 31], (0, 0, 0)) → C31
  66. Sphere(C31, 1 / 2) → sphere31
  67. Midpoint(Element[Ps, 32], (0, 0, 0)) → C32
  68. Sphere(C32, 1 / 2) → sphere32
  69. Midpoint(Element[Ps, 33], (0, 0, 0)) → C33
  70. Sphere(C33, 1 / 2) → sphere33
  71. Midpoint(Element[Ps, 34], (0, 0, 0)) → C34
  72. Sphere(C34, 1 / 2) → sphere34
  73. Midpoint(Element[Ps, 35], (0, 0, 0)) → C35
  74. Sphere(C35, 1 / 2) → sphere35
  75. Midpoint(Element[Ps, 36], (0, 0, 0)) → C36
  76. Sphere(C36, 1 / 2) → sphere36
  77. Midpoint(Element[Ps, 37], (0, 0, 0)) → C37
  78. Sphere(C37, 1 / 2) → sphere37
  79. Midpoint(Element[Ps, 38], (0, 0, 0)) → C38
  80. Sphere(C38, 1 / 2) → sphere38
  81. Midpoint(Element[Ps, 39], (0, 0, 0)) → C39
  82. Sphere(C39, 1 / 2) → sphere39
  83. Midpoint(Element[Ps, 40], (0, 0, 0)) → C40
  84. Sphere(C40, 1 / 2) → sphere40
  85. Midpoint(Element[Ps, 41], (0, 0, 0)) → C41
  86. Sphere(C41, 1 / 2) → sphere41
  87. Midpoint(Element[Ps, 42], (0, 0, 0)) → C42
  88. Sphere(C42, 1 / 2) → sphere42
  89. Midpoint(Element[Ps, 43], (0, 0, 0)) → C43
  90. Sphere(C43, 1 / 2) → sphere43
  91. Midpoint(Element[Ps, 44], (0, 0, 0)) → C44
  92. Sphere(C44, 1 / 2) → sphere44
  93. Midpoint(Element[Ps, 45], (0, 0, 0)) → C45
  94. Sphere(C45, 1 / 2) → sphere45
  95. Midpoint(Element[Ps, 46], (0, 0, 0)) → C46
  96. Sphere(C46, 1 / 2) → sphere46
  97. Midpoint(Element[Ps, 47], (0, 0, 0)) → C47
  98. Sphere(C47, 1 / 2) → sphere47
  99. Midpoint(Element[Ps, 48], (0, 0, 0)) → C48
  100. Sphere(C48, 1 / 2) → sphere48
  101. Midpoint(Element[Ps, 49], (0, 0, 0)) → C49
  102. Sphere(C49, 1 / 2) → sphere49
  103. Midpoint(Element[Ps, 50], (0, 0, 0)) → C50
  104. Sphere(C50, 1 / 2) → sphere50
  105. Midpoint(Element[Ps, 51], (0, 0, 0)) → C51
  106. Sphere(C51, 1 / 2) → sphere51
  107. Midpoint(Element[Ps, 52], (0, 0, 0)) → C52
  108. Sphere(C52, 1 / 2) → sphere52
  109. Midpoint(Element[Ps, 53], (0, 0, 0)) → C53
  110. Sphere(C53, 1 / 2) → sphere53
  111. Midpoint(Element[Ps, 54], (0, 0, 0)) → C54
  112. Sphere(C54, 1 / 2) → sphere54
  113. Midpoint(Element[Ps, 55], (0, 0, 0)) → C55
  114. Sphere(C55, 1 / 2) → sphere55
  115. Midpoint(Element[Ps, 56], (0, 0, 0)) → C56
  116. Sphere(C56, 1 / 2) → sphere56
  117. Midpoint(Element[Ps, 57], (0, 0, 0)) → C57
  118. Sphere(C57, 1 / 2) → sphere57
  119. Midpoint(Element[Ps, 58], (0, 0, 0)) → C58
  120. Sphere(C58, 1 / 2) → sphere58
  121. Midpoint(Element[Ps, 59], (0, 0, 0)) → C59
  122. Sphere(C59, 1 / 2) → sphere59
  123. Midpoint(Element[Ps, 60], (0, 0, 0)) → C60
  124. Sphere(C60, 1 / 2) → sphere60
  125. Midpoint(Element[Ps, 61], (0, 0, 0)) → C61
  126. Sphere(C61, 1 / 2) → sphere61
  127. Midpoint(Element[Ps, 62], (0, 0, 0)) → C62
  128. Sphere(C62, 1 / 2) → sphere62
  129. Midpoint(Element[Ps, 63], (0, 0, 0)) → C63
  130. Sphere(C63, 1 / 2) → sphere63
  131. Midpoint(Element[Ps, 64], (0, 0, 0)) → C64
  132. Sphere(C64, 1 / 2) → sphere64
  133. Midpoint(Element[Ps, 65], (0, 0, 0)) → C65
  134. Sphere(C65, 1 / 2) → sphere65
  135. Midpoint(Element[Ps, 66], (0, 0, 0)) → C66
  136. Sphere(C66, 1 / 2) → sphere66
  137. Midpoint(Element[Ps, 67], (0, 0, 0)) → C67
  138. Sphere(C67, 1 / 2) → sphere67
  139. Midpoint(Element[Ps, 68], (0, 0, 0)) → C68
  140. Sphere(C68, 1 / 2) → sphere68
  141. Midpoint(Element[Ps, 69], (0, 0, 0)) → C69
  142. Sphere(C69, 1 / 2) → sphere69
  143. Midpoint(Element[Ps, 70], (0, 0, 0)) → C70
  144. Sphere(C70, 1 / 2) → sphere70
  145. Midpoint(Element[Ps, 71], (0, 0, 0)) → C71
  146. Sphere(C71, 1 / 2) → sphere71
  147. Midpoint(Element[Ps, 72], (0, 0, 0)) → C72
  148. Sphere(C72, 1 / 2) → sphere72
  149. Midpoint(Element[Ps, 73], (0, 0, 0)) → C73
  150. Sphere(C73, 1 / 2) → sphere73
  151. Midpoint(Element[Ps, 74], (0, 0, 0)) → C74
  152. Sphere(C74, 1 / 2) → sphere74
  153. Midpoint(Element[Ps, 75], (0, 0, 0)) → C75
  154. Sphere(C75, 1 / 2) → sphere75
  155. Midpoint(Element[Ps, 76], (0, 0, 0)) → C76
  156. Sphere(C76, 1 / 2) → sphere76
  157. Midpoint(Element[Ps, 77], (0, 0, 0)) → C77
  158. Sphere(C77, 1 / 2) → sphere77
  159. Midpoint(Element[Ps, 78], (0, 0, 0)) → C78
  160. Sphere(C78, 1 / 2) → sphere78
  161. Midpoint(Element[Ps, 79], (0, 0, 0)) → C79
  162. Sphere(C79, 1 / 2) → sphere79
  163. Midpoint(Element[Ps, 80], (0, 0, 0)) → C80
  164. Sphere(C80, 1 / 2) → sphere80
  165. Midpoint(Element[Ps, 81], (0, 0, 0)) → C81
  166. Sphere(C81, 1 / 2) → sphere81
  167. Midpoint(Element[Ps, 82], (0, 0, 0)) → C82
  168. Sphere(C82, 1 / 2) → sphere82
  169. Midpoint(Element[Ps, 83], (0, 0, 0)) → C83
  170. Sphere(C83, 1 / 2) → sphere83
  171. Midpoint(Element[Ps, 84], (0, 0, 0)) → C84
  172. Sphere(C84, 1 / 2) → sphere84
  173. Midpoint(Element[Ps, 85], (0, 0, 0)) → C85
  174. Sphere(C85, 1 / 2) → sphere85
  175. Midpoint(Element[Ps, 86], (0, 0, 0)) → C86
  176. Sphere(C86, 1 / 2) → sphere86
  177. Midpoint(Element[Ps, 87], (0, 0, 0)) → C87
  178. Sphere(C87, 1 / 2) → sphere87
  179. Midpoint(Element[Ps, 88], (0, 0, 0)) → C88
  180. Sphere(C88, 1 / 2) → sphere88
  181. Midpoint(Element[Ps, 89], (0, 0, 0)) → C89
  182. Sphere(C89, 1 / 2) → sphere89
  183. Midpoint(Element[Ps, 90], (0, 0, 0)) → C90
  184. Sphere(C90, 1 / 2) → sphere90
  185. Midpoint(Element[Ps, 91], (0, 0, 0)) → C91
  186. Sphere(C91, 1 / 2) → sphere91
  187. Midpoint(Element[Ps, 92], (0, 0, 0)) → C92
  188. Sphere(C92, 1 / 2) → sphere92
  189. Midpoint(Element[Ps, 93], (0, 0, 0)) → C93
  190. Sphere(C93, 1 / 2) → sphere93
  191. Midpoint(Element[Ps, 94], (0, 0, 0)) → C94
  192. Sphere(C94, 1 / 2) → sphere94
  193. Midpoint(Element[Ps, 95], (0, 0, 0)) → C95
  194. Sphere(C95, 1 / 2) → sphere95
  195. Midpoint(Element[Ps, 96], (0, 0, 0)) → C96
  196. Sphere(C96, 1 / 2) → sphere96
  197. Midpoint(Element[Ps, 97], (0, 0, 0)) → C97
  198. Sphere(C97, 1 / 2) → sphere97
  199. Midpoint(Element[Ps, 98], (0, 0, 0)) → C98
  200. Sphere(C98, 1 / 2) → sphere98
  201. Midpoint(Element[Ps, 99], (0, 0, 0)) → C99
  202. Sphere(C99, 1 / 2) → sphere99
  203. Midpoint(Element[Ps, 100], (0, 0, 0)) → C100
  204. Sphere(C100, 1 / 2) → sphere100
  205. Midpoint(Element[Ps, 101], (0, 0, 0)) → C101
  206. Sphere(C101, 1 / 2) → sphere101
  207. Midpoint(Element[Ps, 102], (0, 0, 0)) → C102
  208. Sphere(C102, 1 / 2) → sphere102
  209. Midpoint(Element[Ps, 103], (0, 0, 0)) → C103
  210. Sphere(C103, 1 / 2) → sphere103
  211. Midpoint(Element[Ps, 104], (0, 0, 0)) → C104
  212. Sphere(C104, 1 / 2) → sphere104
  213. Midpoint(Element[Ps, 105], (0, 0, 0)) → C105
  214. Sphere(C105, 1 / 2) → sphere105
  215. Midpoint(Element[Ps, 106], (0, 0, 0)) → C106
  216. Sphere(C106, 1 / 2) → sphere106
  217. Midpoint(Element[Ps, 107], (0, 0, 0)) → C107
  218. Sphere(C107, 1 / 2) → sphere107
  219. Midpoint(Element[Ps, 108], (0, 0, 0)) → C108
  220. Sphere(C108, 1 / 2) → sphere108
  221. Midpoint(Element[Ps, 109], (0, 0, 0)) → C109
  222. Sphere(C109, 1 / 2) → sphere109
  223. Midpoint(Element[Ps, 110], (0, 0, 0)) → C110
  224. Sphere(C110, 1 / 2) → sphere110
  225. Midpoint(Element[Ps, 111], (0, 0, 0)) → C111
  226. Sphere(C111, 1 / 2) → sphere111
  227. Midpoint(Element[Ps, 112], (0, 0, 0)) → C112
  228. Sphere(C112, 1 / 2) → sphere112
  229. Midpoint(Element[Ps, 113], (0, 0, 0)) → C113
  230. Sphere(C113, 1 / 2) → sphere113
  231. Midpoint(Element[Ps, 114], (0, 0, 0)) → C114
  232. Sphere(C114, 1 / 2) → sphere114
  233. Midpoint(Element[Ps, 115], (0, 0, 0)) → C115
  234. Sphere(C115, 1 / 2) → sphere115
  235. Midpoint(Element[Ps, 116], (0, 0, 0)) → C116
  236. Sphere(C116, 1 / 2) → sphere116
  237. Midpoint(Element[Ps, 117], (0, 0, 0)) → C117
  238. Sphere(C117, 1 / 2) → sphere117
  239. Midpoint(Element[Ps, 118], (0, 0, 0)) → C118
  240. Sphere(C118, 1 / 2) → sphere118
  241. Midpoint(Element[Ps, 119], (0, 0, 0)) → C119
  242. Sphere(C119, 1 / 2) → sphere119
  243. Midpoint(Element[Ps, 120], (0, 0, 0)) → C120
  244. Sphere(C120, 1 / 2) → sphere120
  245. Midpoint(Element[Ps, 121], (0, 0, 0)) → C121
  246. Sphere(C121, 1 / 2) → sphere121
  247. Midpoint(Element[Ps, 122], (0, 0, 0)) → C122
  248. Sphere(C122, 1 / 2) → sphere122
  249. Midpoint(Element[Ps, 123], (0, 0, 0)) → C123
  250. Sphere(C123, 1 / 2) → sphere123
  251. Midpoint(Element[Ps, 124], (0, 0, 0)) → C124
  252. Sphere(C124, 1 / 2) → sphere124
  253. Midpoint(Element[Ps, 125], (0, 0, 0)) → C125
  254. Sphere(C125, 1 / 2) → sphere125
  255. Midpoint(Element[Ps, 126], (0, 0, 0)) → C126
  256. Sphere(C126, 1 / 2) → sphere126
  257. Midpoint(Element[Ps, 127], (0, 0, 0)) → C127
  258. Sphere(C127, 1 / 2) → sphere127
  259. Midpoint(Element[Ps, 128], (0, 0, 0)) → C128
  260. Sphere(C128, 1 / 2) → sphere128
  261. Midpoint(Element[Ps, 129], (0, 0, 0)) → C129
  262. Sphere(C129, 1 / 2) → sphere129
  263. Midpoint(Element[Ps, 130], (0, 0, 0)) → C130
  264. Sphere(C130, 1 / 2) → sphere130
  265. Midpoint(Element[Ps, 131], (0, 0, 0)) → C131
  266. Sphere(C131, 1 / 2) → sphere131
  267. Midpoint(Element[Ps, 132], (0, 0, 0)) → C132
  268. Sphere(C132, 1 / 2) → sphere132
  269. Midpoint(Element[Ps, 133], (0, 0, 0)) → C133
  270. Sphere(C133, 1 / 2) → sphere133
  271. Midpoint(Element[Ps, 134], (0, 0, 0)) → C134
  272. Sphere(C134, 1 / 2) → sphere134
  273. Midpoint(Element[Ps, 135], (0, 0, 0)) → C135
  274. Sphere(C135, 1 / 2) → sphere135
  275. Midpoint(Element[Ps, 136], (0, 0, 0)) → C136
  276. Sphere(C136, 1 / 2) → sphere136
  277. Midpoint(Element[Ps, 137], (0, 0, 0)) → C137
  278. Sphere(C137, 1 / 2) → sphere137
  279. Midpoint(Element[Ps, 138], (0, 0, 0)) → C138
  280. Sphere(C138, 1 / 2) → sphere138
  281. Midpoint(Element[Ps, 139], (0, 0, 0)) → C139
  282. Sphere(C139, 1 / 2) → sphere139
  283. Midpoint(Element[Ps, 140], (0, 0, 0)) → C140
  284. Sphere(C140, 1 / 2) → sphere140

AI Drawing Prompt Reference

In 3D, draw a sphere surface centered at the origin, and show a collection of spherical “midpoint layers” on the same view. Start from a given set of points on the sphere as sites. For each site, construct the midpoint between that site and the origin, then use each midpoint as the center of a sphere with a fixed radius (as in the example, 1/2). Render all these spheres together with the main sphere so that their intersections and implied separation curves create a rainbow Voronoi-like partition pattern whose boundaries emerge from competing region constraints.
The prompt above was compiled from the original drawing commands and is for reference only.