Three Moving Points in 3D Space Inducing 8 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 how three moving points in three-dimensional space 'induce' eight geometric medians on a sphere. Key math concepts include vectors, geometric transformations, solid geometry, and functions. Construction highlights the use of GeoGebra commands like Polygon, PointIn, Sphere, Vector, Translate to create points and geometric objects, with animations showing the motion paths. Suitable for high school and above students to explore spatial geometry and vector applications.
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 sphere centered at a point, then generate several candidate points on the sphere from a polygonal region and its planar counterpart via point-in intersections. Induce circular/arc geometry through the sphere and a reference plane, and compute direction vectors from the candidate points around the sphere. Define angular quantities between the relevant unit directions and the vector directions. Add a scalar function that maps spherical-style parameters to a height value on the sphere, and mark the locations where this function attains a maximum and a minimum on the sphere. Display these extrema together with their associated direction vectors and angles to illustrate how motion of three points can lead to eight geometric medians on the spherical surface.
The prompt above was compiled from the original drawing commands and is for reference only.