Polynoom-tekenprogramma
Polynoom-tekenprogramma#
Het onderstaande tekenprogramma is opgezet volgens de Elm architectuur (zie: https://guide.elm-lang.org/architecture/). Het “model” bestaat uit de invoerstring met de getallen die door de gebruiker ingevoerd worden. Deze vormen de coëfficienten van de te tekenen polynoom.
In de “view” wordt met behulp van SVG de grafiek van de ingevoerde polynoom getekend. Hiervoor worden SVG-polylines gebruikt: een lijn die gegeven is door een reeks punten. Elk punt is van de vorm "x,y". De punten zijn gescheiden door spaties.
Vraag. Bepaal welke “polyline” de x-as voorstelt, en welke de y-as. Je kunt dit controleren door de kleur van de lijn te veranderen.
Zie https://www.w3schools.com/graphics/svg_polyline.asp als je meer over svg en polyline wilt weten.
Vul in de onderstaande code tussen "-- insert your code here" en "-- compile code" je eigen functie-definities in, voor de functies die je eerder ontwikkeld hebt:
poly(en eventueelpow)funcTuples(en eventueelxList)tuplesToPoints
De functie map wordt in meerdere modules gedefinieerd. Je moet daarom in je eigen functies expliciet List.map schrijven.
Vergelijk de resultaten met het eerder gegeven polynoom-tekenprogramma.
import Html exposing (text, div, input, Attribute)
import Browser exposing (sandbox)
import Html.Events exposing (on, keyCode, onInput)
import Html.Attributes exposing(..)
import String exposing(split, fromFloat)
import List exposing (..)
import Maybe
import Svg exposing (..)
import Svg.Attributes exposing (..)
stringsToFloats : List String -> List Float
stringsToFloats ls =
List.map (\s -> Maybe.withDefault 0 (String.toFloat s)) ls
main = Browser.sandbox { init = init, update = update, view = view }
type alias Model = { content : String }
init : Model
init = { content = "" }
type Msg
= Change String
update : Msg -> Model -> Model
update msg model =
case msg of
Change newContent ->
{ model | content = newContent }
view model =
let
coefs = stringsToFloats (split "," model.content)
tuples = funcTuples (poly coefs) -100 100 1
funcPoints = tuplesToPoints tuples
in
div []
[ input [ placeholder "numbers separated by ,", value model.content, onInput Change ] []
, svg [ viewBox "0 0 200 200", Svg.Attributes.width "400px" ]
[ g [ transform "translate(100, 100) scale(1,-1)" ]
[ polyline [ fill "none", stroke "black", points "0,-100 0,100"] []
, polyline [ fill "none", stroke "black", points "-100,0 100,0"] []
, polyline [ fill "none", stroke "red", points funcPoints ] []
]
]
]
-- insert your code here
poly : List Float -> Float -> Float
poly coefs x = 0
funcTuples : (Float -> Float) -> Float -> Float -> Float -> List (Float, Float)
funcTuples f start stop step = []
tuplesToPoints : List (Float, Float) -> String
tuplesToPoints tuples = ""
-- compile-code