From bd377d0dc68a165c59f2e2496fbb9ea46272edea Mon Sep 17 00:00:00 2001 From: mtgmonkey Date: Thu, 12 Jun 2025 06:40:52 -0400 Subject: [PATCH] done --- src/Main.elm | 81 ++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 73 insertions(+), 8 deletions(-) diff --git a/src/Main.elm b/src/Main.elm index faf9be7..fc92745 100644 --- a/src/Main.elm +++ b/src/Main.elm @@ -8,6 +8,7 @@ import Tuple exposing (first, second) type alias Memory = { dx : Number + , count : Int } @@ -26,6 +27,7 @@ type alias Coords = init : Memory init = { dx = 0.8 + , count = 0 } @@ -53,6 +55,11 @@ view computer memory = placeCornerAtCoords computer bounds fx x = x * x * x / 32 / 32 + corner = case memory.count // 30 of + 0 -> + TopLeft + 1 -> TopRight + _ -> TopLeft in List.append (makeRectangles computer atCorner fx bounds memory []) @@ -60,12 +67,59 @@ view computer memory = List.append (makeCircles computer fx bounds memory []) ([ P.words black "Welcome to my math project! Use arrow keys to adjust the width of each rectangle." - |> at ( (bounds.xmax - bounds.xmin) / 2, bounds.ymax - 1) + |> at ( (bounds.xmax - bounds.xmin) / 2, bounds.ymax - 0.5) , P.words black ("The current dx is " ++ (String.fromFloat memory.dx)) + |> at ( (bounds.xmax - bounds.xmin) / 2, bounds.ymax - 1) + , P.words black ("The current approximation is " ++ (String.fromFloat <| (\n->n/32/32) <| getArea computer corner fx bounds memory)) + |> at ( (bounds.xmax - bounds.xmin) / 2, bounds.ymax - 1.5) + , P.words black ("The real area under the curve is thus about " ++ (String.fromFloat 898)) |> at ( (bounds.xmax - bounds.xmin) / 2, bounds.ymax - 2) ]) +fillLeftFxs : Computer -> (Number -> Number) -> Bounds -> Memory -> List Number -> List Number +fillLeftFxs computer fx bounds memory fxs = + let + xcoord = toFloat (List.length fxs) * memory.dx + ycoord = fx xcoord + widthOfCell = computer.screen.width / (bounds.xmax - bounds.xmin) + newVal = memory.dx * widthOfCell * ycoord * widthOfCell + in + if memory.dx + memory.dx * (toFloat <| List.length fxs) < bounds.xmax then + fillLeftFxs computer fx bounds memory <| List.append fxs <| [newVal] + else + List.append fxs <| [(bounds.xmax - memory.dx * (toFloat <| List.length fxs)) * widthOfCell * ycoord * widthOfCell] + + + +fillRightFxs : Computer -> (Number -> Number) -> Bounds -> Memory -> List Number -> List Number +fillRightFxs computer fx bounds memory fxs = + let + xcoord = toFloat (List.length fxs) * memory.dx + ycoord = fx <| memory.dx + xcoord + widthOfCell = computer.screen.width / (bounds.xmax - bounds.xmin) + newVal = memory.dx * widthOfCell * ycoord * widthOfCell + in + if memory.dx + memory.dx * (toFloat <| List.length fxs) < bounds.xmax then + fillRightFxs computer fx bounds memory <| List.append fxs <| [newVal] + else + List.append fxs <| [(bounds.xmax - memory.dx * (toFloat <| List.length fxs)) * widthOfCell * ycoord * widthOfCell] + + +getArea : Computer -> Corner -> (Number -> Number) -> Bounds -> Memory -> Number +getArea computer corner fx bounds memory = + let + fxs0 = fillLeftFxs computer fx bounds memory [] + fxs1 = fillRightFxs computer fx bounds memory [] + in + case corner of + TopLeft -> + List.sum fxs0 + TopRight -> + List.sum fxs1 + + + makeCircles : Computer -> (Number -> Number) -> Bounds -> Memory -> List Shape -> List Shape makeCircles computer fx bounds memory prev = @@ -92,12 +146,19 @@ makeRectangles computer atCorner fx bounds memory prev = xcoord = toFloat (List.length prev) * memory.dx ycoord = fx xcoord widthOfCell = computer.screen.width / (bounds.xmax - bounds.xmin) + corner = case (memory.count // 30) of + 0 -> + TopLeft + 1 -> + TopRight + _ -> + TopLeft newRec = rectangle red (memory.dx * widthOfCell) (ycoord * widthOfCell) - |> atCorner (xcoord, ycoord) TopLeft (memory.dx, ycoord) + |> atCorner (xcoord, ycoord) corner (memory.dx, ycoord) in if - xcoord < bounds.xmax + xcoord - memory.dx < bounds.xmax then makeRectangles computer atCorner fx bounds memory <| List.append prev [ newRec ] @@ -125,6 +186,14 @@ update computer memory = |> (*) step |> (+) threshold )) / toFloat 100 + , count = + if memory.count <= 0 then + memory.count + 50 + else + if memory.count >= 60 then + memory.count - 50 + else + (+) memory.count <| round <| toY computer.keyboard } @@ -150,7 +219,7 @@ placeAtCoords computer bounds (x, y) shape = shape -type Corner = TopLeft | TopRight | BottomLeft | BottomRight +type Corner = TopLeft | TopRight placeCornerAtCoords : Computer -> Bounds -> Coords -> Corner -> (Number, Number) -> Shape -> Shape placeCornerAtCoords computer bounds (x, y) corner (width, height) shape = @@ -161,8 +230,4 @@ placeCornerAtCoords computer bounds (x, y) corner (width, height) shape = (x + width / 2, y - height / 2) TopRight -> (x - width / 2, y - height / 2) - BottomLeft -> - (x + width / 2, y + height / 2) - BottomRight -> - (x - width / 2, y + height / 2) )