Finding Geometric Medians and Centers on a Circle from Sample Points

Finding Geometric Medians and Centers on a Circle from Sample Points
Loading the math board and drawing, please wait…
2020-07-19 17:53
This example demonstrates how to find geometric medians and centers on a circle using discrete sample points. Key math concepts include vectors, geometric transformations, optimization problems, and coordinate geometry. GeoGebra commands and objects used in construction are Sum, Circle, Point, Zip, Segment, Textfield, Sequence, Vector, Angle, Length, TableText, Text, Element, RotateText, Sort, If, and UnitVector. Suitable for high school and above students to understand geometric processing and optimization of discrete data points.

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) → x0
  4. Zip(Vector[UnitVector[a - x0]], a, lP) → l1
  5. Sum(Zip[Length[a - x0], a, lP]) → sum
  6. Sum(Zip[Length[a - x0]^(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(x0, x0 + UnitVector[Sum[l1]]) → l11
  14. Vector(x0, x0 + UnitVector[x0]) → 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[x0, 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(x0 ≟ min_q0 ∨ x0 ≟ 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[x0, x0 - 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

AI Drawing Prompt Reference

Draw a circle with a set of discrete sample points on it. Place a movable point on the circle and compute the sum of distances and squared distances from this point to all samples, displaying the values. Find the points on the circle that minimize and maximize the squared distance sum, and connect them with a segment. From each candidate point, draw an arrow in the direction of the sum of unit vectors toward the samples, and measure the angle between this arrow and the radial direction. Plot function curves outside the circle with angle as horizontal axis and distance sum or squared sum as vertical axis, marking extrema. Add a table listing angle differences for candidates and text labels.
The prompt above was compiled from the original drawing commands and is for reference only.