判断函数或非函数:用图形对应关系检验单值性

判断函数或非函数:用图形对应关系检验单值性
几何画板及绘图内容加载中,请稍等……
2025-07-31 17:04
本范例通过给定若干点(及其连线/形状)让学生判断“某个对应是否为函数”,重点展示图形在不同输入下是否出现单值对应或同一自变量对应多个因变量的现象。核心数学概念包括函数的定义(唯一对应/单值性)、函数关系的图形表征,以及在图形层面识别并说明函数性结论。作图与交互要点来自构造摘要中的实现:使用 Textfield 进行输入;If 与 SelectedIndex 实现根据学生选择/输入给出判断与反馈;通过 Sequence、Join 生成或组织参与判断的数据点集合;用 Segment、Polygon、Element 组织几何对象;并用 Append、Remove、Length、Distance 进行对象管理与测量;利用 SpeechBubbleLeft 进行提示;用 Circle、Ellipse 以及 Translate 构建/移动相关图形元素;界面与教学控制对象如 validate、showa

GeoGebra 命令及参数

  1. Textfield(input1) → InputBox1
  2. Textfield(input2) → InputBox2
  3. Shuffle(1…10) → ExNumList, {10, 1, 4, 3, 5, 6, 7, 2, 8, 9}
  4. Join({{4, 8}, ExNumList \ {4, 8}}) → ExNumListReal
  5. If(Mod[anzahlR, 2] ≟ 1, floor(anzahlR / 2), floor(anzahlR / 2) - 0.5) → abstandR
  6. Sequence(TopR + (0, ((-dy2) * i)) + (0, (abstandR * dy2)), i, 0, AnzahlR(exNum) - 1) → PR
  7. If(Kind1 ≟ "Vicky", 1, Kind1 ≟ "Trixi", 2, Kind1 ≟ "Max", 3, Kind1 ≟ "Alex", 4, Kind1 ≟ "Anna", 5) → connection1start
  8. If(Kind2 ≟ "Vicky", 1, Kind2 ≟ "Trixi", 2, Kind2 ≟ "Max", 3, Kind2 ≟ "Alex", 4, Kind2 ≟ "Anna", 5) → connection2start
  9. If(connection1start ≟ 1, PL1, connection1start ≟ 2, PL2, connection1start ≟ 3, PL3, connection1start ≟ 4, PL4, connection1start ≟ 5, PL5) → ActivePoint1
  10. If(connection2start ≟ 1, PL1, connection2start ≟ 2, PL2, connection2start ≟ 3, PL3, connection2start ≟ 4, PL4, connection2start ≟ 5, PL5) → ActivePoint2
  11. If(ActivePoint1 ≟ PR(1), 1, ActivePoint1 ≟ PR(6), 6, 0, ActivePoint1 ≟ PR(2), 2, ActivePoint1 ≟ PR(3), 3, ActivePoint1 ≟ PR(4), 4, ActivePoint1 ≟ PR(5), 5) → inputConn1
  12. If(ActivePoint2 ≟ PR(1), 1, ActivePoint2 ≟ PR(6), 6, 0, ActivePoint2 ≟ PR(2), 2, ActivePoint2 ≟ PR(3), 3, ActivePoint2 ≟ PR(4), 4, ActivePoint2 ≟ PR(5), 5) → inputConn2
  13. SelectedIndex(DD1) → index1
  14. Sequence(TopL + (0, ((-dy1) * i)), i, 0, 4) → PL
  15. Segment(PL(3), Point[Segment[PL(3), PL3], 0.97]) → connection3
  16. Segment(PL(1), Point[Segment[PL(1), PL1], 0.97]) → connection1
  17. Segment(PL(2), Point[Segment[PL(2), PL2], 0.97]) → connection2
  18. Segment(PL(4), Point[Segment[PL(4), PL4], 0.97]) → connection4
  19. Segment(PL(5), Point[Segment[PL(5), PL5], 0.97]) → connection5
  20. If(Length[connection1] ≠ 0, 1, Length[connection2] ≠ 0, 2, Length[connection3] ≠ 0, 3, Length[connection4] ≠ 0, 4, Length[connection5] ≠ 0, 5) → inputL
  21. Polygon(PtopLeftCornerFeedback, PtopRightCornerFeedback, PbottomRightCornerFeedback, PbottomLeftCornerFeedback) → rectangleCorrect, rectangleCorrectS3, rectangleCorrectS4, rectangleCorrectS2, rectangleCorrectS1
  22. Shuffle(Sequence[Random[0, 10], i, 1, 100]) → randomNosForX, {1, 6, 2, 1, 10, 3, 5, 2, 6, 6, 9, 7, 1, 8, 0, 1, 8, 9, 3, 5, 10, 9, 3, 10, 5, 6, 7, 7, 0, 2, 4, 10, 2, 10, 3, 0, 3, 9, 5, 4, 3, 8, 5, 2, 5, 5, 10, 8, 3, 10, 6, 4, 10, 5, 10, 1, 10, 2, 3, 4, 4, 5, 10, 9, 3, 8, 0, 2, 2, 9, 0, 4, 8, 6, 3, 8, 6, 7, 3, 0, 6, 7, 6, 8, 9, 5, 10, 4, 1, 4, 10, 3, 4, 0, 10, 9, 4, 10, 4, 7}
  23. Element(randomNosForX, Mod[questionCount, 100] + 1) → numX
  24. Shuffle(Sequence[Random[0, 10], i, 1, 100]) → randomNosForY, {10, 3, 3, 8, 1, 2, 3, 0, 3, 0, 2, 8, 0, 6, 3, 5, 2, 1, 3, 2, 6, 8, 5, 5, 2, 9, 10, 10, 7, 4, 3, 10, 10, 5, 2, 1, 7, 2, 8, 8, 6, 8, 1, 2, 7, 9, 7, 1, 1, 10, 3, 3, 8, 4, 2, 10, 10, 4, 0, 8, 8, 7, 5, 0, 5, 8, 0, 7, 0, 0, 2, 8, 9, 7, 10, 3, 1, 9, 1, 1, 9, 0, 3, 8, 0, 4, 0, 9, 6, 1, 2, 0, 1, 10, 4, 3, 0, 2, 5, 10}
  25. Element(randomNosForY, Mod[questionCount, 100] + 1) → numY
  26. Append(true, Sequence[If[randomNosForX(i) ≟ randomNosForX(i - 1), false, true], i, 2, 100]) → stayX
  27. Append(true, Sequence[If[randomNosForY(i) ≟ randomNosForY(i - 1), false, true], i, 2, 100]) → stayY
  28. Remove(Sequence[If[stayX(i), randomNosForX(i), 0], i, 1, 100], Sequence[0, i, 1, 100]) → randomNosForXwithoutRepeat
  29. Remove(Sequence[If[stayY(i), randomNosForY(i), 0], i, 1, 100], Sequence[0, i, 1, 100]) → randomNosForYwithoutRepeat
  30. Element(randomNosForXwithoutRepeat, Mod[questionCount, Length[randomNosForXwithoutRepeat]] + 1) → numXwithoutRepeat
  31. Element(randomNosForYwithoutRepeat, Mod[questionCount, Length[randomNosForYwithoutRepeat]] + 1) → numYwithoutRepeat
  32. Length(ExNumList) → questionCountMax
  33. Element(TextRGlobal, exNum) → TextRLocal
  34. Sequence(Text[(("\textsf{" * TextRLocal(i)) * "}"), PR(i) + (0.1, 0.05), false, true, 1, 0], i, 1, anzahlR) → TextRBesch
  35. Text("$\textsf{Vicky}$", PL(1) + (-0.1, 0.05), false, true, -1, 0) → Text4
  36. Text("$\textsf{Trixi}$", PL(2) + (-0.1, 0.05), false, true, -1, 0) → Text5
  37. Text("$\textsf{Max}$", PL(3) + (-0.1, 0.05), false, true, -1, 0) → Text6
  38. Text("$\textsf{Alex}$", PL(4) + (-0.1, 0.05), false, true, -1, 0) → Text7
  39. Text("$\textsf{Anna}$", PL(5) + (-0.1, 0.05), false, true, -1, 0) → Text8
  40. Distance(Corner[Aussage1Helper, 4], Corner[Aussage1Helper, 3]) → laengeAussage1
  41. Distance(Corner[Aussage2Helper, 4], Corner[Aussage2Helper, 3]) → laengeAussage2
  42. If(phase ≟ 1, laengeAussage1, laengeAussage2) → langeAussageMaster
  43. SpeechBubbleLeft(SpeechAnchor1, langeAussageMaster, 0.6) → Speech1
  44. Circle(PR(1), radius) → VCirc1
  45. Circle(PR(2), radius) → VCirc2
  46. Circle(PR(3), radius) → VCirc3
  47. Circle(PR(4), radius) → VCirc4
  48. Circle(PR(5), radius) → VCirc5
  49. Circle(PR(6), radius) → VCirc6
  50. Ellipse(Ell11, Ell12, Ell13) → ell1
  51. Translate(ell1, Vector[(-(x(TopR) - (x(TopL) * 3.5), 0))]) → ell1'
  52. Segment(If[connection1start ≟ 1, PL(1), connection1start ≟ 2, PL(2), connection1start ≟ 3, PL(3), connection1start ≟ 4, PL(4), connection1start ≟ 5, PL(5)], If[connection1end ≟ 1, PR(1), connection1end ≟ 2, PR(2), connection1end ≟ 3, PR(3), connection1end ≟ 4, PR(4), connection1end ≟ 5, PR(5)]) → sol1
  53. Segment(If[connection2start ≟ 1, PL(1), connection2start ≟ 2, PL(2), connection2start ≟ 3, PL(3), connection2start ≟ 4, PL(4), connection2start ≟ 5, PL(5)], If[connection2end ≟ 1, PR(1), connection2end ≟ 2, PR(2), connection2end ≟ 3, PR(3), connection2end ≟ 4, PR(4), connection2end ≟ 5, PR(5)]) → sol2
  54. Text(ZuordnungsTxtHelper, ZuordnungsTxtPos, false, true, -1, 0) → ZuordnungsTxt
  55. Element(OtherConnectionsL, exNum) → OtherConnectionsLocal
  56. Segment(PL(x(OtherConnections1)), PR(y(OtherConnections1))) → connectionother1
  57. Segment(PL(x(OtherConnections2)), PR(y(OtherConnections2))) → connectionother2
  58. Segment(PL(x(OtherConnections3)), PR(y(OtherConnections3))) → connectionother3
  59. Text(Text10, C, false, true, 0, 0) → Text11
  60. If(exNum ≟ 1, PL(3), PL(2), exNum ≟ 2, PL(3), exNum ≟ 5, PL(5), exNum ≟ 6, PL(5), exNum ≟ 8, PL(2)) → HintCircCenter
  61. Circle(HintCircCenter, 0.25) → HintCirc
  62. Segment(PL(3), PR(4)) → ExtraEx1
  63. Circle(PL(5), 0.25) → HintCirc2
  64. Segment(PL(2), PR(4)) → ExtraEx8
  65. Sequence(L + ((dfxBalken * i), 0), i, 0, 3) → BalkenOben
  66. Circle(D, rcirc) → c
  67. Sequence(Rotate[D + (0, rcirc), ((-360°) / 3 * i), D], i, 0, 3) → KreisP
  68. If(validate ∧ (correct ∨ showsolution), phase + 1, phase) → phaseProgress
  69. If(phaseProgress < 4, {CircleSector[D, E, KreisP(1)]}, {Circle[D, rcirc]}) → l1
  70. Sequence(Segment[D, KreisP(i)], i, 1, 3) → l2
  71. Segment(PL(5), PR(3)) → connectionotherEx5