Code source du site TeacherCorner.lamdera.app, contenant une suite d'outils permettant d'automatiser la production de documents pédagogiques.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
TeacherCorner/src/Test.elm

250 lines
5.8 KiB

module Test exposing (..)
import Browser
import Debug exposing (todo)
import Element exposing (..)
import Element.Input as Input
import Html exposing (Html)
import Svg exposing (circle, g, path, svg)
import Svg.Attributes as SvgA exposing (color, cx, cy, r, strokeWidth, viewBox, x, y)
-- MAIN
main =
Browser.sandbox { init = init, update = update, view = view }
-- MODEL
type alias Model =
{ texte : String }
init =
{ texte = "" }
-- UPDATE
type Msg
= NouveauTexte String
update : Msg -> Model -> Model
update (NouveauTexte texte) model =
{ texte = texte }
-- VIEW
view : Model -> Html Msg
view model =
layout [ width fill, height fill ] <|
column [ padding 100, centerX, centerY ]
[ html <|
svg [ SvgA.height "100", SvgA.width "512" ]
[ rectangleRouge
]
, html <|
svg [ SvgA.height "100", SvgA.width "512" ]
[ rectangleVert
]
, html <|
svg [ SvgA.height "100", SvgA.width "512" ]
[ rectangleVertBis
]
, html <|
svg [ SvgA.height "100", SvgA.width "512" ]
[ rectangleBleu
]
, html <|
svg [ SvgA.height "100", SvgA.width "512" ]
[ rectangleBleuBis
]
, html <|
svg [ SvgA.height "100", SvgA.width "512" ]
[ rectangleCyan
]
, html <|
svg [ SvgA.height "100", SvgA.width "512" ]
[ rectangleGris
]
, html <|
svg [ SvgA.height "100", SvgA.width "512" ]
[ rectangleGrisBis
]
, html <|
svg [ SvgA.height "768", SvgA.width "768" ]
[ carreBleu
]
]
trait n r v b =
Svg.rect
[ x (String.fromFloat n)
, SvgA.fill <| "rgb(" ++ String.fromFloat r ++ "," ++ String.fromFloat v ++ "," ++ String.fromFloat b ++ ")"
, SvgA.color <| "rgb(" ++ String.fromFloat r ++ "," ++ String.fromFloat v ++ "," ++ String.fromFloat b ++ ")"
, SvgA.width "1"
, SvgA.height "100"
, y "0"
]
[]
point xCoord yCoord r v b =
Svg.rect
[ x (String.fromFloat xCoord)
, SvgA.fill <| "rgb(" ++ String.fromFloat r ++ "," ++ String.fromFloat v ++ "," ++ String.fromFloat b ++ ")"
, SvgA.color <| "rgb(" ++ String.fromFloat r ++ "," ++ String.fromFloat v ++ "," ++ String.fromFloat b ++ ")"
, SvgA.width "2"
, SvgA.height "2"
, y (String.fromFloat yCoord)
]
[]
rectangleRouge =
g [] <|
List.map (\x -> trait x (x * 0.9) 0 0) range
++ List.map (\x -> trait (x + 256) (255 * 0.9) (x * 0.9) (x * 0.9)) range
rectangleVertBis =
g [] <|
List.map (\x -> trait x 0 x 0) range
++ List.map (\x -> trait (x + 256) x 255 x) range
rectangleVert =
g [] <|
List.map (\x -> trait x 0 (x * 0.8) 0) range
++ List.map (\x -> trait (x + 256) (x * 0.8) (255 * 0.8) (x * 0.8)) range
rectangleBleu =
g [] <|
List.map (\x -> trait x 0 0 x) range
++ List.map (\x -> trait (x + 256) (x * 0.9) x 255) range
carreBleu =
g [] <| List.map (\( x, y ) -> point (3 * x) (3 * y) x y 255) carre
rectangleBleuBis =
let
f x =
128 + 30 * (logBase e (4 + x) - logBase e (260 - x))
in
g [] <|
List.map (\x -> trait x 0 0 (f x)) range
++ List.map (\x -> trait (x + 256) (f x) (f x) 255) range
rectangleGris =
g [] <|
List.map (\x -> trait x (x / 2) (x / 2) (x / 2)) range
++ List.map (\x -> trait (x + 256) (128 + x / 2) (128 + x / 2) (128 + x / 2)) range
rectangleGrisBis =
let
f x =
128 + 30 * (logBase e (4 + x) - logBase e (260 - x))
in
g [] <|
List.map (\x -> trait (2 * x) (f x) (f x) (f x)) range
++ List.map (\x -> trait (2 * x + 1) (f x) (f x) (f x)) range
rectangleCyan =
g [] <|
List.map (\x -> trait x 0 (x * 0.3) x) range
++ List.map (\x -> trait (x + 256) x (x + 0.3 * (255 - x)) 255) range
range =
List.map ((\x -> x / 10) << toFloat) <| List.range 0 2550
carre =
let
f n =
List.map (Tuple.pair n << toFloat) <| List.range 0 255
in
List.concatMap (f << toFloat) <| List.range 0 255
type alias Couleur =
{ rouge : Float
, vert : Float
, bleu : Float
}
type alias CouleurRvb =
{ rouge : Float
, vert : Float
, bleu : Float
}
versRvb : Couleur -> CouleurRvb
versRvb { rouge, vert, bleu } =
if rouge < vert && vert < bleu then
todo "bla"
else
todo "bla"
plusSombre : Float -> Couleur -> Couleur
plusSombre taux { rouge, vert, bleu } =
if rouge < vert && rouge < bleu then
let
nouveauRouge =
rouge * taux
nouveauPasRouge =
nouveauRouge - rouge
in
{ rouge = nouveauRouge
, vert = vert + nouveauPasRouge
, bleu = bleu + nouveauPasRouge
}
else if vert < bleu then
let
nouveauVert =
vert * taux
nouveauPasVert =
nouveauVert - vert
in
{ rouge = rouge + nouveauPasVert
, vert = nouveauVert
, bleu = bleu + nouveauPasVert
}
else
let
nouveauBleu =
bleu * taux
nouveauPasBleu =
nouveauBleu - bleu
in
{ rouge = rouge + nouveauPasBleu
, vert = vert + nouveauPasBleu
, bleu = bleu + nouveauBleu
}