Mixing Paint Ratios

Mixing Paint Ratios
Loading the math board and drawing, please wait…
2017-03-13 01:59
This example demonstrates the visualization of mixing different paint ratios to achieve various color blends. It involves core mathematical concepts like ratios, histograms, scalene triangles, frequency distribution, cones, and centroids or barycenters. The construction utilizes GeoGebra commands and objects such as Segment, Conic, Sequence, Polygon, SelectedIndex, Midpoint, Circle, and CircleSector. It is suitable for high school mathematics education, focusing on the application of ratios, statistics, and geometric constructions.

GeoGebra Commands & Parameters

  1. Segment(Can1PtMaster, Can1PtTopL) → Can1segL
  2. Segment(Can1PtBottomR, Can1PtTopR) → Can1segR
  3. Conic(Midpoint[Can1PtTopL, Can1PtTopR] + (0, -0.5), Can1PtTopR + (-0.04, 0), Midpoint[Can1PtTopL, Can1PtTopR] + (canWidth / 3, 0.5), Midpoint[Can1PtTopL, Can1PtTopR] + (((-canWidth)) / 3, 0.5), Can1PtTopL + (0.04, 0)) → can1lidConic
  4. Sequence(i, i, 0, cupsMax) → mix1cupsWhite
  5. Sequence(i, i, 0, cupsMax) → mix1cupsGreen
  6. Polygon(Can1PtMaster + (0, -0.006), Can1PtMaster + (canWidth, -0.006), Can1PtMaster + (canWidth, (canHeight * mix1cupsTotal / ((2 * cupsMax))) - 0.1), Can1PtMaster + (0, (canHeight * mix1cupsTotal / ((2 * cupsMax))) - 0.1)) → can1fillRectGreen, g, a, b, c
  7. Polygon(Can1PtMaster + (0, -0.013), Can1PtMaster + (canWidth, -0.013), Can1PtMaster + (canWidth, (canHeight * mix1cupsTotal / ((2 * cupsMax)))), Can1PtMaster + (0, (canHeight * mix1cupsTotal / ((2 * cupsMax))))) → can1fillRectWhite, d, e, f, q
  8. Polygon((-10, -2.02734), (99.12, -2.02734), (19.12, 97.97266), (-10, 17.97266)) → BackgroundYellow, l, m, n, p
  9. Polygon(Can1PtMaster + (-0.1, 0.048), Can1PtBottomR + (0.1, 0.048), Can1PtTopR, Can1PtTopL) → can1fillRectYellowBack, h, i, j, k
  10. Conic(Midpoint[Can1PtMaster, Can1PtBottomR] + (0, -0.5), Can1PtBottomR, Midpoint[Can1PtMaster, Can1PtBottomR] + (canWidth / 3, 0.5), Midpoint[Can1PtMaster, Can1PtBottomR] + (((-canWidth)) / 3, 0.5), Can1PtMaster) → can1bottomConic
  11. Polygon(A, B, C, D, E, F, G) → can1brushColorGreen, a_1, b_1, c_1, d_1, e_1, f_1, g_1
  12. Polygon(A, B, C, D, E, F, G) → can1brushColorWhite, a_2, b_2, c_2, d_2, e_2, f_2, g_2
  13. Conic(Midpoint[Can1PtMaster, Can1PtBottomR] + (0, -0.45), Can1PtBottomR + (0, 0.1), Midpoint[Can1PtMaster, Can1PtBottomR] + (canWidth / 3, 0.6), Midpoint[Can1PtMaster, Can1PtBottomR] + (((-canWidth)) / 3, 0.6), Can1PtMaster + (0, 0.1)) → can1bottomConicGreen
  14. Conic(Midpoint[Can1PtMaster, Can1PtBottomR] + (0, -0.49), Can1PtBottomR + (0, 0.05), Midpoint[Can1PtMaster, Can1PtBottomR] + (canWidth / 3, 0.6), Midpoint[Can1PtMaster, Can1PtBottomR] + (((-canWidth)) / 3, 0.6), Can1PtMaster + (0, 0.05)) → can1bottomConicWhite
  15. Polygon(Mix1visualsMasterPt + (0, tapeDiagramHeight + 0.1), Mix1visualsMasterPt + (If[SelectedElement[mix1cupsGreen] ≥ SelectedElement[mix1cupsWhite], tapeDiagRectModelWidth, (SelectedElement[mix1cupsGreen] * tapeDiagRectModelWidth / SelectedElement[mix1cupsWhite])], tapeDiagramHeight + 0.1), Mix1visualsMasterPt + (If[SelectedElement[mix1cupsGreen] ≥ SelectedElement[mix1cupsWhite], tapeDiagRectModelWidth, (SelectedElement[mix1cupsGreen] * tapeDiagRectModelWidth / SelectedElement[mix1cupsWhite])], (2 * tapeDiagramHeight)), Mix1visualsMasterPt + (0, (2 * tapeDiagramHeight))) → mix1tapeDiagGreenPoly, mix1tapeDiagGreenPolySeg_1, mix1tapeDiagGreenPolySeg_2, mix1tapeDiagGreenPolySeg_3, mix1tapeDiagGreenPolySeg
  16. Polygon(Mix1visualsMasterPt + (0, 0), Mix1visualsMasterPt + (If[SelectedElement[mix1cupsWhite] ≥ SelectedElement[mix1cupsGreen], tapeDiagRectModelWidth, (SelectedElement[mix1cupsWhite] * tapeDiagRectModelWidth / SelectedElement[mix1cupsGreen])], 0), Mix1visualsMasterPt + (If[SelectedElement[mix1cupsWhite] ≥ SelectedElement[mix1cupsGreen], tapeDiagRectModelWidth, (SelectedElement[mix1cupsWhite] * tapeDiagRectModelWidth / SelectedElement[mix1cupsGreen])], tapeDiagramHeight - 0.1), Mix1visualsMasterPt + (0, tapeDiagramHeight - 0.1)) → mix1tapeDiagWhitePoly, mix1tapeDiagWhitePolySeg_1, mix1tapeDiagWhitePolySeg_2, mix1tapeDiagWhitePolySeg_3, mix1tapeDiagWhitePolySeg
  17. Polygon(Mix1visualsMasterPt + (0, rectModelVerticalOffset), Mix1visualsMasterPt + (tapeDiagRectModelWidth, rectModelVerticalOffset), Mix1visualsMasterPt + (tapeDiagRectModelWidth, 3 + rectModelVerticalOffset), Mix1visualsMasterPt + (0, 3 + rectModelVerticalOffset)) → mix1rectAreaOutline, mix1rectAreaOutlineSeg_3, mix1rectAreaOutlineSeg, mix1rectAreaOutlineSeg_1, mix1rectAreaOutlineSeg_2
  18. SelectedIndex(mix1visualType) → mix1visualTypeSelected
  19. Polygon(Mix1visualsMasterPt + (0, rectModelVerticalOffset), Mix1visualsMasterPt + ((SelectedElement[mix1cupsGreen] * tapeDiagRectModelWidth / mix1cupsTotal), rectModelVerticalOffset), Mix1visualsMasterPt + ((SelectedElement[mix1cupsGreen] * tapeDiagRectModelWidth / mix1cupsTotal), 3 + rectModelVerticalOffset), Mix1visualsMasterPt + (0, 3 + rectModelVerticalOffset)) → mix1rectAreaGreenPoly, r, s, t, h_1
  20. Midpoint(Mix1visualsMasterPt, Mix1visualsMasterPt + (tapeDiagRectModelWidth, 3.8)) → Mix1circleModelCenter
  21. Circle(Mix1circleModelCenter, circleModelRadius) → mix1circleModelOutline
  22. Circle(Mix1circleModelCenter, circleModelRadius) → mix1circleModelGreenSector
  23. Sequence(Segment[Mix1circleModelCenter, Rotate[Mix1circleModelSectorRefPt, (i * (2 * π / mix1cupsTotal)), Mix1circleModelCenter]], i, 0, mix1cupsTotal - 1, 1) → mix1circleModelDividers
  24. CircleSector(Mix1circleModelCenter, Mix1circleModelSectorRefPt, Rotate[Mix1circleModelSectorRefPt, ((1.99999999999999 * π) * SelectedElement[mix1cupsWhite] / mix1cupsTotal), Mix1circleModelCenter]) → mix1circleModelWhiteSector
  25. Sequence(Segment[Mix1visualsMasterPt + (0 + i, 0), Mix1visualsMasterPt + (0 + i, tapeDiagramHeight - 0.1)], i, 0, If[SelectedElement[mix1cupsWhite] ≥ SelectedElement[mix1cupsGreen], tapeDiagRectModelWidth, (SelectedElement[mix1cupsWhite] * tapeDiagRectModelWidth / SelectedElement[mix1cupsGreen])], If[SelectedElement[mix1cupsWhite] ≥ SelectedElement[mix1cupsGreen], tapeDiagRectModelWidth / SelectedElement[mix1cupsWhite], tapeDiagRectModelWidth / SelectedElement[mix1cupsGreen]]) → mix1tapeDiagramWhiteDividers
  26. Sequence(Segment[Mix1visualsMasterPt + (0 + i, tapeDiagramHeight + 0.1), Mix1visualsMasterPt + (0 + i, (2 * tapeDiagramHeight))], i, 0, If[SelectedElement[mix1cupsGreen] ≥ SelectedElement[mix1cupsWhite], tapeDiagRectModelWidth, (SelectedElement[mix1cupsGreen] * tapeDiagRectModelWidth / SelectedElement[mix1cupsWhite])], If[SelectedElement[mix1cupsGreen] ≥ SelectedElement[mix1cupsWhite], tapeDiagRectModelWidth / SelectedElement[mix1cupsGreen], tapeDiagRectModelWidth / SelectedElement[mix1cupsWhite]]) → mix1tapeDiagramGreenDividers
  27. Sequence(Polygon[Mix1cupsGreenImagesMasterPt + ((cupImagesSpacing * If[i < cupsMax / 2, i, i - cupsMax / 2]), If[i < cupsMax / 2, 0, (-cupImagesHeight) - 0.1]), Mix1cupsGreenImagesMasterPt + ((cupImagesSpacing * If[i < cupsMax / 2, i + 0.5, i - cupsMax / 2 + 0.5]), If[i < cupsMax / 2, 0, (-cupImagesHeight) - 0.1]), Mix1cupsGreenImagesMasterPt + ((cupImagesSpacing * If[i < cupsMax / 2, i + 0.59, i - cupsMax / 2 + 0.59]), If[i < cupsMax / 2, cupImagesHeight, -0.1]), Mix1cupsGreenImagesMasterPt + ((cupImagesSpacing * If[i < cupsMax / 2, i - 0.09, i - cupsMax / 2 - 0.09]), If[i < cupsMax / 2, cupImagesHeight, -0.1])], i, 0, SelectedElement[mix1cupsGreen] - 1, 1) → mix1cupImagesGreen
  28. Sequence(Polygon[Mix1cupsWhiteImagesMasterPt + ((cupImagesSpacing * If[i < cupsMax / 2, i, i - cupsMax / 2]), If[i < cupsMax / 2, 0, (-cupImagesHeight) - 0.1]), Mix1cupsWhiteImagesMasterPt + ((cupImagesSpacing * If[i < cupsMax / 2, i + 0.5, i - cupsMax / 2 + 0.5]), If[i < cupsMax / 2, 0, (-cupImagesHeight) - 0.1]), Mix1cupsWhiteImagesMasterPt + ((cupImagesSpacing * If[i < cupsMax / 2, i + 0.59, i - cupsMax / 2 + 0.59]), If[i < cupsMax / 2, cupImagesHeight, -0.1]), Mix1cupsWhiteImagesMasterPt + ((cupImagesSpacing * If[i < cupsMax / 2, i - 0.09, i - cupsMax / 2 - 0.09]), If[i < cupsMax / 2, cupImagesHeight, -0.1])], i, 0, SelectedElement[mix1cupsWhite] - 1, 1) → mix1cupImagesWhiteFill
  29. Sequence(Polygon[Mix1cupsWhiteImagesMasterPt + ((cupImagesSpacing * If[i < cupsMax / 2, i, i - cupsMax / 2]), If[i < cupsMax / 2, 0, (-cupImagesHeight) - 0.1]), Mix1cupsWhiteImagesMasterPt + ((cupImagesSpacing * If[i < cupsMax / 2, i + 0.5, i - cupsMax / 2 + 0.5]), If[i < cupsMax / 2, 0, (-cupImagesHeight) - 0.1]), Mix1cupsWhiteImagesMasterPt + ((cupImagesSpacing * If[i < cupsMax / 2, i + 0.59, i - cupsMax / 2 + 0.59]), If[i < cupsMax / 2, cupImagesHeight, -0.1]), Mix1cupsWhiteImagesMasterPt + ((cupImagesSpacing * If[i < cupsMax / 2, i - 0.09, i - cupsMax / 2 - 0.09]), If[i < cupsMax / 2, cupImagesHeight, -0.1])], i, 0, SelectedElement[mix1cupsWhite] - 1, 1) → mix1cupImagesWhiteOutline
  30. Sequence(Polygon[Mix1cupsGreenImagesMasterPt + ((cupImagesSpacing * If[i < cupsMax / 2, i, i - cupsMax / 2]), If[i < cupsMax / 2, 0, (-cupImagesHeight) - 0.1]), Mix1cupsGreenImagesMasterPt + ((cupImagesSpacing * If[i < cupsMax / 2, i + 0.5, i - cupsMax / 2 + 0.5]), If[i < cupsMax / 2, 0, (-cupImagesHeight) - 0.1]), Mix1cupsGreenImagesMasterPt + ((cupImagesSpacing * If[i < cupsMax / 2, i + 0.59, i - cupsMax / 2 + 0.59]), If[i < cupsMax / 2, cupImagesHeight, -0.1]), Mix1cupsGreenImagesMasterPt + ((cupImagesSpacing * If[i < cupsMax / 2, i - 0.09, i - cupsMax / 2 - 0.09]), If[i < cupsMax / 2, cupImagesHeight, -0.1])], i, 0, SelectedElement[mix1cupsGreen] - 1, 1) → mix1cupImagesGreenOutline
  31. Sequence(Segment[Mix1visualsMasterPt + (i, rectModelVerticalOffset), Mix1visualsMasterPt + (i, 3 + rectModelVerticalOffset)], i, 0, tapeDiagRectModelWidth, tapeDiagRectModelWidth / mix1cupsTotal) → mix1rectAreaDividers
  32. Conic(Can1PtMaster + (0, -0.1) + (canWidth / 2, (canHeight * mix1cupsTotal / ((2 * cupsMax))) - 0.5), Can1PtMaster + (0, -0.1) + (canWidth - 0.02, (canHeight * mix1cupsTotal / ((2 * cupsMax)))), Can1PtMaster + (0, -0.1) + ((5 / 6 * canWidth), (canHeight * mix1cupsTotal / ((2 * cupsMax))) + 0.5), Can1PtMaster + (0, -0.1) + (canWidth / 6, (canHeight * mix1cupsTotal / ((2 * cupsMax))) + 0.5), Can1PtMaster + (0, -0.1) + (0.02, (canHeight * mix1cupsTotal / ((2 * cupsMax))))) → can1fillTopConicGreen
  33. Conic(Can1PtMaster + (0, -0.1) + (canWidth / 2, (canHeight * mix1cupsTotal / ((2 * cupsMax))) - 0.5), Can1PtMaster + (0, -0.1) + (canWidth - 0.02, (canHeight * mix1cupsTotal / ((2 * cupsMax)))), Can1PtMaster + (0, -0.1) + ((5 / 6 * canWidth), (canHeight * mix1cupsTotal / ((2 * cupsMax))) + 0.5), Can1PtMaster + (0, -0.1) + (canWidth / 6, (canHeight * mix1cupsTotal / ((2 * cupsMax))) + 0.5), Can1PtMaster + (0, -0.1) + (0.02, (canHeight * mix1cupsTotal / ((2 * cupsMax))))) → can1fillTopConicWhite
  34. Conic(Can1PtMaster + (0, -0.1) + (canWidth / 2, (canHeight * mix1cupsTotal / ((2 * cupsMax))) - 0.5), Can1PtMaster + (0, -0.1) + (canWidth - 0.02, (canHeight * mix1cupsTotal / ((2 * cupsMax)))), Can1PtMaster + (0, -0.1) + ((5 / 6 * canWidth), (canHeight * mix1cupsTotal / ((2 * cupsMax))) + 0.5), Can1PtMaster + (0, -0.1) + (canWidth / 6, (canHeight * mix1cupsTotal / ((2 * cupsMax))) + 0.5), Can1PtMaster + (0, -0.1) + (0.02, (canHeight * mix1cupsTotal / ((2 * cupsMax))))) → can1fillTopConicWhiteOutline