Applying Proportions to Similar Polygons

Applying Proportions to Similar Polygons
Loading the math board and drawing, please wait…
2023-03-28 10:37
This example demonstrates how to use proportions to solve for missing side lengths in similar polygons. The key mathematical concept is proportional reasoning for similar polygons. Construction involves using GeoGebra commands like Shuffle, RandomUniform, Polygon, and equations to set up and solve proportions. It is suitable for students in grades 6-8 to practice applying proportional reasoning to similar polygons.

GeoGebra Commands & Parameters

  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 Drawing Prompt Reference

Draw two similar polygons side by side, with the left one smaller and the right one larger by a scale factor. Each polygon can be a triangle or quadrilateral with randomly chosen side lengths. The right polygon's sides are the left's sides multiplied by the scale factor. Place them horizontally with some rotation, and label each side with its length: original lengths on the left, scaled lengths on the right. Use solid outlines and clear text labels on a white background, emphasizing the proportional relationship between corresponding sides.
The prompt above was compiled from the original drawing commands and is for reference only.