Modeling Ratios
Loading the math board and drawing, please wait…
This example demonstrates how to model and understand ratio relationships using bar chart models. Key mathematical concepts include ratios and percentages. Using GeoGebra commands such as If, SelectedIndex, Segment, etc., bar chart models are constructed to represent the ratio relationship between different quantities. Suitable for middle school and above students to learn about ratios and percentages.
GeoGebra Commands & Parameters
If(quantity1 ≥ quantity2, ceil(quantity1), ceil(quantity2)) → ceilGreaterOfQuantity12SelectedIndex(visualType) → visualTypeSelectedSegment(VisualsMasterPt + ((quantity1 * unit), (2 * tapeDiagramModelsHeight) + tapeDiagramModelsVerticalGap), VisualsMasterPt + ((quantity1 * unit), tapeDiagramModelsHeight)) → tapeDiagram1PartWholeSlideSegPoint(tapeDiagram1PartWholeSlideSeg) → TapeDiagram1PartWholeSlidePtPolygon((-10, If[step2, -0.5, -3]), (99.12, If[step2, -0.5, -3]), (19.316210333404847, 97.60475090909095), (-9.803789666595154, 17.60475090909091)) → BackgroundYellow, f, g, h, iIf(step1, VisualsMasterPt + (5.6 - (0.6 * setModelRowCount), setModelVerticalOffset), (4.8, 8)) → Mix1cupsGreenImagesMasterPtIf(step1, VisualsMasterPt + (5.6 - (0.6 * setModelRowCount), setModelVerticalOffset), (10.5, 8)) → Mix1cupsWhiteImagesMasterPtPolygon(TapeDiagram1PartWholeRefPt, TapeDiagram1PartWholeRefPt + ((quantity1 * unit), 0), TapeDiagram1PartWholeRefPt + ((quantity1 * unit), tapeDiagramModelsHeight), TapeDiagram1PartWholeRefPt + (0, tapeDiagramModelsHeight)) → tapeDiagram1Quantity1Poly, tapeDiagram1Quantity1PolySeg_1, tapeDiagram1Quantity1PolySeg_2, tapeDiagram1Quantity1PolySeg_3, tapeDiagram1Quantity1PolySegPolygon(VisualsMasterPt + (0, 0), VisualsMasterPt + ((quantity2 * unit), 0), VisualsMasterPt + ((quantity2 * unit), tapeDiagramModelsHeight), VisualsMasterPt + (0, tapeDiagramModelsHeight)) → tapeDiagram1Quantity2Poly, tapeDiagram1Quantity2PolySeg_1, tapeDiagram1Quantity2PolySeg_2, tapeDiagram1Quantity2PolySeg_3, tapeDiagram1Quantity2PolySegPolygon(VisualsMasterPt + (0, tapeDiagram2VerticalOffset), VisualsMasterPt + (tapeDiagramModelsWidth, tapeDiagram2VerticalOffset), VisualsMasterPt + (tapeDiagramModelsWidth, tapeDiagramModelsHeight + tapeDiagram2HeightDiff + tapeDiagram2VerticalOffset), VisualsMasterPt + (0, tapeDiagramModelsHeight + tapeDiagram2HeightDiff + tapeDiagram2VerticalOffset)) → tapeDiagram2Outline, tapeDiagram2OutlineSeg_1, tapeDiagram2OutlineSeg_2, tapeDiagram2OutlineSeg_3, tapeDiagram2OutlineSegPolygon(VisualsMasterPt + (0, tapeDiagram2VerticalOffset), VisualsMasterPt + ((quantity1 * unit), tapeDiagram2VerticalOffset), VisualsMasterPt + ((quantity1 * unit), tapeDiagramModelsHeight + tapeDiagram2HeightDiff + tapeDiagram2VerticalOffset), VisualsMasterPt + (0, tapeDiagramModelsHeight + tapeDiagram2HeightDiff + tapeDiagram2VerticalOffset)) → tapeDiagram2Quantity1Poly, tapeDiagram2Quantity1PolySeg_1, tapeDiagram2Quantity1PolySeg_2, tapeDiagram2Quantity1PolySeg_3, tapeDiagram2Quantity1PolySegMidpoint(VisualsMasterPt, VisualsMasterPt + (tapeDiagramModelsWidth, 7)) → CircleModelCenterCircle(CircleModelCenter, circleModelRadius) → mix1circleModelOutlineCircle(CircleModelCenter, circleModelRadius) → circleModelWhiteBackgroundConic((15.8, 6.2), (20, 6.1), (20.2, 9.3), (17, 9.8), (15.4, 8.44)) → feedbackBackgroundWhitePolygon((-100, 6.65), (100, 6.65), (100, 9.2), (-100, 9.2)) → questionBackgroundWhite, i_1, m_1, n_1, p_1Conic((15.8, 6.2), (20, 6.1), (20.2, 9.3), (17, 9.8), (15.4, 8.44)) → feedbackBackgroundWhiteBorderTextfield(quantity1LabelForLengthAlwaysShow) → quantity1labelInputBoxTextfield(quantity2LabelForLengthAlwaysShow) → quantity2labelInputBoxPolygon(ColorBoxesPt + (0, colorBoxesGap), ColorBoxesPt + (colorBoxesWidth, colorBoxesGap), ColorBoxesPt + (colorBoxesWidth, colorBoxesGap + colorBoxesHeight), ColorBoxesPt + (0, colorBoxesGap + colorBoxesHeight)) → step1ColorBoxQuantity1Red, step1ColorBoxQuantity1RedSeg_1, step1ColorBoxQuantity1RedSeg, step1ColorBoxQuantity1RedSeg_2, step1ColorBoxQuantity1RedSeg_3Polygon(ColorBoxesPt + (0, 0), ColorBoxesPt + (colorBoxesWidth, 0), ColorBoxesPt + (colorBoxesWidth, colorBoxesHeight), ColorBoxesPt + (0, colorBoxesHeight)) → step1ColorBoxQuantity2Blue, step1ColorBoxQuantity2BlueSeg_1, step1ColorBoxQuantity2BlueSeg_2, step1ColorBoxQuantity2BlueSeg_3, step1ColorBoxQuantity2BlueSegTextfield(quantity1) → quantity1valueInputBoxTextfield(quantity2) → quantity2valueInputBoxSequence(Segment[CircleModelCenter, Rotate[CircleModelSectorRefPt, ((i * 2) * π / sumQuantity12), CircleModelCenter]], i, 0, sumQuantity12 - 1, 1) → circleModelDividersPolygon(TapeDiagram1PartWholeRefPt, TapeDiagram1PartWholeRefPt + ((ceil(quantity1) * unit), 0), TapeDiagram1PartWholeRefPt + ((ceil(quantity1) * unit), tapeDiagramModelsHeight), TapeDiagram1PartWholeRefPt + (0, tapeDiagramModelsHeight)) → tapeDiagram1Quantity1PolyWhite, tapeDiagram1Quantity1PolyWhiteSeg_1, tapeDiagram1Quantity1PolyWhiteSeg_2, tapeDiagram1Quantity1PolyWhiteSeg_3, tapeDiagram1Quantity1PolyWhiteSegPolygon(VisualsMasterPt + (0, 0), VisualsMasterPt + ((ceil(quantity2) * unit), 0), VisualsMasterPt + ((ceil(quantity2) * unit), tapeDiagramModelsHeight), VisualsMasterPt + (0, tapeDiagramModelsHeight)) → tapeDiagram1Quantity2PolyWhite, tapeDiagram1Quantity2PolyWhiteSeg_2, tapeDiagram1Quantity2PolyWhiteSeg_3, tapeDiagram1Quantity2PolyWhiteSeg, tapeDiagram1Quantity2PolyWhiteSeg_1Polygon(VisualsMasterPt + ((quantity1 * unit), tapeDiagram2VerticalOffset), VisualsMasterPt + (If[ratioType ≟ 0 ∧ visualTypeSelected ≟ 2, (quantity1 * unit), 0] + (quantity2 * unit), tapeDiagram2VerticalOffset), VisualsMasterPt + (If[ratioType ≟ 0 ∧ visualTypeSelected ≟ 2, (quantity1 * unit), 0] + (quantity2 * unit), tapeDiagramModelsHeight + tapeDiagram2HeightDiff + tapeDiagram2VerticalOffset), VisualsMasterPt + ((quantity1 * unit), tapeDiagramModelsHeight + tapeDiagram2HeightDiff + tapeDiagram2VerticalOffset)) → tapeDiagram2Quantity2Poly, tapeDiagram2Quantity2PolySeg_1, tapeDiagram2Quantity2PolySeg_2, tapeDiagram2Quantity2PolySeg_3, tapeDiagram2Quantity2PolySegPolygon((2, -0.75), (19, -0.75), (19, 9.5), (2, 9.5)) → step1WhiteField, step1WhiteFieldSeg_1, step1WhiteFieldSeg_2, step1WhiteFieldSegTop, step1WhiteFieldSegLeftCircleSector(CircleModelCenter, CircleModelSectorRefPt, Rotate[CircleModelSectorRefPt, ((2 * π) * quantity1 / sumQuantity12), CircleModelCenter]) → circleModelSectorQuantity1CircleSector(CircleModelCenter, Rotate[CircleModelSectorRefPt, ((2 * π) * quantity1 / sumQuantity12), CircleModelCenter], CircleModelSectorRefPt) → circleModelSectorQuantity2Sequence(Segment[VisualsMasterPt + (i, tapeDiagram2VerticalOffset), VisualsMasterPt + (i, tapeDiagramModelsHeight + tapeDiagram2HeightDiff + tapeDiagram2VerticalOffset)], i, 0, (quantity1 * unit), unit) → tapeDiagram2Quantity1DividersSequence(Segment[VisualsMasterPt + ((quantity1 * unit) + i, tapeDiagram2VerticalOffset), VisualsMasterPt + ((quantity1 * unit) + i, tapeDiagramModelsHeight + tapeDiagram2HeightDiff + tapeDiagram2VerticalOffset)], i, 0, (If[ratioType ≟ 1, quantity2 - quantity1, quantity2] * unit), unit) → tapeDiagram2Quantity2DividersSegment(VisualsMasterPt + (0, tapeDiagramModelsHeight + tapeDiagramModelsVerticalGap - marksOffsetLine), VisualsMasterPt + ((ceil(quantity1) * unit), tapeDiagramModelsHeight + tapeDiagramModelsVerticalGap - marksOffsetLine)) → tapeDiagram1Quantity1marksLineTextfield(marksFrac) → marksFracInputBoxSegment(VisualsMasterPt + (0, tapeDiagramModelsHeight + marksOffsetLine), VisualsMasterPt + ((ceil(quantity2) * unit), tapeDiagramModelsHeight + marksOffsetLine)) → tapeDiagram1Quantity2marksLineSequence(Segment[TapeDiagram1PartWholeRefPt + (i, 0), TapeDiagram1PartWholeRefPt + (i, tapeDiagramModelsHeight)], i, 0, (quantity1 * unit), unit) → tapeDiagram1Quantity1DividersSegment(VisualsMasterPt + (0, tapeDiagramModelsHeight), TapeDiagram1PartWholeRefPt) → tapeDiagram1PartWholeRefLine1Segment(VisualsMasterPt + ((quantity1 * unit), tapeDiagramModelsHeight), TapeDiagram1PartWholeRefPt + ((quantity1 * unit), 0)) → tapeDiagram1PartWholeRefLine2Segment(TapeDiagram12Quantity2BraceRefPt + (0, (-tapeDiagram12BraceTriHeight)), TapeDiagram12Quantity2BraceRefPt + (tapeDiagram12BraceTriWidth, 0)) → tapeDiagram12Quantity2BraceTriSegRSegment(TapeDiagram12Quantity2BraceRefPt + (0, (-tapeDiagram12BraceTriHeight)), TapeDiagram12Quantity2BraceRefPt + ((-tapeDiagram12BraceTriWidth), 0)) → tapeDiagram12Quantity2BraceTriSegLSequence(Segment[VisualsMasterPt + (0 + i, 0), VisualsMasterPt + (0 + i, tapeDiagramModelsHeight)], i, 0, (quantity2 * unit), unit) → tapeDiagram1Quantity2DividersSequence(Segment[VisualsMasterPt + (i, tapeDiagram2VerticalOffset - marksOffset), VisualsMasterPt + (i, tapeDiagram2VerticalOffset - marksOffset + marksHeight)], i, 0, tapeDiagramModelsWidth, (marksFrac * unit)) → tapeDiagram2marksSegment(TapeDiagram12Quantity2BraceRefPt + ((-tapeDiagram12BraceTriWidth), 0), (x(VisualsMasterPt) + If[ratioType ≟ 1 ∨ visualTypeSelected ≟ 1, 0, (quantity1 * unit)], y(TapeDiagram12Quantity2BraceRefPt))) → tapeDiagram12Quantity2BraceSegLSegment((x(VisualsMasterPt) + If[ratioType ≟ 1 ∨ visualTypeSelected ≟ 1, 0, (quantity1 * unit)], y(TapeDiagram12Quantity2BraceRefPt)), (x(VisualsMasterPt) + If[ratioType ≟ 1 ∨ visualTypeSelected ≟ 1, 0, (quantity1 * unit)], y(TapeDiagram12Quantity2BraceRefPt) + 0.2)) → tapeDiagram12Quantity2BraceSegLCapSegment(TapeDiagram12Quantity2BraceRefPt + (tapeDiagram12BraceTriWidth, 0), (x(VisualsMasterPt) + If[ratioType ≟ 1 ∨ visualTypeSelected ≟ 1, 0, (quantity1 * unit)] + (quantity2 * unit), y(TapeDiagram12Quantity2BraceRefPt))) → tapeDiagram12Quantity2BraceSegRSegment((x(VisualsMasterPt) + If[ratioType ≟ 1 ∨ visualTypeSelected ≟ 1, 0, (quantity1 * unit)] + (quantity2 * unit), y(TapeDiagram12Quantity2BraceRefPt)), (x(VisualsMasterPt) + If[ratioType ≟ 1 ∨ visualTypeSelected ≟ 1, 0, (quantity1 * unit)] + (quantity2 * unit), y(TapeDiagram12Quantity2BraceRefPt) + 0.2)) → tapeDiagram12Quantity2BraceSegRCapSequence(Segment[TapeDiagram1PartWholeRefPt + (i, (-marksOffset)), TapeDiagram1PartWholeRefPt + (i, (-marksOffset) + marksHeight)], i, 0, (ceil(quantity1) * unit), (marksFrac * unit)) → tapeDiagram1Quantity1marksSequence(Segment[VisualsMasterPt + (i, tapeDiagramModelsHeight + marksOffset), VisualsMasterPt + (i, tapeDiagramModelsHeight + marksOffset - marksHeight)], i, 0, (ceil(quantity2) * unit), (marksFrac * unit)) → tapeDiagram1Quantity2marksSegment(TapeDiagram12Quantity1BraceRefPt + ((-tapeDiagram12BraceTriWidth), 0), (x(VisualsMasterPt), y(TapeDiagram12Quantity1BraceRefPt))) → tapeDiagram12Quantity1BraceSegLSegment(TapeDiagram12Quantity1BraceRefPt + (0, tapeDiagram12BraceTriHeight), TapeDiagram12Quantity1BraceRefPt + ((-tapeDiagram12BraceTriWidth), 0)) → tapeDiagram12Quantity1BraceTriSegLSegment(TapeDiagram12Quantity1BraceRefPt + (0, tapeDiagram12BraceTriHeight), TapeDiagram12Quantity1BraceRefPt + (tapeDiagram12BraceTriWidth, 0)) → tapeDiagram12Quantity1BraceTriSegRSegment((x(VisualsMasterPt), y(TapeDiagram12Quantity1BraceRefPt)), (x(VisualsMasterPt), y(TapeDiagram12Quantity1BraceRefPt) - 0.2)) → tapeDiagram12Quantity1BraceSegLCapSegment(TapeDiagram12Quantity1BraceRefPt + (tapeDiagram12BraceTriWidth, 0), (x(VisualsMasterPt) + (quantity1 * unit), y(TapeDiagram12Quantity1BraceRefPt))) → tapeDiagram12Quantity1BraceSegRSegment((x(VisualsMasterPt) + (quantity1 * unit), y(TapeDiagram12Quantity1BraceRefPt)), (x(VisualsMasterPt) + (quantity1 * unit), y(TapeDiagram12Quantity1BraceRefPt) - 0.2)) → tapeDiagram12Quantity1BraceSegRCapSequence(Segment[(3 + k, 6), (9.4 + k, 6)], k, 0, 8.6, 8.6) → step1DividerSegmentsPolygon((4.4, 5.2), (4.4, 4), (6.5, 4), (6.5, 5.2)) → hideRatioLanguageList, j, k, l, m