14 Geometric Medians Induced by 6 Moving Points in 3D Space on a Sphere
Loading the math board and drawing, please wait…
In collections
₅Point Location estimators: Geometric Medians on a sphere
This example demonstrates how 6 moving points in three-dimensional space induce 14 geometric medians on a sphere. It involves core mathematical concepts such as solid geometry, vectors, functions, and geometric transformations. The construction uses GeoGebra commands like Polygon, PointIn, Sphere, Vector, Translate, and others to create points and geometric objects, with Sum and Flatten for complex structures. Suitable for high school and above students to understand spatial geometry, vector operations, and dynamic geometric constructions.
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
Create a 3D geometric construction on a sphere: first form a base polygonal patch on the sphere using four characteristic vertices defined by spherical-angle values (longitudes ±π and latitudes ±π/2). From that patch, place a set of moving points on the sphere—specifically six interior points obtained from repeated sampling. Build the sphere centered at the origin with a given radius, and use auxiliary circular and segment geometry to visualize the setup. Use vectors from the sphere center and angle measurements between these directions to drive the selection process. Apply constraints to choose candidates corresponding to extremal angular conditions and mark the resulting geometric median locations on the sphere; in this construction, the output is a set of 14 geometric medians distributed over the spherical surface.
The prompt above was compiled from the original drawing commands and is for reference only.