用单一均匀分布生成球面上两点:基于12面体V=12的构造

用单一均匀分布生成球面上两点:基于12面体V=12的构造
几何画板及绘图内容加载中,请稍等……
2021-01-09 22:32
该范例演示如何在球面上用同一个“均匀随机来源”生成两点,使其在球面上尽量均匀分散,并体现用 12 面体结构(V=12)作为分布基准的效果。核心数学概念包括:球面几何(Sphere/Surface)、向量与坐标表示、均匀分布思想(从参数到球面映射)、几何角度度量(Angle)、以及通过函数评估与极值筛选实现“差异/最优”的点选择(If、Min/Max)。作图要点是:先用 Sphere/PointOn 球面或等价映射建立候选点集合(涉及对象如 Sphere、Circle、Vector、Coordinates/向量量),再用 Angle 与长度 Length 计算两点的空间关系与分离程度;随后将评估函数通过 Function、Sum 等方式形成评分,并结合 If、Min、Max 与阈值(ε、fmin/fmax 等变量)筛选得到两点,使其满足差异约束。命令/对象方面,从构造摘要可提炼出:Sphere、Circle、Vector、Angle、Length、Function、If、Max、Min、Polygon、PolyLine、TableText/Textfield、RotateText 等,以及与球面参数相关的对象(如 sphera、坐标点对象、测试点 Atest 等)。适合高中到大学初阶(概率直观与计算建模结合)的课堂演示、计算几何练习或算法可视化用途,用于理解“球面均匀采样/点分散”与几何优化的基本思路。

GeoGebra 命令及参数

  1. Polygon({((-π), ((-π)) / 2), ((-π), π / 2), (π, π / 2), (π, ((-π)) / 2)}) → q_2
  2. PointIn(q_2) → Atest_2
  3. Function(f01, (-π), π, ((-π)) / 2, π / 2) → f0
  4. Zip((x(a), y(a), f0(a)), a, Zmin_2) → fmin3D
  5. Zip((x(a), y(a), f0(a)), a, Zmax_2) → fmax3D
  6. Vector((1.3 * Z3), (1.5 * Z3)) → AVZ3r
  7. Vector((1.3 * Z3), (1.3 * Z3) + UnitVector[Sum[Zip[UnitVector[a - Z3], a, lP]]]) → AVZ3
  8. Vector((1.3 * Z2), (1.5 * Z2)) → AVZ2r
  9. Vector((1.3 * Z2), (1.3 * Z2) + UnitVector[Sum[Zip[UnitVector[a - Z2], a, lP]]]) → AVZ2
  10. Vector((1.3 * Z1), (1.5 * Z1)) → AVZ1r
  11. Vector((1.3 * Z1), (1.3 * Z1) + UnitVector[Sum[Zip[UnitVector[a - Z1], a, lP]]]) → AVZ1
  12. Vector((1.3 * Atest_R), (1.3 * Atest_R) + UnitVector[Sum[Zip[UnitVector[a - Atest_R], a, lP]]]) → AVtest
  13. Vector((1.3 * Atest_R), (1.5 * Atest_R)) → AVtestr
  14. Sphere(O, R) → sphera
  15. Circle(O, R, xOyPlane) → c
  16. PointIn(q_2) → RZ1_2
  17. PointIn(q_2) → RZ2_2
  18. Angle(AVtest, AVtestr) → αA
  19. Angle(AVZ1, AVZ1r) → αZ1
  20. Angle(AVZ2, AVZ2r) → αZ2
  21. Zip(Segment[Atest_R, p], p, lP) → seg
  22. Sum(seg) → sum_seg
  23. PolyLine({((-π), ((-π)) / 2), ((-π), π / 2), (π, π / 2), (π, ((-π)) / 2), ((-π), ((-π)) / 2)}) → q1
  24. Flatten(Sequence[Sequence[((-π) + ((2 * π / na) * i), ((-π)) / 2 + (π / na * j)), j, 1, na], i, 1, na]) → ltest_2
  25. Zip((R; x(a); y(a)), a, ltest_2) → ltest_3
  26. Length(lZmax') → lälZmax'
  27. Textfield(n) → InputBox11
  28. alfa(R, lP, lZsad') → αsad
  29. If(αZ1 > 100°, 180° - αZ1, αZ1) → αZ1'
  30. Textfield(m_1) → InputBox12
  31. Textfield(t) → InputBox13
  32. Textfield(m_2) → InputBox14
  33. PointIn(q_2) → RZ3_2
  34. Sum(Zip[1 / Length[p - Z3], p, lP]) → ZahZ3
  35. Angle(AVZ3, AVZ3r) → αZ3
  36. Textfield(R) → InputBox1
  37. Textfield(na) → InputBox2
  38. Max(f(Zmax_2)) → max_f
  39. Min(f(Zmin_2)) → min_f
  40. Zip(Text["d_{" + (a) + "}", (Atest_R + Element[lP, a]) / 2], a, 1…n) → lPtxt
  41. Zip(Segment[F_o, p], p, lP) → seg0
  42. Sum(seg0) → sum_seg0
  43. RotateText(txt, 90°) → txt1
  44. Sum(lZ3sad) → sumlZ3sad
  45. Textfield(Points3D) → InputBox7
  46. Textfield(lZsad') → InputBox17
  47. Textfield(lZmin') → InputBox16
  48. Textfield(lZmax') → InputBox15
  49. Textfield(jmin) → InputBox18
  50. Textfield(jmax) → InputBox19
  51. Textfield(jsad) → InputBox20
  52. Zip(Text["" + (b), a - (0.1, 0.1)], a, Zmax_2, b, 1…Length[Zmax_2]) → l2maxtxt
  53. Zip(Text["" + (b), a - (0.1, 0.1)], a, Zmin_2, b, 1…Length[Zmin_2]) → l2mintxt
  54. Zip(Text["" + (b), a - (0.1, 0.1)], a, Zsad_2, b, 1…Length[Zsad_2]) → l2sadtxt
  55. Zip(Vector[r1, (1.153846154 * r1)], r1, (1.3 * Zip[(R * UnitVector[a]), a, lZmax'])) → lVmaxr
  56. Zip(Vector[r1, (1.153846154 * r1)], r1, (1.3 * Zip[(R * UnitVector[a]), a, lZmin'])) → lVminr
  57. Zip(Vector[r1, (1.153846154 * r1)], r1, (1.3 * Zip[(R * UnitVector[a]), a, lZsad'])) → lVsadr
  58. alfa(R, lP, lZmax') → αmax
  59. alfa(R, lP, lZmin') → αmin
  60. arrow(R, lP, lZmax') → lVmax
  61. arrow(R, lP, lZmin') → lVmin
  62. arrow(R, lP, lZsad') → lVsad
  63. CurveCartesian((-π) + ((2 * π) * a), ((-π)) / 2, f0((-π) + ((2 * π) * a), ((-π)) / 2), a, 0, 1) → par1
  64. CurveCartesian((-π) + ((2 * π) * a), π / 2, f0((-π) + ((2 * π) * a), π / 2), a, 0, 1) → par2
  65. CurveCartesian((-π), ((-π)) / 2 + (π * a), f0((-π), ((-π)) / 2 + (π * a)), a, 0, 1) → par3
  66. CurveCartesian(π, ((-π)) / 2 + (π * a), f0(π, ((-π)) / 2 + (π * a)), a, 0, 1) → par4
  67. Polygon({((-π), ((-π)) / 2), ((-π), π / 2), (π, π / 2), (π, ((-π)) / 2)}) → q_3
  68. Zip((x(a), y(a), f0(a)), a, Zsad_2) → fsad3D
  69. Textfield(achs) → InputBox3
  70. Zip(Atest_2 + (r_c; ((2 * π / n_c) * k)), k, 0…(n_c - 1)) → l0r
  71. Sum(Unique[sgn(f(Atest_2) - f(l0r))]) → sum_r
  72. Sum(Sequence[If[sum00_r(i) ≠ sum00_r(i + 1), 1, 0], i, 1, Length[sum00_r] - 1]) → sum01_r
  73. Circle(Atest_2, 0.2) → ci
  74. TableText(Append["i", Sequence[Length[lZsad']]], Append["\frac{N°}{levels} ", msad], Append["P_{sad }", lZsad'], Append["(f'x,f'y)", lZf'xysad], Append[" Δα≟ π ", αsad], "v") → text2c
  75. TableText(Append["i", Sequence[Length[αmax]]], Append["\frac{N°}{levels} ", mmax], Append["P_{Max }", lZmax'], Append["(f'x,f'y)", lZf'xymax], Append[" Δα≟ π ", αmax], "v") → text2a
  76. TableText(Append["i", Sequence[Length[αmin]]], Append["\frac{N°}{levels} ", mmin], Append["P_{Min }", lZmin'], Append["(f'x,f'y)", lZf'xymin], Append[" Δα≟ π ", αmin], "v") → text2b

AI 绘图提示语参考

在三维空间中给定一个球面,球心与半径决定整体尺度;在球面上先生成一组由参数化的参考区域映射得到的候选点,用这些点构造向量表示其位置。再额外再从同一参考采样方式生成至少两组候选点,并各自取一对候选,使它们从球心出发的夹角尽量大、同时其球面上相互分离度通过角度与长度关系进行评估。最后在球面上用标注呈现两段方向向量对应的两点关系及其角度度量,并可绘制若干辅助线段/折线用于展示参考区域与所选方向。
以上提示语为根据原始绘图命令整理而来,仅供参考。