使用比例解决相似多边形问题

使用比例解决相似多边形问题
几何画板及绘图内容加载中,请稍等……
2023-03-28 10:37
这个范例演示了如何利用比例关系解决相似多边形的缺失边长问题。核心数学概念是相似多边形的比例推理。作图要点包括使用GeoGebra命令如Shuffle、RandomUniform、Polygon等来生成随机多边形,并通过比例方程求解缺失边长。该范例适合6-8年级学生,用于练习相似多边形的比例应用。

GeoGebra 命令及参数

  1. Shuffle({1, 2, 3}) → randomTriangleIndices, {3, 2, 1}
  2. Shuffle(Sequence[5, 12]) → randomLengths, {6, 7, 12, 9, 8, 5, 11, 10}
  3. Shuffle(Remove[Sequence[A, A, pi / 12, (23 * pi / 12), pi / 12], {pi}]) → randomRotations, {2.6179938779914944, 3.6651914291880927, 4.71238898038469, 1.0471975511965976, 0.7853981633974483, 5.497787143782137, 1.8325957145940457, 4.188790204786391, 4.974188368183839, 0.5235987755982988, 5.235987755982988, 2.356194490192345, 0.2617993877991494, 2.879793265790644, 3.403392041388943, 2.0943951023931953, 6.021385919380435, 4.4505895925855405, 1.5707963267948963, 3.9269908169872423, 1.308996938995747, 5.759586531581286}
  4. Shuffle({2, 1.5}) → randomScales, {1.5, 2}
  5. Shuffle({1, 2, 3, 4}) → randomQuadIndices, {3, 4, 2, 1}
  6. RandomUniform(0.1, 0.99, 100) → randomSeeds, {0.9159242885544292, 0.7194722776909817, 0.9074735971434146, 0.6128008993023989, 0.6398424420560205, 0.8476743339724296, 0.23708350263339747, 0.47145764691659575, 0.5844839968135862, 0.1334438830349507, 0.4573305252766091, 0.23648333817669845, 0.5850007551380615, 0.4116709711637444, 0.5603809173535015, 0.8987351586063724, 0.3024573988334601, 0.7323727958119245, 0.6312053729671658, 0.24241167720296278, 0.25138142635656, 0.31058419244100366, 0.10033509766738295, 0.4293866648285155, 0.31383042449484, 0.2952737761672871, 0.18949233362772308, 0.5138777477802821, 0.6257695639525194, 0.7344084951276636, 0.5131778462626245, 0.2625271748494207, 0.4365221467333904, 0.750213786629001, 0.6213000117973142, 0.7401767305344435, 0.7535898613204102, 0.354662467057993, 0.18149427870205279, 0.1908870831317645, 0.9032350372364875, 0.9002745369089312, 0.584909314849013, 0.9570810413449745, 0.7518749121312592, 0.755421261744991, 0.6259248421994813, 0.4570835825594882, 0.9245593102568908, 0.32650074218762515, 0.28451870723579153, 0.3427861128003934, 0.5645856480236486, 0.16158863155632064, 0.3198150295531721, 0.5946801588855877, 0.19265157550413198, 0.8014664200546204, 0.3647219628611411, 0.4610857021093919, 0.23485324618705317, 0.7342908987762164, 0.20450754088234366, 0.22204211737698748, 0.756307997865953, 0.6695924564101424, 0.5966636340487064, 0.6760345454796468, 0.5712137937343463, 0.5257761363030851, 0.9254725642078748, 0.7494960694222188, 0.6907527618191324, 0.12284801084788498, 0.2923180159061032, 0.38485651384230435, 0.6374053545836568, 0.14870110363617653, 0.5119713718006532, 0.9528008592739939, 0.5779613818113712, 0.8129686403808443, 0.8258362211346547, 0.6883555130353801, 0.28779796317947676, 0.14718877888495246, 0.555448578418895, 0.9484381836122161, 0.42583998139340296, 0.37382401042565694, 0.18340729659359528, 0.12058747562360442, 0.1730269268160666, 0.8795393706363878, 0.6843482517268716, 0.8487302713722331, 0.47708030120654676, 0.4500678928699585, 0.8355783613763982, 0.6420508930294732}
  7. Zip(floor((A * 100)), A, randomSeeds) → randomValues
  8. RemoveUndefined(Zip[If[A ≠ HOME, A], A, inputProportion]) → studentArrangement
  9. RemoveUndefined(Sequence[If[currentLocations(A) ≠ HOME, A], A, 1, Length[currentLocations]]) → studentValues
  10. If(IsInteger[countQuestion / 2], 1, 2) → caseNum
  11. If(caseNum ≟ 1, randomTriangleIndices, randomQuadIndices) → randomIndices
  12. If(countQuestion ≟ 0, 2, Element[randomIndices, Mod[(2 * countQuestion) + 1, Length[randomIndices]] + 1]) → indexSide
  13. If(countQuestion ≟ 0, 1, Element[randomIndices, Mod[(2 * countQuestion), Length[randomIndices]] + 1]) → indexX
  14. If(countQuestion ≟ 0, pi / 2, randomRotations(Mod[countQuestion, Length[randomRotations]] + 1)) → rotationStart
  15. If(rotationStart > pi, 1, -1) → rotateDirection
  16. PointToPixels(Corner[1], Corner[3], Corner[5], P3) → StartPixels
  17. If(countQuestion ≟ 0, {5, 7, 8, 9}, Sort[{val1, val2, val3, val4}]) → currentVals
  18. If(currentVals(3) ≥ currentVals(1) + currentVals(2), currentVals(1) + currentVals(2) - 1, currentVals(3)) → length3
  19. If(caseNum ≟ 1, {length1, length3, length2}, {length1, length3, length4, length2}) → leftLengths
  20. If(countQuestion ≟ 0, 2, Element[randomScales, Mod[countQuestion, Length[randomScales]] + 1]) → scaleFactor
  21. Zip((scaleFactor * A), A, leftLengths) → rightLengths
  22. If(labelledObject ≟ RIGHT, leftLengths(indexX), rightLengths(indexX)) → expectedAns
  23. Element(movingPoints, movingIndex) → PMove
  24. centerBox(boxWidth, boxWidth, boxAnchors(4)) → frame4
  25. centerBox(boxWidth, boxWidth, boxAnchors(3)) → frame3
  26. centerBox(boxWidth, boxWidth, boxAnchors(2)) → frame2
  27. centerBox(boxWidth, boxWidth, boxAnchors(1)) → frame1
  28. Rotate(PtA + (length2, 0), angleA, PtA) → PtC
  29. CircleArc(PtB, PtB + (length3 * UnitVector[PtB - PtC]), PtB - (length3 * UnitVector[PtB - PtC])) → arcB
  30. CircleArc(PtC, PtC + (length4 * UnitVector[PtA - PtC]), PtC - (length4 * UnitVector[PtA - PtC])) → arcC
  31. Intersect(arcB, arcC) → PtD, , ,
  32. If(caseNum ≟ 1, {PtA, PtB, PtC}, {PtA, PtB, PtD, PtC}) → templateVertices
  33. Zip(PtA + (scaleFactor * (K - PtA)), K, templateVertices) → templateVerticesLarge
  34. If(caseNum ≟ 1, TriangleCenter[templateVertices(1), templateVertices(2), templateVertices(3), 1], Midpoint[templateVertices(1), templateVertices(3)]) → CenterLeft
  35. Zip(Rotate[A, rotationAngle, CenterLeft], A, templateVertices) → verticesLeft
  36. Max(Flatten[Sequence[Zip[Distance[verticesLeft(A), B], B, verticesLeft], A, 1, Length[verticesLeft]]]) → maxWidthLeft
  37. Polygon({(0, 0), (50, 0), (50, 32), (0, 32)}) → viewbox
  38. If(scaleFactor < 1, 1 / scaleFactor, scaleFactor) → scaleUp
  39. Corner(5) → layoutAppSize
  40. Polygon(verticesLeft) → polyLeft
  41. Vector(HomePoint, (5, 5)) → vSolnStart
  42. onboardingTextOffset(Corner[onboardingText, 1], Corner[onboardingText, 3], onboardingCase, Corner[1], Corner[3], Corner[5]) → OnboardingTextOffset
  43. Sort(Take[Append[randomLengths, randomLengths], Mod[(4 * countQuestion), Length[randomLengths]] + 1]) → currentLengths
  44. Polygon(templateVerticesLarge) → templateLarge
  45. Translate(templateVerticesLarge, vTrans) → verticesRight
  46. Polygon(verticesRight) → polyRight
  47. Zip(Midpoint[A, B] + (3 * UnitOrthogonalVector[A - B]), A, verticesLeft, B, Append[Take[verticesLeft, 2], verticesLeft(1)]) → lblPosLeft
  48. Zip(Midpoint[A, B] + (3 * UnitOrthogonalVector[A - B]), A, verticesRight, B, Append[Take[verticesRight, 2], verticesRight(1)]) → lblPosRight
  49. If(caseNum ≟ 1, getLabelPos3[verticesLeft(1), verticesLeft(2), verticesLeft(3), 2, 1], getLabelPos4[verticesLeft(1), verticesLeft(2), verticesLeft(3), verticesLeft(4), 2, 1]) → lblPosVertsLeft
  50. Zip(Text[("" * A), B, false, true, 0, 0], A, {"A", "B", "C", "D"}, B, lblPosVertsLeft) → labelVertsLeft
  51. If(caseNum ≟ 1, getLabelPos3[verticesRight(1), verticesRight(2), verticesRight(3), 2, 1], getLabelPos4[verticesRight(1), verticesRight(2), verticesRight(3), verticesRight(4), 2, 1]) → lblPosVertsRight
  52. Zip(Text[("" * A), B, false, true, 0, 0], A, {"X", "Y", "Z", "W"}, B, lblPosVertsRight) → labelVertsRight
  53. If(caseNum ≟ 2, Join[{lblPosLeft, lblPosRight}], Join[{lblPosLeft, {(0, 0)}, lblPosRight, {(0, 0)}}]) → allHomeAnchors
  54. centerBox(boxWidth, boxWidth, P1) → box1
  55. centerBox(boxWidth, boxWidth, P2) → box2
  56. centerBox(boxWidth, boxWidth, P3) → box3
  57. centerBox(boxWidth, boxWidth, P4) → box4
  58. centerBox(boxWidth, boxWidth, P5) → box5
  59. centerBox(boxWidth, boxWidth, P6) → box6
  60. centerBox(boxWidth, boxWidth, P7) → box7
  61. centerBox(boxWidth, boxWidth, P8) → box8
  62. IndexOf(true, Zip[IsInRegion[PMove, A], A, {frame1, frame2, frame3, frame4}]) → locationPMove
  63. centerBox(boxWidth, boxWidth, PMove) → highlightBox
  64. centerBox(boxWidth, boxWidth, boxAnchors(locationPMove)) → highlightFrame
  65. If(labelledObject ≟ RIGHT, Zip[(("" * A) * ""), A, rightLengths], Sequence[If[i ≟ indexX, "x", If[i ≟ indexSide, (("" * rightLengths(indexSide)) * ""), ""]], i, 1, 4]) → textRight
  66. If(labelledObject ≟ LEFT, Sequence[If[A > Length[leftLengths], "", ("" * leftLengths(A))], A, 1, 4], Sequence[If[i ≟ indexX, "x", If[i ≟ indexSide, (("" * leftLengths(indexSide)) * ""), ""]], i, 1, 4]) → textLeft
  67. Join({textLeft, textRight}) → textAllBoxes
  68. Text(("" * textAllBoxes(movingIndex)), If[Defined[PMove], PMove, (300, 300)], false, true, 0, 0) → textHighlight
  69. Defined(IndexOf[studentArrangement, possibleCorrectArrangements]) → correctArrangement
  70. If(labelledObject ≟ LEFT, rightLengths(indexSide), leftLengths(indexSide)) → denom1
  71. If(labelledObject ≟ LEFT, leftLengths(indexX), rightLengths(indexX)) → numer2
  72. If(labelledObject ≟ LEFT, leftLengths(indexSide), rightLengths(indexSide)) → denom2
  73. Textfield(studentX) → inputAns
  74. Zip(expandQuad[Vertex[A, 1], Vertex[A, 2], Vertex[A, 3], Vertex[A, 4], (7 * pulsing), Corner[1], Corner[3], Corner[5]], A, {box1, box2, box3, box4, box5, box6}) → pulsingObjects
  75. Sequence(If[currentLocations(i) ≟ HOME, i], i, 1, Length[allHomeAnchors]) → rotatePoints
  76. Sequence(allHomeAnchors(A), A, 1, Length[movingPoints]) → homeLocations
  77. RemoveUndefined(Sequence[If[currentLocations(A) ≟ HOME, (((("SetValue(P" * A) * ",homeLocations(") * A) * "))")], A, 1, 4]) → cmdRotate
  78. Sequence(If[Defined[IndexOf[A, expectedIndices]], textAllBoxes(A), ""], A, 1, Length[movingPoints]) → textNecessary
  79. Zip(Text[("" * A), B, true, true, 0, 0], A, If[step ≟ 1 ∧ triesStep1 > 2, textNecessary, textAllBoxes], B, movingPoints) → boxTextDisplay
  80. Zip(Text[("" * A), B, true, true, 0, 0], A, If[step ≟ 1 ∧ triesStep1 > 3, Take[textNecessary, 5], textRight], B, lblPosRight) → lblRight
  81. Zip(Text[("" * A), B, true, true, 0, 0], A, If[step ≟ 1 ∧ triesStep1 > 2, textNecessary, textLeft], B, lblPosLeft) → lblLeft
  82. Zip(boxTextDisplay(IndexOf[A, currentLocations]), A, {1, 2, 3, 4}) → studentDigitsOrdered
  83. RemoveUndefined(Sequence[If[¬Defined[IndexOf[A, expectedIndices]], (("SetValue(currentLocations," * A) * ",HOME)")], A, 1, numPoints]) → cmdSendDistractorsHome
  84. Sequence((("SetFixed(box" * A) * ",false,enableInput)"), A, 1, numPoints) → cmdFixBoxes
  85. Sequence((((((((("SetValue(P" * A) * ",If(currentLocations(") * A) * ")==HOME,homeLocations(") * A) * "),boxAnchors(currentLocations(") * A) * "))))"), A, 1, numPoints) → cmdOrganize

AI 绘图提示语参考

绘制两个相似多边形,左侧为较小的多边形,右侧为按比例放大的对应多边形。左侧多边形可以是三角形或四边形,其边长随机生成,右侧多边形的边长由左侧边长乘以一个缩放因子得到。两个多边形分别放置在画布左右两侧,并带有旋转角度。在多边形的每条边上标注边长数值,其中左侧多边形标注原始长度,右侧多边形标注放大后的长度。图形背景为白色,多边形使用实线边框,标注文字清晰可见。整体布局应体现相似多边形的对应边比例关系,便于观察和计算。
以上提示语为根据原始绘图命令整理而来,仅供参考。