Example 3: Three Moving Points in 3D Induce Eight Geometric Medians on a Sphere

Example 3: Three Moving Points in 3D Induce Eight Geometric Medians on a Sphere
Loading the math board and drawing, please wait…
2020-12-14 22:14
This example demonstrates a dynamic geometric phenomenon where three moving points in three-dimensional space induce eight geometric medians on a sphere. The core mathematical concepts involve geometric medians (points minimizing the sum of distances to given points), spherical geometry, dynamic point motion in space, and optimization problems. The construction uses GeoGebra commands such as Polygon, PointIn, First, Sphere, Circle, Angle, Zip, Sum, PolyLine, Flatten, Length, Textfield, If, KeepIf, Function, Max, Sequence, CurveCartesian, TableText, Vector, Translate, and RotateText, along with numerous point objects (B01–B10, P1–P10) and parameters like R and t0. Sliders or dynamic inputs control the moving points, and the eight geometric medians on the sphere are computed and displayed in real time. This applet is suitable for high school to university-level mathematics education, particularly for teaching solid geometry, optimization theory, and dynamic geometric visualization, helping students grasp the geometric meaning of distance-minimization problems in higher-dimensional settings.

GeoGebra Commands & Parameters

  1. Polygon({((-π), ((-π)) / 2), ((-π), π / 2), (π, π / 2), (π, ((-π)) / 2)}) → q
  2. Polygon({B01, B02, B04, B03}) → q2
  3. PointIn(q2) → B10
  4. PointIn(q2) → B9
  5. PointIn(q2) → B8
  6. PointIn(q2) → B7
  7. PointIn(q2) → B6
  8. PointIn(q2) → B5
  9. PointIn(q2) → B4
  10. PointIn(q2) → B3
  11. PointIn(q2) → B2
  12. PointIn(q2) → B1
  13. First({P1, P2, P3, P4, P5, P6, P7, P8, P9, P10}, n) → lP
  14. Sphere(O, R) → b
  15. PointIn(q) → A_2
  16. Circle(O, R, xOyPlane) → c
  17. PointIn(q) → RZ1_2
  18. PointIn(q) → RZ2_2
  19. Angle(sumunitA, vA) → αA
  20. Angle(sumunitZ1, vZ1) → αZ1
  21. Angle(sumunitZ2, vZ2) → αZ2
  22. Zip(Segment[A, p], p, lP) → seg
  23. Sum(seg) → sum_seg
  24. PolyLine({((-π), ((-π)) / 2), ((-π), π / 2), (π, π / 2), (π, ((-π)) / 2), ((-π), ((-π)) / 2)}) → q1
  25. Flatten(Sequence[Sequence[((-π) + ((2 * π / na) * i), ((-π)) / 2 + (π / na * j)), j, 1, na - 1], i, 1, na - 1]) → ltest_2
  26. Zip((R; x(a); y(a)), a, ltest_2) → ltest_3
  27. Length(lZmax') → lälZmax'
  28. Zip(Vector[(R * UnitVector[a])], a, lZmax') → vlZmax
  29. Zip(Vector[(R * UnitVector[a])], a, lZmin') → vlZmin
  30. Zip(Vector[(R * UnitVector[Sum[Zip[UnitVector[p - b], p, lP]]])], b, lZmax') → sumunit_max
  31. Zip(Vector[(R * UnitVector[Sum[Zip[UnitVector[p - b], p, lP]]])], b, lZmin') → sumunit_min
  32. Zip(Angle[a, Vector[b]], Vector[a], sumunit_max, Vector[b], vlZmax) → αmax
  33. Zip(Angle[a, Vector[b]], Vector[a], sumunit_min, Vector[b], vlZmin) → αmin
  34. Zip((arg(a), alt(a)), a, lP) → lP_2
  35. Textfield(n) → InputBox11
  36. Zip(Vector[(R * UnitVector[a])], a, lZsad') → vlZsad
  37. If(αZ1 > 100°, 180° - αZ1, αZ1) → αZ1'
  38. KeepIf(x > 0, Sequence[If[abs(Element[αsad, i] - π) < 0.001 ∨ abs(Element[αsad, i]) < 0.001, i, 0], i, 1, Length[αsad]]) → Nαsad
  39. Textfield(m_2) → InputBox14
  40. PointIn(q) → RZ3_2
  41. Sum(Zip[1 / Length[p - Z3], p, lP]) → ZahZ3
  42. Angle(sumunitZ3, vZ3) → αZ3
  43. Textfield(R) → InputBox1
  44. Textfield(na) → InputBox2
  45. Function((q_f * f(u, v)) + b_0f - 0.9999, u, (-π), π, v, ((-π)) / 2, π / 2) → f0
  46. Max(f(Zmax_2)) → m
  47. Zip((x(a), y(a), f0(a)), a, Zmax_2) → fmax3D
  48. Zip((x(a), y(a), f0(a)), a, Zmin_2) → fmin3D
  49. Zip((x(a), y(a), f0(a)), a, Zsad_2) → fsad3D
  50. Sequence(Vector[(1.3 * Point[O, Vector[Element[sumunit_sad, i]]]), (1.5 * Point[O, Vector[Element[sumunit_sad, i]]])], i, 1, Length[sumunit_sad]) → sumunit_sad1
  51. Sequence(Vector[(1.3 * Point[O, Vector[Element[vlZmax, i]]]), (1.5 * Point[O, Vector[Element[vlZmax, i]]])], i, 1, Length[vlZmax]) → vsumunit_max2
  52. Sequence(Vector[(1.3 * vlZmax(i)), (1.5 * vlZmax(i))], i, 1, Length[vlZmax]) → lvlmax
  53. Sequence(Vector[(1.3 * vlZmax(i)), (-1.1 * sumunit_max(i))], i, 1, Length[sumunit_max]) → l1z
  54. Sequence(Vector[(1.3 * vlZmin(i)), (1.5 * vlZmin(i))], i, 1, Length[vlZmin]) → lvlmin
  55. Sequence(Vector[(1.3 * vlZmin(i)), (-1.1 * sumunit_min(i))], i, 1, Length[sumunit_min]) → l2z
  56. Sequence(Vector[(1.3 * vlZsad(i)), (1.5 * vlZsad(i))], i, 1, Length[vlZsad]) → lvlsad
  57. Sequence(Vector[(1.3 * vlZsad(i)), (-1.1 * sumunit_sad(i))], i, 1, Length[sumunit_sad]) → l3z
  58. Zip((Length[a]; arg(a); alt(a)), a, lP) → lPsphere
  59. CurveCartesian((-π) + ((2 * π) * a), ((-π)) / 2, f0((-π) + ((2 * π) * a), ((-π)) / 2), a, 0, 1) → par1
  60. CurveCartesian((-π) + ((2 * π) * a), π / 2, f0((-π) + ((2 * π) * a), π / 2), a, 0, 1) → par2
  61. CurveCartesian(π, ((-π)) / 2 + (π * a), f0(π, ((-π)) / 2 + (π * a)), a, 0, 1) → par4
  62. Zip(Text["d_{" + (a) + "}", (A + Element[lP, a]) / 2], a, 1…n) → lPtxt
  63. CurveCartesian((-π), ((-π)) / 2 + (π * a), f0((-π), ((-π)) / 2 + (π * a)), a, 0, 1) → par3
  64. Zip((x(a), y(a)), a, lP) → lP_{Gr1}
  65. Textfield(q_f) → InputBox3
  66. Textfield(b_0f) → InputBox4
  67. Textfield(step1) → InputBox5
  68. Textfield(step2) → InputBox6
  69. TableText(Append["i", Sequence[Length[αmax]]], Append["P_{Max }", lZmax'], Append["(f'x,f'y)", lZf'xymax], Append[" Δα≟ π ", αmax], "v") → text2a
  70. TableText(Append["i", Sequence[Length[αmin]]], Append["P_{Min }", lZmin'], Append["(f'x,f'y)", lZf'xymin], Append[" Δα≟ π ", αmin], "v") → text2b
  71. TableText(Append["i", Sequence[Length[αsad]]], Append["P_{sad }", lZsad'], Append["(f'x,f'y)", lZf'xysad], Append[" Δα≟ π ", αsad], "v") → text2c
  72. First({aP1, aP2, aP3, aP4, aP5, aP6, aP7, aP8, aP9, aP10}, n) → Output
  73. Vector((1.3 * A), (1.5 * A)) → lvA
  74. Vector((1.3 * A), (1.1 / 1.7 * Point[O, Vector[(-sumunitA)]])) → l1A
  75. Zip(Segment[F_o, p], p, lP) → seg0
  76. Sum(seg0) → sum_seg0
  77. Translate(q, Vector[(0, 0, -1)]) → q'
  78. Zip(Segment[(x(a), y(a), -1), (x(a), y(a), f0(x(a), y(a)))], a, {((-π), ((-π)) / 2), ((-π), π / 2), (π, π / 2), (π, ((-π)) / 2)}) → lseg
  79. RotateText(txt, 90°) → txt1

AI Drawing Prompt Reference

In 3D space, draw a sphere centered at the origin with adjustable radius. On the sphere, display eight geometric median points induced by three moving points in space. Inside the sphere, place a quadrilateral polygon with ten random interior points serving as initial positions for the moving points. Draw a great circle on the sphere and multiple vectors from the center to surface points. Use sliders to control the motion of the three points, updating the eight geometric medians on the sphere in real time. Include angle annotations and text input boxes for parameter adjustment, with distinct colors or markers to differentiate regions.
The prompt above was compiled from the original drawing commands and is for reference only.