Locating Geometric Medians/Centers on a Circle from Discrete Sample Points Depen

Locating Geometric Medians/Centers on a Circle from Discrete Sample Points Depen
Loading the math board and drawing, please wait…
2020-11-21 19:47
This GeoGebra example demonstrates how the location of the geometric median (or geometric center) on a circle changes as a movable test point varies, given a set of discrete sample points fixed on the circle. The core mathematical concepts include the geometric median (minimizing the sum of distances to sample points), circle parametrization, vector operations, and optimization. The construction uses commands such as Circle, Point, Sequence, Sum, Vector, Length, Slider, InputBox, If, Sort, Element, and Text to generate sample points, compute distance sums, and dynamically highlight the optimal point on the circle. It is suitable for high school or undergraduate students studying coordinate geometry, vectors, and optimization, and serves as an intuitive tool for exploring robust statistics and center location problems.

GeoGebra Commands & Parameters

  1. Sum(Zip[sqrt(((R * cos(x)) - x(b))^(2) + ((R * sin(x)) - y(b))^(2)), b, lP]) → f0
  2. Circle(O, R) → g
  3. Point(g) → p0
  4. Zip(Vector[UnitVector[a - p0]], a, lP) → l1
  5. Sum(Zip[Length[a - p0], a, lP]) → sum
  6. Sum(Zip[Length[a - p0]^(2), a, lP]) → sum_q
  7. Sum(Zip[Length[a - min_q0]^(2), a, lP]) → sum1_q
  8. Sum(Zip[Length[a - max_q0]^(2), a, lP]) → sum2_q
  9. Segment(max_q0, min_q0) → h
  10. Textfield(na) → InputBox1
  11. Sequence((R; ((2 * π / na) * j)), j, 0, na) → ltest_2
  12. Zip((R; a), a, x(Extr_g)) → lZZsad'
  13. Vector(p0, p0 + UnitVector[Sum[l1]]) → l11
  14. Vector(p0, p0 + UnitVector[p0]) → l12
  15. Angle(l11, l12) → α
  16. Zip(Vector[b, b + UnitVector[Sum[Zip[UnitVector[a - b], a, lP]]]], b, lZmax') → Wi_Pmax
  17. Zip(Vector[b, b + UnitVector[Sum[Zip[UnitVector[a - b], a, lP]]]], b, lZmin') → Wi_Pmin
  18. Zip(Vector[x0, x0 + UnitVector[x0]], x0, lZmax') → Wi_Pmax'
  19. Zip(Vector[x0, x0 + UnitVector[x0]], x0, lZmin') → Wi_Pmin'
  20. Zip(Angle[a, Vector[b]], Vector[a], Wi_Pmax, Vector[b], Wi_Pmax') → Wii_pmax
  21. Zip(Angle[a, Vector[b]], Vector[a], Wi_Pmin, Vector[b], Wi_Pmin') → Wii_pmin
  22. Zip(Segment[p0, a], a, lP) → l0
  23. Zip((a, f1(a)), a, x(lExtr')) → lExtrf'
  24. Length(lExtrf') → lä
  25. Sum(Zip[((R * cos(x)) - x(b))^(2) + ((R * sin(x)) - y(b))^(2), b, lP]) → f0_q
  26. Zip((a, f1(a)), a, Zip[Angle[a], a, lZmin']) → lmin1
  27. Zip((a, f1(a)), a, Zip[Angle[a], a, lZmax']) → lmax1
  28. Zip((a, f1(a)), a, Zip[Angle[a], a, lZZsad']) → lsad
  29. Vector(C, C + (0, 0.5)) → u
  30. Vector(C_q, C_q + (0, 0.5)) → u_q
  31. Textfield(s) → InputBox2
  32. Textfield(s_q) → InputBox3
  33. TableText(Append["k", 1…Length[Wii_pmin]], Append["Δφ_k, grad", Wii_pmin], "v") → text23min
  34. TableText(Append["k", 1…Length[Wii_pmax]], Append["Δφ_k, grad", Wii_pmax], "v") → text23max
  35. Text("f(x)", (-0.1, f1(0) + 0.2)) → text6
  36. Text("f_q(x)", (-0.1, f1_q(0) + 0.2)) → text6b
  37. Element(lmax1, IndexOf[Max[y(lmax1)], y(lmax1)]) → D1
  38. Element(lmin1, IndexOf[Min[y(lmin1)], y(lmin1)]) → D2
  39. Zip(Point[a, 1], Vector[a], Wi_Pmax) → Pmax
  40. Zip(Point[a, 1], Vector[a], Wi_Pmin) → Pmin
  41. Zip(Point[a, 1], Vector[a], Wi_Pmax') → Pmax'
  42. Zip(Point[a, 1], Vector[a], Wi_Pmin') → Pmin'
  43. Point(l11, 1) → Tpoint1
  44. Point(l12, 1) → Tpoint2
  45. Zip(Text["c_" + (a) + "", b], a, 1…Length[lZmin'], b, lZmin' + (0.2, 0.2)) → txtmin
  46. Element(lZmin', IndexOf[Min[y(lmin1)], y(lmin1)]) → AGlobalmin
  47. Element(lZmax', IndexOf[Max[y(lmax1)], y(lmax1)]) → AGlobalmax
  48. RotateText(txt, 90°) → txt1
  49. Sort(Flatten[x(lExtr')]) → xlExtr'
  50. Zip((abs(a - b) / a * 100), a, xlExtr', b, xlMaxmin) → Δ
  51. Zip(ScientificText[a, 3], a, Δ) → Δ1
  52. TableText(Append["k", 1…lä], Append["δ=\frac{x_{Extr}-x_{iter}}{x_{Extr}}*100% ", Δ1], "v") → text23Δ
  53. If(p0 ≟ min_q0 ∨ p0 ≟ max_q0, true, false) → bue1
  54. Zip(Text["c_" + (a) + "", b], a, 1…Length[lZmax'], b, lZmax' + (-0.2, 0.2)) → txtmax
  55. Zip(Text["\vec{c}_ " + (a) + "", b, true, true], a, 1…Length[lZmax'], b, Pmax' + (-0.35, 0.35)) → txtPmax'
  56. Zip(Text["\vec{c}_ " + (a) + "", b, true, true], a, 1…Length[lZmax'], b, Pmin' + (-0.35, 0.35)) → txtPmin'
  57. Zip(Text["\overrightarrow{f}_" + (a) + "", b, true, true], a, 1…Length[lZmax'], b, Pmax + (-0.4, 0.2)) → txtPmax
  58. Zip(Text["\overrightarrow{f}_" + (a) + "", b, true, true], a, 1…Length[lZmax'], b, Pmin + (-0.4, 0.1)) → txtPmin
  59. UnitVector(Vector[p0, p0 - A]) → w
  60. Angle(w, l12) → β
  61. Zip(Vector[x0, x0 + UnitVector[Vector[x0, x0 - (Length[lP] * x0) - Sum[lP]]]], x0, lZ_q) → wq_i
  62. Zip(Vector[x0, x0 + UnitVector[x0]], x0, lZ_q) → wcq_i
  63. If(b, "sum of distances", "sum of the squares of distances") → txtsum
  64. Point(w, 1) → Tpoint2_q
  65. If(a, "\fgcolor{#007FFF}{f(x)}", "\fgcolor{magenta}{f_q(x)}") → text22a

AI Drawing Prompt Reference

Draw a circle with several fixed sample points on it)Skip. Place a movable test point on the circle. Connect the test point to each sample point with a segment. Compute the sum of lengths of these segments, which varies as the test point moves. Mark the two special points on the circle where this sum is minimized and maximized, and connect them with a segment. At the test point, draw an arrow representing the sum of unit vectors pointing from the test point to each sample point, and another arrow pointing from the test point toward the circle's center. Show the angle between these two arrows. Additionally, plot a curve outside the circle showing how the total distance sum changes with the angle of the test point, and highlight the global minimum and maximum points on that curve.
The prompt above was compiled from the original drawing commands and is for reference only.