Making Similar Triangles

Making Similar Triangles
Loading the math board and drawing, please wait…
2022-11-22 04:29
This activity demonstrates how to create similar triangles using proportions. The key mathematical concepts involve the properties of similar triangles and the relationships between their corresponding parts. Construction involves GeoGebra commands such as RandomUniform, Polygon, Rotate, etc. Suitable for students in grades 6-8 for geometry practice.

GeoGebra Commands & Parameters

  1. RandomUniform(0, 0.99, 200) → allRandomSeeds, {0.1973291391909136, 0.6432058017785154, 0.5220962330650862, 0.3406966616037323, 0.7799136318344704, 0.20397857036896422, 0.4204266090082648, 0.6848733518068142, 0.2778293275431739, 0.8684731623484921, 0.2121712309447309, 0.8549263189483602, 0.5971477709352958, 0.19950859406898777, 0.4090108149668096, 0.8899268130908313, 0.9644849306959234, 0.6816813809857319, 0.7665811336541813, 0.5632353491354566, 0.38958492878233764, 0.5781168849286876, 0.5823501793966774, 0.9155612129192731, 0.6944178150642528, 0.6362323470605767, 0.2399239337148903, 0.13053141523324055, 0.1302687677007886, 0.5312921276157896, 0.7390469226044747, 0.9467985748832267, 0.2907325361268494, 0.7572673135972761, 0.9524678579665011, 0.15566799777127135, 0.8133997391058173, 0.7011827498144554, 0.08618262682717855, 0.9391128943791076, 0.49633180280145184, 0.7697411859622655, 0.5383458671752971, 0.6398733610066295, 0.547170038649443, 0.43555938627384544, 0.7843594977703918, 0.5830976261404588, 0.8729094198978986, 0.2748338334980686, 0.7413008460527021, 0.42768605332759035, 0.5369907745419658, 0.12867282162547264, 0.4239443990610622, 0.9451361619204791, 0.34742570715404963, 0.7966900895726556, 0.1471611917561689, 0.5842643421060739, 0.5751666223120148, 0.793749263685063, 0.13544584897588305, 0.9816920145056246, 0.9258697627054625, 0.9789811271004502, 0.649726365111329, 0.08043675096379434, 0.5305720480332028, 0.19036580578885706, 0.834453051331257, 0.19233641632268894, 0.5016134441008352, 0.21827911841528166, 0.2742421495081112, 0.12436093011367583, 0.8193841298709819, 0.917447391426608, 0.9390673195457571, 0.11413026272587852, 0.53316172238101, 0.5287374018587652, 0.6701453661115752, 0.06615781383528967, 0.0354266426875939, 0.5901281766015841, 0.2352551354106864, 0.5774774665077795, 0.16360412743597985, 0.6400684696485176, 0.41225770920334387, 0.7193886424213919, 0.04617997086600173, 0.7962191711375907, 0.9530525008525688, 0.7510672511827904, 0.08157182951657337, 0.3383117854835251, 0.9371083249011084, 0.5007417362696466, 0.3980116542361158, 0.49552435363621355, 0.3340506429674714, 0.40102217667215206, 0.07100518575637813, 0.6363837390749949, 0.708564804448165, 0.7267961790203483, 0.7516820658795272, 0.16274747322766533, 0.8980924724483736, 0.006869506075969807, 0.18453646623029973, 0.4589018862054273, 0.9744525177395256, 0.024229983389185007, 0.616680284858681, 0.6522317696988099, 0.5146093762406228, 0.6044526702809849, 0.8727923154905505, 0.6732757003674189, 0.19334149358384564, 0.6273393581423965, 0.7504443602276323, 0.8102748030135234, 0.8615284747780941, 0.5134003579526704, 0.6194207157389863, 0.8065559919610069, 0.9881812075561275, 0.0842367457523407, 0.9360211105071451, 0.08826045415924379, 0.832179518950985, 0.21427029007947115, 0.7691470444569606, 0.7650350809556452, 0.2709623142907219, 0.5505946548649364, 0.9792198098788456, 0.7773504284802918, 0.1081315055253332, 0.15798471242075499, 0.7536641918056352, 0.32109012240608964, 0.750085338394068, 0.7773023006463384, 0.13381461761426958, 0.7729774193207871, 0.7433885180885575, 0.2976752182319037, 0.8276610724552951, 0.2692616338479101, 0.10961606155380411, 0.4959026008416251, 0.3108504486690363, 0.6948820492315709, 0.7928743632919496, 0.48055349942969544, 0.9647942980025912, 0.4910594690643345, 0.527107096322375, 0.6231762824502348, 0.855606839538919, 0.9259357686921853, 0.005636077422172855, 0.09492579346898235, 0.650908074865662, 0.3154882798740696, 0.26416548004074253, 0.7737407427399046, 0.6432746179491672, 0.02049214677353729, 0.23069558540578228, 0.5649678232478307, 0.5993063488325018, 0.8697848948336719, 0.5914458752692994, 0.7670303973756225, 0.721900144380018, 0.2405083132560324, 0.26097937337265165, 0.6733775326194165, 0.7303825930758941, 0.4523596196237405, 0.17724923231981238, 0.19252622577002168, 0.9786514545548936, 0.4851791120220793, 0.9282558920707329, 0.6795228647684076, 0.8854112681863545, 0.9374337478670834, 0.7964063601100783, 0.24460101777340643, 0.3929614470740334, 0.687326042408966, 0.869510353104017, 0.7582017311325526}
  2. Polygon({(-1, -1), (-1, maxDisplay), (maxDisplay, maxDisplay), (maxDisplay, -1)}) → moveArea
  3. PointIn(moveArea) → FMove
  4. Take(allRandomSeeds, randIndex, randIndex + numRandoms - 1) → currentRandomSeeds
  5. Element({0.5, 0.6, 0.75, 0.8, 2, 1.25, 1.5}, 1 + floor((currentRandomSeeds(2) * 7))) → scaleFactor
  6. If(scaleFactor < 1, 1 / scaleFactor, scaleFactor) → scaleUp
  7. Element({{3, 4, 5}, {3, 6, 4}, {4, 7, 6}, {3, 7, 6}, {3, 8, 6}}, caseNum) → lengthsCurrent
  8. Rotate(TemplateA + (lengthsCurrent(2), 0), angleA, TemplateA) → TemplateC
  9. TriangleCenter(TemplateA, TemplateB, TemplateC, 1) → CenterTemplate
  10. Rotate(templateVertices, rotationAngle, CenterTemplate) → templateVerticesRotated
  11. If(smallLeft, Max[x(TemplateB), x(TemplateC)], Max[(0.75 * maxXRotated), maxYRotated]) → maxLength
  12. If(smallLeft, Dilate[templateVertices, maxDisplay / maxLength, TemplateA], Dilate[templateVerticesRotated, maxDisplay / maxLength, CenterTemplate]) → templateVerticesLarge
  13. If(smallLeft, Dilate[templateVerticesRotated, (maxDisplay / maxLength * 1 / scaleUp), CenterTemplate], Dilate[templateVertices, (maxDisplay / maxLength * 1 / scaleUp), TemplateA]) → templateVerticesSmall
  14. If(smallLeft, templateVerticesLarge, templateVerticesSmall) → verticesRight
  15. TriangleCenter(templateVerticesSmall(1), templateVerticesSmall(2), templateVerticesSmall(3), 1) → CenterSmall
  16. Numerator(scaleUp) → multiplier
  17. Segment(verticesRight(1), verticesRight(2)) → sideDE
  18. Segment(verticesRight(1), If[(¬showsolution) ∧ (¬showanswer), FMove, FSoln]) → sideFD
  19. Segment(verticesRight(2), If[(¬showsolution) ∧ (¬showanswer), FMove, FSoln]) → sideEF
  20. Zip(Midpoint[A, B] + UnitOrthogonalVector[A - B], A, {verticesRight(1), verticesRight(2), If[(¬showsolution) ∧ (¬showanswer), FMove, FSoln]}, B, {verticesRight(2), If[(¬showsolution) ∧ (¬showanswer), FMove, FSoln], verticesRight(1)}) → lblPosRight
  21. If(FMove ≟ verticesRight(3), sidesSolution, Zip[closestFraction[(displayFactor * A), denominators], A, {sideDE, sideEF, sideFD}]) → displayLengthsRight
  22. Min(Zip[x(A), A, templateVerticesLarge]) → minXLarge
  23. Max(Zip[x(A), A, templateVerticesLarge]) → maxXLarge
  24. Min(Zip[y(A), A, templateVerticesLarge]) → minYLarge
  25. Translate(If[smallLeft, templateVerticesSmall, templateVerticesLarge], If[smallLeft, CenterLeft - CenterSmall, vMove]) → verticesLeft
  26. Zip(Midpoint[A, B] + (0.7 * UnitOrthogonalVector[A - B]), A, verticesLeft, B, {verticesLeft(2), verticesLeft(3), verticesLeft(1)}) → lblPosLeft
  27. Max(Zip[y(A), A, templateVerticesLarge]) → maxYLarge
  28. Zip(Distance[CenterTemplate, A], A, {TemplateA, TemplateB, TemplateC}) → distanceFromCenter
  29. TriangleCenter(templateVerticesLarge(1), templateVerticesLarge(2), templateVerticesLarge(3), 1) → CenterLarge
  30. If(¬showsolution, 250, 250) → layoutY
  31. Corner(5) → layoutAppSize
  32. onboardingTextOffset(Corner[onboardingText, 1], Corner[onboardingText, 3], onboardingCase, Corner[1], Corner[3], Corner[5]) → OnboardingTextOffset
  33. Polygon(verticesRight) → solnTriangle
  34. getLabelPos(verticesLeft(1), verticesLeft(2), verticesLeft(3), 0.7, 1) → lblPosVertsLeft
  35. Zip(Text[("" * A), B, false, true, 0, 0], A, {"A", "B", "C", "D"}, B, lblPosVertsLeft) → labelVertsLeft
  36. Zip(Text[("" * A), B, true, true, 0, 0], A, lblLeftColor, B, lblPosLeft) → lblLeft
  37. FractionText(scaleFactor) → scaleLatex
  38. Polygon({verticesRight(1), verticesRight(2), FMove}) → studentTriangle
  39. Zip(Text[("" * A), B, true, true, 0, 0], A, lblRightColor, B, lblPosRight) → lblRight
  40. Segment(verticesLeft(1), verticesLeft(2)) → sideAB
  41. Segment(verticesLeft(2), verticesLeft(3)) → sideBC
  42. Segment(verticesLeft(3), verticesLeft(1)) → sideCA
  43. circlePixels(FMove, 7 + (7 * pulsing), Corner[1], Corner[3], Corner[5]) → pulsingPoint
  44. Polygon({verticesRight(1), verticesRight(2), FMove}) → studentAnswer
  45. Text("D", (0, 0), true, true, -1, -1) → lblD
  46. Text("E", verticesRight(2), true, true, 1, -1) → lblE
  47. If(¬showsolution, 15, 30) → xMax
  48. Sequence(acosd(((lengthsCurrent(2))^(2) + (lengthsAll(n, 3))^(2) - (lengthsAll(n, 1))^(2)) / (((2 * lengthsCurrent(2)) * lengthsAll(n, 3)))), n, 1, 5) → anglesA, {36.86989764584401*°, 44.04862567408433*°, 41.40962210927086*°, 26.38432974940796*°, 26.38432974940796*°}
  49. Sequence(Rotate[TemplateA + (lengthsAll(n, 2), 0), anglesA(n), TemplateA], n, 1, 5) → TemplatesC
  50. If(smallLeft, Dilate[TemplatesC, maxDisplay / maxLength, TemplateA], Dilate[TemplatesC, (maxDisplay / maxLength * 1 / scaleUp), TemplateA]) → thirdPossibilitiesStart
  51. Flatten(Zip[{n, Mirror[n, x = x(Element[verticesRight, 2]) / 2]}, n, thirdPossibilitiesStart]) → thirdPossibilities
  52. ClosestPoint(thirdPossibilities, FMove) → closestVal

AI Drawing Prompt Reference

Draw two similar triangles, one with vertices A, B, C and the other with vertices D, E, F. Use a scale factor to ensure the corresponding sides of the triangles are proportional. Start by randomly generating one triangle, then create a similar triangle by scaling it up or down according to the scale factor. Make sure the corresponding sides of the similar triangles are proportional and the vertices are correctly positioned.
The prompt above was compiled from the original drawing commands and is for reference only.