Example 3: Three Moving Points in 3D Induce Eight Geometric Medians on a Sphere
Loading the math board and drawing, please wait…
In collections
₅Point Location estimators: Geometric Medians on a sphere
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
Polygon({((-π), ((-π)) / 2), ((-π), π / 2), (π, π / 2), (π, ((-π)) / 2)}) → qPolygon({B01, B02, B04, B03}) → q2PointIn(q2) → B10PointIn(q2) → B9PointIn(q2) → B8PointIn(q2) → B7PointIn(q2) → B6PointIn(q2) → B5PointIn(q2) → B4PointIn(q2) → B3PointIn(q2) → B2PointIn(q2) → B1First({P1, P2, P3, P4, P5, P6, P7, P8, P9, P10}, n) → lPSphere(O, R) → bPointIn(q) → A_2Circle(O, R, xOyPlane) → cPointIn(q) → RZ1_2PointIn(q) → RZ2_2Angle(sumunitA, vA) → αAAngle(sumunitZ1, vZ1) → αZ1Angle(sumunitZ2, vZ2) → αZ2Zip(Segment[A, p], p, lP) → segSum(seg) → sum_segPolyLine({((-π), ((-π)) / 2), ((-π), π / 2), (π, π / 2), (π, ((-π)) / 2), ((-π), ((-π)) / 2)}) → q1Flatten(Sequence[Sequence[((-π) + ((2 * π / na) * i), ((-π)) / 2 + (π / na * j)), j, 1, na - 1], i, 1, na - 1]) → ltest_2Zip((R; x(a); y(a)), a, ltest_2) → ltest_3Length(lZmax') → lälZmax'Zip(Vector[(R * UnitVector[a])], a, lZmax') → vlZmaxZip(Vector[(R * UnitVector[a])], a, lZmin') → vlZminZip(Vector[(R * UnitVector[Sum[Zip[UnitVector[p - b], p, lP]]])], b, lZmax') → sumunit_maxZip(Vector[(R * UnitVector[Sum[Zip[UnitVector[p - b], p, lP]]])], b, lZmin') → sumunit_minZip(Angle[a, Vector[b]], Vector[a], sumunit_max, Vector[b], vlZmax) → αmaxZip(Angle[a, Vector[b]], Vector[a], sumunit_min, Vector[b], vlZmin) → αminZip((arg(a), alt(a)), a, lP) → lP_2Textfield(n) → InputBox11Zip(Vector[(R * UnitVector[a])], a, lZsad') → vlZsadIf(αZ1 > 100°, 180° - αZ1, αZ1) → αZ1'KeepIf(x > 0, Sequence[If[abs(Element[αsad, i] - π) < 0.001 ∨ abs(Element[αsad, i]) < 0.001, i, 0], i, 1, Length[αsad]]) → NαsadTextfield(m_2) → InputBox14PointIn(q) → RZ3_2Sum(Zip[1 / Length[p - Z3], p, lP]) → ZahZ3Angle(sumunitZ3, vZ3) → αZ3Textfield(R) → InputBox1Textfield(na) → InputBox2Function((q_f * f(u, v)) + b_0f - 0.9999, u, (-π), π, v, ((-π)) / 2, π / 2) → f0Max(f(Zmax_2)) → mZip((x(a), y(a), f0(a)), a, Zmax_2) → fmax3DZip((x(a), y(a), f0(a)), a, Zmin_2) → fmin3DZip((x(a), y(a), f0(a)), a, Zsad_2) → fsad3DSequence(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_sad1Sequence(Vector[(1.3 * Point[O, Vector[Element[vlZmax, i]]]), (1.5 * Point[O, Vector[Element[vlZmax, i]]])], i, 1, Length[vlZmax]) → vsumunit_max2Sequence(Vector[(1.3 * vlZmax(i)), (1.5 * vlZmax(i))], i, 1, Length[vlZmax]) → lvlmaxSequence(Vector[(1.3 * vlZmax(i)), (-1.1 * sumunit_max(i))], i, 1, Length[sumunit_max]) → l1zSequence(Vector[(1.3 * vlZmin(i)), (1.5 * vlZmin(i))], i, 1, Length[vlZmin]) → lvlminSequence(Vector[(1.3 * vlZmin(i)), (-1.1 * sumunit_min(i))], i, 1, Length[sumunit_min]) → l2zSequence(Vector[(1.3 * vlZsad(i)), (1.5 * vlZsad(i))], i, 1, Length[vlZsad]) → lvlsadSequence(Vector[(1.3 * vlZsad(i)), (-1.1 * sumunit_sad(i))], i, 1, Length[sumunit_sad]) → l3zZip((Length[a]; arg(a); alt(a)), a, lP) → lPsphereCurveCartesian((-π) + ((2 * π) * a), ((-π)) / 2, f0((-π) + ((2 * π) * a), ((-π)) / 2), a, 0, 1) → par1CurveCartesian((-π) + ((2 * π) * a), π / 2, f0((-π) + ((2 * π) * a), π / 2), a, 0, 1) → par2CurveCartesian(π, ((-π)) / 2 + (π * a), f0(π, ((-π)) / 2 + (π * a)), a, 0, 1) → par4Zip(Text["d_{" + (a) + "}", (A + Element[lP, a]) / 2], a, 1…n) → lPtxtCurveCartesian((-π), ((-π)) / 2 + (π * a), f0((-π), ((-π)) / 2 + (π * a)), a, 0, 1) → par3Zip((x(a), y(a)), a, lP) → lP_{Gr1}Textfield(q_f) → InputBox3Textfield(b_0f) → InputBox4Textfield(step1) → InputBox5Textfield(step2) → InputBox6TableText(Append["i", Sequence[Length[αmax]]], Append["P_{Max }", lZmax'], Append["(f'x,f'y)", lZf'xymax], Append[" Δα≟ π ", αmax], "v") → text2aTableText(Append["i", Sequence[Length[αmin]]], Append["P_{Min }", lZmin'], Append["(f'x,f'y)", lZf'xymin], Append[" Δα≟ π ", αmin], "v") → text2bTableText(Append["i", Sequence[Length[αsad]]], Append["P_{sad }", lZsad'], Append["(f'x,f'y)", lZf'xysad], Append[" Δα≟ π ", αsad], "v") → text2cFirst({aP1, aP2, aP3, aP4, aP5, aP6, aP7, aP8, aP9, aP10}, n) → OutputVector((1.3 * A), (1.5 * A)) → lvAVector((1.3 * A), (1.1 / 1.7 * Point[O, Vector[(-sumunitA)]])) → l1AZip(Segment[F_o, p], p, lP) → seg0Sum(seg0) → sum_seg0Translate(q, Vector[(0, 0, -1)]) → q'Zip(Segment[(x(a), y(a), -1), (x(a), y(a), f0(x(a), y(a)))], a, {((-π), ((-π)) / 2), ((-π), π / 2), (π, π / 2), (π, ((-π)) / 2)}) → lsegRotateText(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.