{-# LANGUAGE OverloadedStrings #-}
module SvgIcons.Core.Geometry
( geometryExamples
, anglesHelp
, regularPolygon
, starPolygonFirstSpecies
, starPolygonWithBorder
, starPolygonOverlap
, starOutline
, starFat
, starRegular
, starSlim
, asterisk
, asteriskStar
) where
import Text.Blaze.Svg11 ((!))
import Text.Blaze.Svg11 as S
import Text.Blaze.Svg11.Attributes as A
import SvgIcons.Core.Utils
geometryExamples :: [ (String, Svg) ]
geometryExamples :: [(String, Svg)]
geometryExamples =
[ (,) String
"regular_polygon_5" (Svg -> (String, Svg)) -> Svg -> (String, Svg)
forall a b. (a -> b) -> a -> b
$ Int -> Float -> (Float, Float) -> Svg
regularPolygon Int
5 Float
0.9 (Float
0,Float
0)
, (,) String
"regular_polygon_6" (Svg -> (String, Svg)) -> Svg -> (String, Svg)
forall a b. (a -> b) -> a -> b
$ Int -> Float -> (Float, Float) -> Svg
regularPolygon Int
6 Float
0.9 (Float
0,Float
0)
, (,) String
"star_polygon_5" (Svg -> (String, Svg)) -> Svg -> (String, Svg)
forall a b. (a -> b) -> a -> b
$ Int -> Float -> (Float, Float) -> Svg
starPolygonFirstSpecies Int
5 Float
0.9 (Float
0,Float
0)
, (,) String
"star_polygon_6" (Svg -> (String, Svg)) -> Svg -> (String, Svg)
forall a b. (a -> b) -> a -> b
$ Int -> Float -> (Float, Float) -> Svg
starPolygonFirstSpecies Int
6 Float
0.9 (Float
0,Float
0)
, (,) String
"star_polygon_border_5" (Svg -> (String, Svg)) -> Svg -> (String, Svg)
forall a b. (a -> b) -> a -> b
$ Int -> Float -> Float -> (Float, Float) -> Svg
starPolygonWithBorder Int
5 Float
0.9 Float
0.1 (Float
0,Float
0)
, (,) String
"star_polygon_border_6" (Svg -> (String, Svg)) -> Svg -> (String, Svg)
forall a b. (a -> b) -> a -> b
$ Int -> Float -> Float -> (Float, Float) -> Svg
starPolygonWithBorder Int
6 Float
0.9 Float
0.1 (Float
0,Float
0)
, (,) String
"star_polygon_overlap_5" (Svg -> (String, Svg)) -> Svg -> (String, Svg)
forall a b. (a -> b) -> a -> b
$ Int -> Float -> Float -> (Float, Float) -> Svg
starPolygonOverlap Int
5 Float
0.9 Float
0.1 (Float
0,Float
0)
, (,) String
"star_polygon_overlap_6" (Svg -> (String, Svg)) -> Svg -> (String, Svg)
forall a b. (a -> b) -> a -> b
$ Int -> Float -> Float -> (Float, Float) -> Svg
starPolygonOverlap Int
6 Float
0.9 Float
0.1 (Float
0,Float
0)
, (,) String
"star_fat_5" (Svg -> (String, Svg)) -> Svg -> (String, Svg)
forall a b. (a -> b) -> a -> b
$ Int -> Float -> (Float, Float) -> Svg
starFat Int
5 Float
0.9 (Float
0,Float
0)
, (,) String
"star_fat_6" (Svg -> (String, Svg)) -> Svg -> (String, Svg)
forall a b. (a -> b) -> a -> b
$ Int -> Float -> (Float, Float) -> Svg
starFat Int
6 Float
0.9 (Float
0,Float
0)
, (,) String
"star_regular_5" (Svg -> (String, Svg)) -> Svg -> (String, Svg)
forall a b. (a -> b) -> a -> b
$ Int -> Float -> (Float, Float) -> Svg
starRegular Int
5 Float
0.9 (Float
0,Float
0)
, (,) String
"star_regular_6" (Svg -> (String, Svg)) -> Svg -> (String, Svg)
forall a b. (a -> b) -> a -> b
$ Int -> Float -> (Float, Float) -> Svg
starRegular Int
6 Float
0.9 (Float
0,Float
0)
, (,) String
"star_slim_5" (Svg -> (String, Svg)) -> Svg -> (String, Svg)
forall a b. (a -> b) -> a -> b
$ Int -> Float -> (Float, Float) -> Svg
starSlim Int
5 Float
0.9 (Float
0,Float
0)
, (,) String
"star_slim_6" (Svg -> (String, Svg)) -> Svg -> (String, Svg)
forall a b. (a -> b) -> a -> b
$ Int -> Float -> (Float, Float) -> Svg
starSlim Int
6 Float
0.9 (Float
0,Float
0)
, (,) String
"asterisk_3" (Svg -> (String, Svg)) -> Svg -> (String, Svg)
forall a b. (a -> b) -> a -> b
$ Int -> Float -> (Float, Float) -> Svg
asterisk Int
3 Float
0.9 (Float
0,Float
0)
, (,) String
"asterisk_star_3" (Svg -> (String, Svg)) -> Svg -> (String, Svg)
forall a b. (a -> b) -> a -> b
$ Int -> Float -> (Float, Float) -> Svg
asteriskStar Int
3 Float
0.9 (Float
0,Float
0)
]
anglesHelp :: Svg
anglesHelp :: Svg
anglesHelp =
Svg -> Svg
S.svg
(Svg -> Svg) -> Attribute -> Svg -> Svg
forall h. Attributable h => h -> Attribute -> h
! AttributeValue -> Attribute
A.viewbox AttributeValue
"-1 -1 2 2"
(Svg -> Svg) -> Attribute -> Svg -> Svg
forall h. Attributable h => h -> Attribute -> h
! AttributeValue -> Attribute
A.width AttributeValue
"500"
(Svg -> Svg) -> Attribute -> Svg -> Svg
forall h. Attributable h => h -> Attribute -> h
! AttributeValue -> Attribute
A.height AttributeValue
"500"
(Svg -> Svg) -> Svg -> Svg
forall a b. (a -> b) -> a -> b
$ do
Svg
pentagon
Svg
centralAngle
Svg
internalAngle
Svg
starOuterAngle
Svg
starInnerAngle
Svg -> (Float, Float) -> Svg
mkText Svg
"apothema = r cos(π/n)" (Float
0 , -Float
0.2)
Svg -> Attribute -> Svg
forall h. Attributable h => h -> Attribute -> h
! AttributeValue -> Attribute
A.fill AttributeValue
"indigo"
where
r1 :: Float
r1 = Float
0.9
vertice :: Float -> (Float, Float)
vertice Float
k =
(Float
r1 Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float -> Float
forall a. Floating a => a -> a
sin(Float
kFloat -> Float -> Float
forall a. Num a => a -> a -> a
*Float
2Float -> Float -> Float
forall a. Num a => a -> a -> a
*Float
forall a. Floating a => a
piFloat -> Float -> Float
forall a. Fractional a => a -> a -> a
/Float
7) , -Float
r1 Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float -> Float
forall a. Floating a => a -> a
cos(Float
kFloat -> Float -> Float
forall a. Num a => a -> a -> a
*Float
2Float -> Float -> Float
forall a. Num a => a -> a -> a
*Float
forall a. Floating a => a
piFloat -> Float -> Float
forall a. Fractional a => a -> a -> a
/Float
7))
pentagon :: Svg
pentagon =
Svg
S.path
Svg -> Attribute -> Svg
forall h. Attributable h => h -> Attribute -> h
! AttributeValue -> Attribute
A.fill AttributeValue
"white"
Svg -> Attribute -> Svg
forall h. Attributable h => h -> Attribute -> h
! AttributeValue -> Attribute
A.stroke AttributeValue
"silver"
Svg -> Attribute -> Svg
forall h. Attributable h => h -> Attribute -> h
! AttributeValue -> Attribute
A.strokeWidth AttributeValue
"0.02"
Svg -> Attribute -> Svg
forall h. Attributable h => h -> Attribute -> h
! AttributeValue -> Attribute
A.d AttributeValue
pentagonDirs
pentagonDirs :: AttributeValue
pentagonDirs = Path -> AttributeValue
mkPath (Path -> AttributeValue) -> Path -> AttributeValue
forall a b. (a -> b) -> a -> b
$ do
(Float -> Float -> Path) -> (Float, Float) -> Path
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry Float -> Float -> Path
forall a. Show a => a -> a -> Path
S.m ((Float, Float) -> Path) -> (Float, Float) -> Path
forall a b. (a -> b) -> a -> b
$ Float -> (Float, Float)
vertice Float
0
(Integer -> Path) -> [Integer] -> Path
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ (((Float -> Float -> Path) -> (Float, Float) -> Path
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry Float -> Float -> Path
forall a. Show a => a -> a -> Path
S.l) ((Float, Float) -> Path)
-> (Integer -> (Float, Float)) -> Integer -> Path
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Float -> (Float, Float)
vertice (Float -> (Float, Float))
-> (Integer -> Float) -> Integer -> (Float, Float)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Integer -> Float
forall a b. (Integral a, Num b) => a -> b
fromIntegral) [Integer
1 .. Integer
6]
Path
S.z
mkText :: Svg -> (Float, Float) -> Svg
mkText Svg
txt (Float
t1,Float
t2) =
Svg -> Svg
S.text_ Svg
txt
Svg -> Attribute -> Svg
forall h. Attributable h => h -> Attribute -> h
! AttributeValue -> Attribute
A.stroke AttributeValue
"none"
Svg -> Attribute -> Svg
forall h. Attributable h => h -> Attribute -> h
! (AttributeValue -> Attribute
A.x (AttributeValue -> Attribute) -> Float -> Attribute
.: Float
t1)
Svg -> Attribute -> Svg
forall h. Attributable h => h -> Attribute -> h
! (AttributeValue -> Attribute
A.y (AttributeValue -> Attribute) -> Float -> Attribute
.: Float
t2)
Svg -> Attribute -> Svg
forall h. Attributable h => h -> Attribute -> h
! AttributeValue -> Attribute
A.fontSize AttributeValue
"0.09"
Svg -> Attribute -> Svg
forall h. Attributable h => h -> Attribute -> h
! AttributeValue -> Attribute
A.fontWeight AttributeValue
"bold"
Svg -> Attribute -> Svg
forall h. Attributable h => h -> Attribute -> h
! AttributeValue -> Attribute
A.dominantBaseline AttributeValue
"middle"
Svg -> Attribute -> Svg
forall h. Attributable h => h -> Attribute -> h
! AttributeValue -> Attribute
A.textAnchor AttributeValue
"middle"
centralAngle :: Svg
centralAngle =
Svg -> Svg
S.g
(Svg -> Svg) -> Attribute -> Svg -> Svg
forall h. Attributable h => h -> Attribute -> h
! AttributeValue -> Attribute
A.stroke AttributeValue
"black"
(Svg -> Svg) -> Attribute -> Svg -> Svg
forall h. Attributable h => h -> Attribute -> h
! AttributeValue -> Attribute
A.fill AttributeValue
"black"
(Svg -> Svg) -> Svg -> Svg
forall a b. (a -> b) -> a -> b
$ do
Svg
S.path
Svg -> Attribute -> Svg
forall h. Attributable h => h -> Attribute -> h
! AttributeValue -> Attribute
A.fill AttributeValue
"none"
Svg -> Attribute -> Svg
forall h. Attributable h => h -> Attribute -> h
! AttributeValue -> Attribute
A.strokeWidth AttributeValue
"0.01"
Svg -> Attribute -> Svg
forall h. Attributable h => h -> Attribute -> h
! AttributeValue -> Attribute
A.d AttributeValue
centralDirs
Svg -> (Float, Float) -> Svg
mkText Svg
"2π/n" (Float
0 , Float
0.25)
centralDirs :: AttributeValue
centralDirs = Path -> AttributeValue
mkPath (Path -> AttributeValue) -> Path -> AttributeValue
forall a b. (a -> b) -> a -> b
$ do
(Float -> Float -> Path) -> (Float, Float) -> Path
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry Float -> Float -> Path
forall a. Show a => a -> a -> Path
S.m ((Float, Float) -> Path) -> (Float, Float) -> Path
forall a b. (a -> b) -> a -> b
$ Float -> (Float, Float)
vertice Float
3
(Integer -> Integer -> Path) -> (Integer, Integer) -> Path
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry Integer -> Integer -> Path
forall a. Show a => a -> a -> Path
S.l ((Integer, Integer) -> Path) -> (Integer, Integer) -> Path
forall a b. (a -> b) -> a -> b
$ (Integer
0,Integer
0)
(Float -> Float -> Path) -> (Float, Float) -> Path
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry Float -> Float -> Path
forall a. Show a => a -> a -> Path
S.l ((Float, Float) -> Path) -> (Float, Float) -> Path
forall a b. (a -> b) -> a -> b
$ Float -> (Float, Float)
vertice Float
4
internalAngle :: Svg
internalAngle =
Svg -> Svg
S.g
(Svg -> Svg) -> Attribute -> Svg -> Svg
forall h. Attributable h => h -> Attribute -> h
! AttributeValue -> Attribute
A.stroke AttributeValue
"blue"
(Svg -> Svg) -> Attribute -> Svg -> Svg
forall h. Attributable h => h -> Attribute -> h
! AttributeValue -> Attribute
A.fill AttributeValue
"blue"
(Svg -> Svg) -> Svg -> Svg
forall a b. (a -> b) -> a -> b
$ do
Svg
S.path
Svg -> Attribute -> Svg
forall h. Attributable h => h -> Attribute -> h
! AttributeValue -> Attribute
A.fill AttributeValue
"none"
Svg -> Attribute -> Svg
forall h. Attributable h => h -> Attribute -> h
! AttributeValue -> Attribute
A.strokeWidth AttributeValue
"0.01"
Svg -> Attribute -> Svg
forall h. Attributable h => h -> Attribute -> h
! AttributeValue -> Attribute
A.d AttributeValue
internalDirs
Svg -> (Float, Float) -> Svg
mkText
Svg
"π - 2π/n"
( Float
0.18 Float -> Float -> Float
forall a. Num a => a -> a -> a
+ ((Float, Float) -> Float
forall a b. (a, b) -> a
fst ((Float, Float) -> Float) -> (Float, Float) -> Float
forall a b. (a -> b) -> a -> b
$ Float -> (Float, Float)
vertice Float
6)
, Float
0.05 Float -> Float -> Float
forall a. Num a => a -> a -> a
+ ((Float, Float) -> Float
forall a b. (a, b) -> b
snd ((Float, Float) -> Float) -> (Float, Float) -> Float
forall a b. (a -> b) -> a -> b
$ Float -> (Float, Float)
vertice Float
6)
)
internalDirs :: AttributeValue
internalDirs = Path -> AttributeValue
mkPath (Path -> AttributeValue) -> Path -> AttributeValue
forall a b. (a -> b) -> a -> b
$ do
(Float -> Float -> Path) -> (Float, Float) -> Path
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry Float -> Float -> Path
forall a. Show a => a -> a -> Path
S.m ((Float, Float) -> Path) -> (Float, Float) -> Path
forall a b. (a -> b) -> a -> b
$ Float -> (Float, Float)
vertice Float
0
(Float -> Float -> Path) -> (Float, Float) -> Path
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry Float -> Float -> Path
forall a. Show a => a -> a -> Path
S.l ((Float, Float) -> Path) -> (Float, Float) -> Path
forall a b. (a -> b) -> a -> b
$ Float -> (Float, Float)
vertice Float
6
(Float -> Float -> Path) -> (Float, Float) -> Path
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry Float -> Float -> Path
forall a. Show a => a -> a -> Path
S.l ((Float, Float) -> Path) -> (Float, Float) -> Path
forall a b. (a -> b) -> a -> b
$ Float -> (Float, Float)
vertice Float
5
starOuterAngle :: Svg
starOuterAngle =
Svg -> Svg
S.g
(Svg -> Svg) -> Attribute -> Svg -> Svg
forall h. Attributable h => h -> Attribute -> h
! AttributeValue -> Attribute
A.stroke AttributeValue
"red"
(Svg -> Svg) -> Attribute -> Svg -> Svg
forall h. Attributable h => h -> Attribute -> h
! AttributeValue -> Attribute
A.fill AttributeValue
"red"
(Svg -> Svg) -> Svg -> Svg
forall a b. (a -> b) -> a -> b
$ do
Svg
S.path
Svg -> Attribute -> Svg
forall h. Attributable h => h -> Attribute -> h
! AttributeValue -> Attribute
A.fill AttributeValue
"none"
Svg -> Attribute -> Svg
forall h. Attributable h => h -> Attribute -> h
! AttributeValue -> Attribute
A.strokeWidth AttributeValue
"0.01"
Svg -> Attribute -> Svg
forall h. Attributable h => h -> Attribute -> h
! AttributeValue -> Attribute
A.d AttributeValue
starOuterAngleDirs
Svg -> (Float, Float) -> Svg
mkText
Svg
"π/n"
( Float
0.3 Float -> Float -> Float
forall a. Num a => a -> a -> a
+ ((Float, Float) -> Float
forall a b. (a, b) -> a
fst ((Float, Float) -> Float) -> (Float, Float) -> Float
forall a b. (a -> b) -> a -> b
$ Float -> (Float, Float)
vertice Float
0)
, Float
0.25 Float -> Float -> Float
forall a. Num a => a -> a -> a
+ ((Float, Float) -> Float
forall a b. (a, b) -> b
snd ((Float, Float) -> Float) -> (Float, Float) -> Float
forall a b. (a -> b) -> a -> b
$ Float -> (Float, Float)
vertice Float
0)
)
starOuterAngleDirs :: AttributeValue
starOuterAngleDirs = Path -> AttributeValue
mkPath (Path -> AttributeValue) -> Path -> AttributeValue
forall a b. (a -> b) -> a -> b
$ do
(Float -> Float -> Path) -> (Float, Float) -> Path
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry Float -> Float -> Path
forall a. Show a => a -> a -> Path
S.m ((Float, Float) -> Path) -> (Float, Float) -> Path
forall a b. (a -> b) -> a -> b
$ Float -> (Float, Float)
vertice Float
1
(Float -> Float -> Path) -> (Float, Float) -> Path
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry Float -> Float -> Path
forall a. Show a => a -> a -> Path
S.l ((Float, Float) -> Path) -> (Float, Float) -> Path
forall a b. (a -> b) -> a -> b
$ Float -> (Float, Float)
vertice Float
0
(Float -> Float -> Path) -> (Float, Float) -> Path
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry Float -> Float -> Path
forall a. Show a => a -> a -> Path
S.l ((Float, Float) -> Path) -> (Float, Float) -> Path
forall a b. (a -> b) -> a -> b
$ Float -> (Float, Float)
vertice Float
2
starInnerAngle :: Svg
starInnerAngle =
Svg -> Svg
S.g
(Svg -> Svg) -> Attribute -> Svg -> Svg
forall h. Attributable h => h -> Attribute -> h
! AttributeValue -> Attribute
A.stroke AttributeValue
"green"
(Svg -> Svg) -> Attribute -> Svg -> Svg
forall h. Attributable h => h -> Attribute -> h
! AttributeValue -> Attribute
A.fill AttributeValue
"green"
(Svg -> Svg) -> Svg -> Svg
forall a b. (a -> b) -> a -> b
$ do
Svg
S.path
Svg -> Attribute -> Svg
forall h. Attributable h => h -> Attribute -> h
! AttributeValue -> Attribute
A.fill AttributeValue
"none"
Svg -> Attribute -> Svg
forall h. Attributable h => h -> Attribute -> h
! AttributeValue -> Attribute
A.strokeWidth AttributeValue
"0.01"
Svg -> Attribute -> Svg
forall h. Attributable h => h -> Attribute -> h
! AttributeValue -> Attribute
A.d AttributeValue
starInnerAngleDirs
Svg -> (Float, Float) -> Svg
mkText
Svg
"π - 4π/n"
( -Float
0.05 Float -> Float -> Float
forall a. Num a => a -> a -> a
+ ((Float, Float) -> Float
forall a b. (a, b) -> a
fst ((Float, Float) -> Float) -> (Float, Float) -> Float
forall a b. (a -> b) -> a -> b
$ Float -> (Float, Float)
vertice Float
3)
, -Float
0.5 Float -> Float -> Float
forall a. Num a => a -> a -> a
+ ((Float, Float) -> Float
forall a b. (a, b) -> b
snd ((Float, Float) -> Float) -> (Float, Float) -> Float
forall a b. (a -> b) -> a -> b
$ Float -> (Float, Float)
vertice Float
3)
)
starInnerAngleDirs :: AttributeValue
starInnerAngleDirs = Path -> AttributeValue
mkPath (Path -> AttributeValue) -> Path -> AttributeValue
forall a b. (a -> b) -> a -> b
$ do
(Float -> Float -> Path) -> (Float, Float) -> Path
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry Float -> Float -> Path
forall a. Show a => a -> a -> Path
S.m ((Float, Float) -> Path) -> (Float, Float) -> Path
forall a b. (a -> b) -> a -> b
$ Float -> (Float, Float)
vertice Float
1
(Float -> Float -> Path) -> (Float, Float) -> Path
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry Float -> Float -> Path
forall a. Show a => a -> a -> Path
S.l ((Float, Float) -> Path) -> (Float, Float) -> Path
forall a b. (a -> b) -> a -> b
$ Float -> (Float, Float)
vertice Float
3
(Float -> Float -> Path) -> (Float, Float) -> Path
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry Float -> Float -> Path
forall a. Show a => a -> a -> Path
S.l ((Float, Float) -> Path) -> (Float, Float) -> Path
forall a b. (a -> b) -> a -> b
$ Float -> (Float, Float)
vertice Float
5
regularPolygon
:: Int
-> Float
-> (Float , Float)
-> Svg
regularPolygon :: Int -> Float -> (Float, Float) -> Svg
regularPolygon Int
n Float
r (Float
x0,Float
y0) =
Svg
S.path
Svg -> Attribute -> Svg
forall h. Attributable h => h -> Attribute -> h
! AttributeValue -> Attribute
A.class_ AttributeValue
"HaskellSvgIcons__regularPolygon"
Svg -> Attribute -> Svg
forall h. Attributable h => h -> Attribute -> h
! AttributeValue -> Attribute
A.d AttributeValue
directions
where
α :: Float
α = Float
2 Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float
forall a. Floating a => a
pi Float -> Float -> Float
forall a. Fractional a => a -> a -> a
/ (Int -> Float
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
n)
draw :: Float -> Path
draw Float
k =
Float -> Float -> Path
forall a. Show a => a -> a -> Path
l (Float
x0 Float -> Float -> Float
forall a. Num a => a -> a -> a
+ Float
r Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float -> Float
forall a. Floating a => a -> a
sin (Float
kFloat -> Float -> Float
forall a. Num a => a -> a -> a
*Float
α))
(Float
y0 Float -> Float -> Float
forall a. Num a => a -> a -> a
- Float
r Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float -> Float
forall a. Floating a => a -> a
cos (Float
kFloat -> Float -> Float
forall a. Num a => a -> a -> a
*Float
α))
directions :: AttributeValue
directions =
Path -> AttributeValue
mkPath (Path -> AttributeValue) -> Path -> AttributeValue
forall a b. (a -> b) -> a -> b
$ do
Float -> Float -> Path
forall a. Show a => a -> a -> Path
m Float
x0 (Float
y0 Float -> Float -> Float
forall a. Num a => a -> a -> a
- Float
r)
(Int -> Path) -> [Int] -> Path
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ (Float -> Path
draw (Float -> Path) -> (Int -> Float) -> Int -> Path
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> Float
forall a b. (Integral a, Num b) => a -> b
fromIntegral) [Int
1..Int
n]
Path
S.z
starPolygonFirstSpecies
:: Int
-> Float
-> (Float , Float)
-> Svg
starPolygonFirstSpecies :: Int -> Float -> (Float, Float) -> Svg
starPolygonFirstSpecies Int
n Float
r (Float
c1,Float
c2) =
Svg
S.path
Svg -> Attribute -> Svg
forall h. Attributable h => h -> Attribute -> h
! AttributeValue -> Attribute
A.class_ AttributeValue
"HaskellSvgIcons__starPolygonFirstSpecies"
Svg -> Attribute -> Svg
forall h. Attributable h => h -> Attribute -> h
! AttributeValue -> Attribute
A.d AttributeValue
directions
where
α :: Float
α = Float
2 Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float
forall a. Floating a => a
pi Float -> Float -> Float
forall a. Fractional a => a -> a -> a
/ (Int -> Float
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
n)
vertice :: p -> (Float, Float)
vertice p
k' =
let k :: Float
k = p -> Float
forall a b. (Integral a, Num b) => a -> b
fromIntegral p
k'
in
(,) (Float
c1 Float -> Float -> Float
forall a. Num a => a -> a -> a
+ Float
r Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float -> Float
forall a. Floating a => a -> a
sin (Float
kFloat -> Float -> Float
forall a. Num a => a -> a -> a
*Float
α))
(Float
c2 Float -> Float -> Float
forall a. Num a => a -> a -> a
- Float
r Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float -> Float
forall a. Floating a => a -> a
cos (Float
kFloat -> Float -> Float
forall a. Num a => a -> a -> a
*Float
α))
verticesList :: [(Float, Float)]
verticesList = (Int -> (Float, Float)) -> [Int] -> [(Float, Float)]
forall a b. (a -> b) -> [a] -> [b]
map Int -> (Float, Float)
forall {p}. Integral p => p -> (Float, Float)
vertice [Int
0 .. (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1)]
directions :: AttributeValue
directions =
if Int -> Bool
forall a. Integral a => a -> Bool
even Int
n
then
Path -> AttributeValue
mkPath (Path -> AttributeValue) -> Path -> AttributeValue
forall a b. (a -> b) -> a -> b
$ do
Float -> Float -> Path
forall a. Show a => a -> a -> Path
m ((Float, Float) -> Float
forall a b. (a, b) -> a
fst ((Float, Float) -> Float) -> (Float, Float) -> Float
forall a b. (a -> b) -> a -> b
$ [(Float, Float)] -> (Float, Float)
forall a. HasCallStack => [a] -> a
head [(Float, Float)]
verticesList) ((Float, Float) -> Float
forall a b. (a, b) -> b
snd ((Float, Float) -> Float) -> (Float, Float) -> Float
forall a b. (a -> b) -> a -> b
$ [(Float, Float)] -> (Float, Float)
forall a. HasCallStack => [a] -> a
head [(Float, Float)]
verticesList)
((Float, Float) -> Path) -> [(Float, Float)] -> Path
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ ((Float -> Float -> Path) -> (Float, Float) -> Path
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry Float -> Float -> Path
forall a. Show a => a -> a -> Path
S.l) (([(Float, Float)], [(Float, Float)]) -> [(Float, Float)]
forall a b. (a, b) -> a
fst (([(Float, Float)], [(Float, Float)]) -> [(Float, Float)])
-> ([(Float, Float)], [(Float, Float)]) -> [(Float, Float)]
forall a b. (a -> b) -> a -> b
$ [(Float, Float)] -> ([(Float, Float)], [(Float, Float)])
forall a. [a] -> ([a], [a])
evenOddSplit [(Float, Float)]
verticesList)
Path
S.z
Float -> Float -> Path
forall a. Show a => a -> a -> Path
m ((Float, Float) -> Float
forall a b. (a, b) -> a
fst ((Float, Float) -> Float) -> (Float, Float) -> Float
forall a b. (a -> b) -> a -> b
$ [(Float, Float)]
verticesList [(Float, Float)] -> Int -> (Float, Float)
forall a. HasCallStack => [a] -> Int -> a
!! Int
1) ((Float, Float) -> Float
forall a b. (a, b) -> b
snd ((Float, Float) -> Float) -> (Float, Float) -> Float
forall a b. (a -> b) -> a -> b
$ [(Float, Float)]
verticesList [(Float, Float)] -> Int -> (Float, Float)
forall a. HasCallStack => [a] -> Int -> a
!! Int
1)
((Float, Float) -> Path) -> [(Float, Float)] -> Path
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ ((Float -> Float -> Path) -> (Float, Float) -> Path
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry Float -> Float -> Path
forall a. Show a => a -> a -> Path
S.l) (([(Float, Float)], [(Float, Float)]) -> [(Float, Float)]
forall a b. (a, b) -> b
snd (([(Float, Float)], [(Float, Float)]) -> [(Float, Float)])
-> ([(Float, Float)], [(Float, Float)]) -> [(Float, Float)]
forall a b. (a -> b) -> a -> b
$ [(Float, Float)] -> ([(Float, Float)], [(Float, Float)])
forall a. [a] -> ([a], [a])
evenOddSplit [(Float, Float)]
verticesList)
Path
S.z
else
Path -> AttributeValue
mkPath (Path -> AttributeValue) -> Path -> AttributeValue
forall a b. (a -> b) -> a -> b
$ do
Float -> Float -> Path
forall a. Show a => a -> a -> Path
m ((Float, Float) -> Float
forall a b. (a, b) -> a
fst ((Float, Float) -> Float) -> (Float, Float) -> Float
forall a b. (a -> b) -> a -> b
$ [(Float, Float)] -> (Float, Float)
forall a. HasCallStack => [a] -> a
head [(Float, Float)]
verticesList) ((Float, Float) -> Float
forall a b. (a, b) -> b
snd ((Float, Float) -> Float) -> (Float, Float) -> Float
forall a b. (a -> b) -> a -> b
$ [(Float, Float)] -> (Float, Float)
forall a. HasCallStack => [a] -> a
head [(Float, Float)]
verticesList)
((Float, Float) -> Path) -> [(Float, Float)] -> Path
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ ((Float -> Float -> Path) -> (Float, Float) -> Path
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry Float -> Float -> Path
forall a. Show a => a -> a -> Path
S.l) ([(Float, Float)] -> [(Float, Float)]
forall a. HasCallStack => [a] -> [a]
tail ([(Float, Float)] -> [(Float, Float)])
-> [(Float, Float)] -> [(Float, Float)]
forall a b. (a -> b) -> a -> b
$ ([(Float, Float)], [(Float, Float)]) -> [(Float, Float)]
forall a b. (a, b) -> a
fst (([(Float, Float)], [(Float, Float)]) -> [(Float, Float)])
-> ([(Float, Float)], [(Float, Float)]) -> [(Float, Float)]
forall a b. (a -> b) -> a -> b
$ [(Float, Float)] -> ([(Float, Float)], [(Float, Float)])
forall a. [a] -> ([a], [a])
evenOddSplit ([(Float, Float)] -> ([(Float, Float)], [(Float, Float)]))
-> [(Float, Float)] -> ([(Float, Float)], [(Float, Float)])
forall a b. (a -> b) -> a -> b
$ [(Float, Float)]
verticesList [(Float, Float)] -> [(Float, Float)] -> [(Float, Float)]
forall a. [a] -> [a] -> [a]
++ [(Float, Float)]
verticesList)
Path
S.z
starPolygonWithBorder
:: Int
-> Float
-> Float
-> (Float , Float)
-> Svg
starPolygonWithBorder :: Int -> Float -> Float -> (Float, Float) -> Svg
starPolygonWithBorder Int
n Float
r1 Float
w (Float
c1,Float
c2) =
Svg
S.path
Svg -> Attribute -> Svg
forall h. Attributable h => h -> Attribute -> h
! AttributeValue -> Attribute
A.class_ AttributeValue
"HaskellSvgIcons__starPolygonWithBorder"
Svg -> Attribute -> Svg
forall h. Attributable h => h -> Attribute -> h
! AttributeValue -> Attribute
A.d AttributeValue
directions
where
β :: Float
β = Float
2 Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float
forall a. Floating a => a
pi Float -> Float -> Float
forall a. Fractional a => a -> a -> a
/ (Int -> Float
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
n)
ɣ :: Float
ɣ = Float
forall a. Floating a => a
pi Float -> Float -> Float
forall a. Fractional a => a -> a -> a
/ Float
2 Float -> Float -> Float
forall a. Num a => a -> a -> a
- Float
β
r2 :: Float
r2 = Float
r1 Float -> Float -> Float
forall a. Num a => a -> a -> a
- (Float
w Float -> Float -> Float
forall a. Fractional a => a -> a -> a
/ Float -> Float
forall a. Floating a => a -> a
tan Float
ɣ)
outerV :: a -> (Float, Float)
outerV a
k = (,)
(Float
c1 Float -> Float -> Float
forall a. Num a => a -> a -> a
+ Float
r1 Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float -> Float
forall a. Floating a => a -> a
sin (Float
β Float -> Float -> Float
forall a. Num a => a -> a -> a
* a -> Float
forall a b. (Integral a, Num b) => a -> b
fromIntegral a
k))
(Float
c2 Float -> Float -> Float
forall a. Num a => a -> a -> a
- Float
r1 Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float -> Float
forall a. Floating a => a -> a
cos (Float
β Float -> Float -> Float
forall a. Num a => a -> a -> a
* a -> Float
forall a b. (Integral a, Num b) => a -> b
fromIntegral a
k))
innerV :: a -> (Float, Float)
innerV a
k = (,)
(Float
c1 Float -> Float -> Float
forall a. Num a => a -> a -> a
+ Float
r2 Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float -> Float
forall a. Floating a => a -> a
sin (Float
β Float -> Float -> Float
forall a. Num a => a -> a -> a
* a -> Float
forall a b. (Integral a, Num b) => a -> b
fromIntegral a
k))
(Float
c2 Float -> Float -> Float
forall a. Num a => a -> a -> a
- Float
r2 Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float -> Float
forall a. Floating a => a -> a
cos (Float
β Float -> Float -> Float
forall a. Num a => a -> a -> a
* a -> Float
forall a b. (Integral a, Num b) => a -> b
fromIntegral a
k))
directions :: AttributeValue
directions =
if Int -> Bool
forall a. Integral a => a -> Bool
even Int
n
then
Path -> AttributeValue
mkPath (Path -> AttributeValue) -> Path -> AttributeValue
forall a b. (a -> b) -> a -> b
$ do
((Float -> Float -> Path) -> (Float, Float) -> Path
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry Float -> Float -> Path
forall a. Show a => a -> a -> Path
S.m) (Integer -> (Float, Float)
forall {p}. Integral p => p -> (Float, Float)
outerV Integer
0)
((Float, Float) -> Path) -> [(Float, Float)] -> Path
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ ((Float -> Float -> Path) -> (Float, Float) -> Path
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry Float -> Float -> Path
forall a. Show a => a -> a -> Path
S.l) ((Int -> (Float, Float)) -> [Int] -> [(Float, Float)]
forall a b. (a -> b) -> [a] -> [b]
map Int -> (Float, Float)
forall {p}. Integral p => p -> (Float, Float)
outerV [Int
2, Int
4 .. Int
n])
Path
S.z
((Float -> Float -> Path) -> (Float, Float) -> Path
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry Float -> Float -> Path
forall a. Show a => a -> a -> Path
S.m) (Integer -> (Float, Float)
forall {p}. Integral p => p -> (Float, Float)
outerV Integer
1)
((Float, Float) -> Path) -> [(Float, Float)] -> Path
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ ((Float -> Float -> Path) -> (Float, Float) -> Path
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry Float -> Float -> Path
forall a. Show a => a -> a -> Path
S.l) ((Int -> (Float, Float)) -> [Int] -> [(Float, Float)]
forall a b. (a -> b) -> [a] -> [b]
map Int -> (Float, Float)
forall {p}. Integral p => p -> (Float, Float)
outerV [Int
3, Int
5 .. Int
n])
Path
S.z
((Float -> Float -> Path) -> (Float, Float) -> Path
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry Float -> Float -> Path
forall a. Show a => a -> a -> Path
S.m) (Integer -> (Float, Float)
forall {p}. Integral p => p -> (Float, Float)
innerV Integer
0)
((Float, Float) -> Path) -> [(Float, Float)] -> Path
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ ((Float -> Float -> Path) -> (Float, Float) -> Path
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry Float -> Float -> Path
forall a. Show a => a -> a -> Path
S.l) ([(Float, Float)] -> [(Float, Float)]
forall a. [a] -> [a]
reverse ([(Float, Float)] -> [(Float, Float)])
-> [(Float, Float)] -> [(Float, Float)]
forall a b. (a -> b) -> a -> b
$ (Int -> (Float, Float)) -> [Int] -> [(Float, Float)]
forall a b. (a -> b) -> [a] -> [b]
map Int -> (Float, Float)
forall {p}. Integral p => p -> (Float, Float)
innerV [Int
2, Int
4 .. Int
n])
Path
S.z
((Float -> Float -> Path) -> (Float, Float) -> Path
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry Float -> Float -> Path
forall a. Show a => a -> a -> Path
S.m) (Integer -> (Float, Float)
forall {p}. Integral p => p -> (Float, Float)
innerV Integer
1)
((Float, Float) -> Path) -> [(Float, Float)] -> Path
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ ((Float -> Float -> Path) -> (Float, Float) -> Path
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry Float -> Float -> Path
forall a. Show a => a -> a -> Path
S.l) ([(Float, Float)] -> [(Float, Float)]
forall a. [a] -> [a]
reverse ([(Float, Float)] -> [(Float, Float)])
-> [(Float, Float)] -> [(Float, Float)]
forall a b. (a -> b) -> a -> b
$ (Int -> (Float, Float)) -> [Int] -> [(Float, Float)]
forall a b. (a -> b) -> [a] -> [b]
map Int -> (Float, Float)
forall {p}. Integral p => p -> (Float, Float)
innerV [Int
3, Int
5 .. Int
n])
Path
S.z
else
Path -> AttributeValue
mkPath (Path -> AttributeValue) -> Path -> AttributeValue
forall a b. (a -> b) -> a -> b
$ do
((Float -> Float -> Path) -> (Float, Float) -> Path
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry Float -> Float -> Path
forall a. Show a => a -> a -> Path
S.m) (Integer -> (Float, Float)
forall {p}. Integral p => p -> (Float, Float)
outerV Integer
0)
((Float, Float) -> Path) -> [(Float, Float)] -> Path
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ ((Float -> Float -> Path) -> (Float, Float) -> Path
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry Float -> Float -> Path
forall a. Show a => a -> a -> Path
S.l) ((Int -> (Float, Float)) -> [Int] -> [(Float, Float)]
forall a b. (a -> b) -> [a] -> [b]
map Int -> (Float, Float)
forall {p}. Integral p => p -> (Float, Float)
outerV [Int
2, Int
4 .. (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1)])
Path
S.z
((Float -> Float -> Path) -> (Float, Float) -> Path
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry Float -> Float -> Path
forall a. Show a => a -> a -> Path
S.m) (Integer -> (Float, Float)
forall {p}. Integral p => p -> (Float, Float)
innerV Integer
0)
((Float, Float) -> Path) -> [(Float, Float)] -> Path
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ ((Float -> Float -> Path) -> (Float, Float) -> Path
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry Float -> Float -> Path
forall a. Show a => a -> a -> Path
S.l) ([(Float, Float)] -> [(Float, Float)]
forall a. [a] -> [a]
reverse ([(Float, Float)] -> [(Float, Float)])
-> [(Float, Float)] -> [(Float, Float)]
forall a b. (a -> b) -> a -> b
$ (Int -> (Float, Float)) -> [Int] -> [(Float, Float)]
forall a b. (a -> b) -> [a] -> [b]
map Int -> (Float, Float)
forall {p}. Integral p => p -> (Float, Float)
innerV [Int
2, Int
4 .. (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1)])
Path
S.z
starPolygonOverlap
:: Int
-> Float
-> Float
-> (Float , Float)
-> Svg
starPolygonOverlap :: Int -> Float -> Float -> (Float, Float) -> Svg
starPolygonOverlap Int
n Float
r1 Float
w (Float
c1,Float
c2) =
Svg -> Svg
S.g
(Svg -> Svg) -> Attribute -> Svg -> Svg
forall h. Attributable h => h -> Attribute -> h
! AttributeValue -> Attribute
A.class_ AttributeValue
"HaskellSvgIcons__starPolygonOverlap"
(Svg -> Svg) -> Svg -> Svg
forall a b. (a -> b) -> a -> b
$ do
Int -> Float -> Float -> (Float, Float) -> Svg
starPolygonWithBorder Int
n Float
r1 Float
w (Float
c1,Float
c2)
Svg -> Attribute -> Svg
forall h. Attributable h => h -> Attribute -> h
! AttributeValue -> Attribute
A.stroke AttributeValue
"none"
(Int -> Svg) -> [Int] -> Svg
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ (Integer -> Svg
forall {a}. Integral a => a -> Svg
makeSide (Integer -> Svg) -> (Int -> Integer) -> Int -> Svg
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> Integer
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int -> Integer) -> (Int -> Int) -> Int -> Integer
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((-Int
1)Int -> Int -> Int
forall a. Num a => a -> a -> a
*)) [Int
0 .. (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1)]
Svg
fixFirstSide
where
β :: Float
β = Float
2 Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float
forall a. Floating a => a
pi Float -> Float -> Float
forall a. Fractional a => a -> a -> a
/ (Int -> Float
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
n)
r2 :: Float
r2 = Float
r1 Float -> Float -> Float
forall a. Num a => a -> a -> a
- Float
w Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float -> Float
forall a. Floating a => a -> a
tan Float
β
r3 :: Float
r3 = Float
r1 Float -> Float -> Float
forall a. Num a => a -> a -> a
* (Float
2Float -> Float -> Float
forall a. Num a => a -> a -> a
*Float -> Float
forall a. Floating a => a -> a
cos(Float
βFloat -> Float -> Float
forall a. Fractional a => a -> a -> a
/Float
2) Float -> Float -> Float
forall a. Num a => a -> a -> a
- Float
1Float -> Float -> Float
forall a. Fractional a => a -> a -> a
/Float -> Float
forall a. Floating a => a -> a
cos(Float
βFloat -> Float -> Float
forall a. Fractional a => a -> a -> a
/Float
2))
apt3 :: Float
apt3 = Float
r3 Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float -> Float
forall a. Floating a => a -> a
cos (Float
βFloat -> Float -> Float
forall a. Fractional a => a -> a -> a
/Float
2)
r4 :: Float
r4 = Float
r2 Float -> Float -> Float
forall a. Num a => a -> a -> a
* (Float
2Float -> Float -> Float
forall a. Num a => a -> a -> a
*Float -> Float
forall a. Floating a => a -> a
cos(Float
βFloat -> Float -> Float
forall a. Fractional a => a -> a -> a
/Float
2) Float -> Float -> Float
forall a. Num a => a -> a -> a
- Float
1Float -> Float -> Float
forall a. Fractional a => a -> a -> a
/Float -> Float
forall a. Floating a => a -> a
cos(Float
βFloat -> Float -> Float
forall a. Fractional a => a -> a -> a
/Float
2))
apt4 :: Float
apt4 = Float
r4 Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float -> Float
forall a. Floating a => a -> a
cos (Float
βFloat -> Float -> Float
forall a. Fractional a => a -> a -> a
/Float
2)
outerV :: a -> (Float, Float)
outerV a
k = (,)
(Float
c1 Float -> Float -> Float
forall a. Num a => a -> a -> a
+ Float
r1 Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float -> Float
forall a. Floating a => a -> a
sin (Float
β Float -> Float -> Float
forall a. Num a => a -> a -> a
* a -> Float
forall a b. (Integral a, Num b) => a -> b
fromIntegral a
k))
(Float
c2 Float -> Float -> Float
forall a. Num a => a -> a -> a
- Float
r1 Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float -> Float
forall a. Floating a => a -> a
cos (Float
β Float -> Float -> Float
forall a. Num a => a -> a -> a
* a -> Float
forall a b. (Integral a, Num b) => a -> b
fromIntegral a
k))
innerV :: a -> (Float, Float)
innerV a
k = (,)
(Float
c1 Float -> Float -> Float
forall a. Num a => a -> a -> a
+ Float
r2 Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float -> Float
forall a. Floating a => a -> a
sin (Float
β Float -> Float -> Float
forall a. Num a => a -> a -> a
* a -> Float
forall a b. (Integral a, Num b) => a -> b
fromIntegral a
k))
(Float
c2 Float -> Float -> Float
forall a. Num a => a -> a -> a
- Float
r2 Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float -> Float
forall a. Floating a => a -> a
cos (Float
β Float -> Float -> Float
forall a. Num a => a -> a -> a
* a -> Float
forall a b. (Integral a, Num b) => a -> b
fromIntegral a
k))
fixFirstSide :: Svg
fixFirstSide =
let
(Float
om1,Float
om2) = (Float
c1 Float -> Float -> Float
forall a. Num a => a -> a -> a
+ Float
apt3 Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float -> Float
forall a. Floating a => a -> a
sin(-Float
β) , Float
c2 Float -> Float -> Float
forall a. Num a => a -> a -> a
- Float
apt3 Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float -> Float
forall a. Floating a => a -> a
cos(-Float
β))
(Float
im1,Float
im2) = (Float
c1 Float -> Float -> Float
forall a. Num a => a -> a -> a
+ Float
apt4 Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float -> Float
forall a. Floating a => a -> a
sin(-Float
β) , Float
c2 Float -> Float -> Float
forall a. Num a => a -> a -> a
- Float
apt4 Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float -> Float
forall a. Floating a => a -> a
cos(-Float
β))
fillFix :: AttributeValue
fillFix = Path -> AttributeValue
mkPath (Path -> AttributeValue) -> Path -> AttributeValue
forall a b. (a -> b) -> a -> b
$ do
(Float -> Float -> Path) -> (Float, Float) -> Path
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry Float -> Float -> Path
forall a. Show a => a -> a -> Path
S.m ((Float, Float) -> Path) -> (Float, Float) -> Path
forall a b. (a -> b) -> a -> b
$ Integer -> (Float, Float)
forall {p}. Integral p => p -> (Float, Float)
outerV Integer
0
(Float -> Float -> Path) -> (Float, Float) -> Path
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry Float -> Float -> Path
forall a. Show a => a -> a -> Path
S.l ((Float, Float) -> Path) -> (Float, Float) -> Path
forall a b. (a -> b) -> a -> b
$ (Float
om1,Float
om2)
(Float -> Float -> Path) -> (Float, Float) -> Path
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry Float -> Float -> Path
forall a. Show a => a -> a -> Path
S.l ((Float, Float) -> Path) -> (Float, Float) -> Path
forall a b. (a -> b) -> a -> b
$ (Float
im1,Float
im2)
(Float -> Float -> Path) -> (Float, Float) -> Path
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry Float -> Float -> Path
forall a. Show a => a -> a -> Path
S.l ((Float, Float) -> Path) -> (Float, Float) -> Path
forall a b. (a -> b) -> a -> b
$ Integer -> (Float, Float)
forall {p}. Integral p => p -> (Float, Float)
innerV Integer
0
Path
S.z
strokeFix :: AttributeValue
strokeFix = Path -> AttributeValue
mkPath (Path -> AttributeValue) -> Path -> AttributeValue
forall a b. (a -> b) -> a -> b
$ do
(Float -> Float -> Path) -> (Float, Float) -> Path
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry Float -> Float -> Path
forall a. Show a => a -> a -> Path
S.m ((Float, Float) -> Path) -> (Float, Float) -> Path
forall a b. (a -> b) -> a -> b
$ Integer -> (Float, Float)
forall {p}. Integral p => p -> (Float, Float)
outerV Integer
0
(Float -> Float -> Path) -> (Float, Float) -> Path
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry Float -> Float -> Path
forall a. Show a => a -> a -> Path
S.l ((Float, Float) -> Path) -> (Float, Float) -> Path
forall a b. (a -> b) -> a -> b
$ (Float
om1,Float
om2)
(Float -> Float -> Path) -> (Float, Float) -> Path
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry Float -> Float -> Path
forall a. Show a => a -> a -> Path
S.m ((Float, Float) -> Path) -> (Float, Float) -> Path
forall a b. (a -> b) -> a -> b
$ (Float
im1,Float
im2)
(Float -> Float -> Path) -> (Float, Float) -> Path
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry Float -> Float -> Path
forall a. Show a => a -> a -> Path
S.l ((Float, Float) -> Path) -> (Float, Float) -> Path
forall a b. (a -> b) -> a -> b
$ Integer -> (Float, Float)
forall {p}. Integral p => p -> (Float, Float)
innerV Integer
0
in
Svg -> Svg
S.g (Svg -> Svg) -> Svg -> Svg
forall a b. (a -> b) -> a -> b
$ do
Svg
S.path
Svg -> Attribute -> Svg
forall h. Attributable h => h -> Attribute -> h
! AttributeValue -> Attribute
A.stroke AttributeValue
"none"
Svg -> Attribute -> Svg
forall h. Attributable h => h -> Attribute -> h
! AttributeValue -> Attribute
A.d AttributeValue
fillFix
Svg
S.path
Svg -> Attribute -> Svg
forall h. Attributable h => h -> Attribute -> h
! AttributeValue -> Attribute
A.strokeLinecap AttributeValue
"round"
Svg -> Attribute -> Svg
forall h. Attributable h => h -> Attribute -> h
! AttributeValue -> Attribute
A.d AttributeValue
strokeFix
makeSide :: a -> Svg
makeSide a
k =
Svg -> Svg
S.g (Svg -> Svg) -> Svg -> Svg
forall a b. (a -> b) -> a -> b
$ do
Svg
S.path
Svg -> Attribute -> Svg
forall h. Attributable h => h -> Attribute -> h
! AttributeValue -> Attribute
A.d (a -> AttributeValue
forall {a}. Integral a => a -> AttributeValue
sideDirs1 a
k)
Svg -> Attribute -> Svg
forall h. Attributable h => h -> Attribute -> h
! AttributeValue -> Attribute
A.stroke AttributeValue
"none"
Svg
S.path
Svg -> Attribute -> Svg
forall h. Attributable h => h -> Attribute -> h
! AttributeValue -> Attribute
A.d (a -> AttributeValue
forall {a}. Integral a => a -> AttributeValue
sideDirs2 a
k)
Svg -> Attribute -> Svg
forall h. Attributable h => h -> Attribute -> h
! AttributeValue -> Attribute
A.strokeLinecap AttributeValue
"round"
sideDirs1 :: a -> AttributeValue
sideDirs1 a
k = Path -> AttributeValue
mkPath (Path -> AttributeValue) -> Path -> AttributeValue
forall a b. (a -> b) -> a -> b
$ do
(Float -> Float -> Path) -> (Float, Float) -> Path
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry Float -> Float -> Path
forall a. Show a => a -> a -> Path
S.m ((Float, Float) -> Path) -> (Float, Float) -> Path
forall a b. (a -> b) -> a -> b
$ a -> (Float, Float)
forall {p}. Integral p => p -> (Float, Float)
outerV a
k
(Float -> Float -> Path) -> (Float, Float) -> Path
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry Float -> Float -> Path
forall a. Show a => a -> a -> Path
S.l ((Float, Float) -> Path) -> (Float, Float) -> Path
forall a b. (a -> b) -> a -> b
$ a -> (Float, Float)
forall {p}. Integral p => p -> (Float, Float)
outerV (a
ka -> a -> a
forall a. Num a => a -> a -> a
-a
2)
(Float -> Float -> Path) -> (Float, Float) -> Path
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry Float -> Float -> Path
forall a. Show a => a -> a -> Path
S.l ((Float, Float) -> Path) -> (Float, Float) -> Path
forall a b. (a -> b) -> a -> b
$ a -> (Float, Float)
forall {p}. Integral p => p -> (Float, Float)
innerV (a
ka -> a -> a
forall a. Num a => a -> a -> a
-a
2)
(Float -> Float -> Path) -> (Float, Float) -> Path
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry Float -> Float -> Path
forall a. Show a => a -> a -> Path
S.l ((Float, Float) -> Path) -> (Float, Float) -> Path
forall a b. (a -> b) -> a -> b
$ a -> (Float, Float)
forall {p}. Integral p => p -> (Float, Float)
innerV a
k
Path
S.z
sideDirs2 :: a -> AttributeValue
sideDirs2 a
k = Path -> AttributeValue
mkPath (Path -> AttributeValue) -> Path -> AttributeValue
forall a b. (a -> b) -> a -> b
$ do
(Float -> Float -> Path) -> (Float, Float) -> Path
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry Float -> Float -> Path
forall a. Show a => a -> a -> Path
S.m ((Float, Float) -> Path) -> (Float, Float) -> Path
forall a b. (a -> b) -> a -> b
$ a -> (Float, Float)
forall {p}. Integral p => p -> (Float, Float)
outerV a
k
(Float -> Float -> Path) -> (Float, Float) -> Path
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry Float -> Float -> Path
forall a. Show a => a -> a -> Path
S.l ((Float, Float) -> Path) -> (Float, Float) -> Path
forall a b. (a -> b) -> a -> b
$ a -> (Float, Float)
forall {p}. Integral p => p -> (Float, Float)
outerV (a
ka -> a -> a
forall a. Num a => a -> a -> a
-a
2)
(Float -> Float -> Path) -> (Float, Float) -> Path
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry Float -> Float -> Path
forall a. Show a => a -> a -> Path
S.m ((Float, Float) -> Path) -> (Float, Float) -> Path
forall a b. (a -> b) -> a -> b
$ a -> (Float, Float)
forall {p}. Integral p => p -> (Float, Float)
innerV (a
ka -> a -> a
forall a. Num a => a -> a -> a
-a
2)
(Float -> Float -> Path) -> (Float, Float) -> Path
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry Float -> Float -> Path
forall a. Show a => a -> a -> Path
S.l ((Float, Float) -> Path) -> (Float, Float) -> Path
forall a b. (a -> b) -> a -> b
$ a -> (Float, Float)
forall {p}. Integral p => p -> (Float, Float)
innerV a
k
starOutline
:: Int
-> Float
-> Float
-> (Float , Float)
-> Svg
starOutline :: Int -> Float -> Float -> (Float, Float) -> Svg
starOutline Int
n Float
r1 Float
r2 (Float
c1,Float
c2) =
Svg
S.path
Svg -> Attribute -> Svg
forall h. Attributable h => h -> Attribute -> h
! AttributeValue -> Attribute
A.class_ AttributeValue
"HaskellSvgIcons__starOutline"
Svg -> Attribute -> Svg
forall h. Attributable h => h -> Attribute -> h
! AttributeValue -> Attribute
A.d AttributeValue
directions
where
β :: Float
β = Float
2 Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float
forall a. Floating a => a
pi Float -> Float -> Float
forall a. Fractional a => a -> a -> a
/ (Int -> Float
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
n)
outerV :: Float -> (Float, Float)
outerV Float
k = (,)
(Float
c1 Float -> Float -> Float
forall a. Num a => a -> a -> a
+ Float
r1 Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float -> Float
forall a. Floating a => a -> a
sin (Float
kFloat -> Float -> Float
forall a. Num a => a -> a -> a
*Float
β))
(Float
c2 Float -> Float -> Float
forall a. Num a => a -> a -> a
- Float
r1 Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float -> Float
forall a. Floating a => a -> a
cos (Float
kFloat -> Float -> Float
forall a. Num a => a -> a -> a
*Float
β))
innerV :: Float -> (Float, Float)
innerV Float
k = (,)
(Float
c1 Float -> Float -> Float
forall a. Num a => a -> a -> a
+ Float
r2 Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float -> Float
forall a. Floating a => a -> a
sin (Float
kFloat -> Float -> Float
forall a. Num a => a -> a -> a
*Float
β Float -> Float -> Float
forall a. Num a => a -> a -> a
+ Float
βFloat -> Float -> Float
forall a. Fractional a => a -> a -> a
/Float
2))
(Float
c2 Float -> Float -> Float
forall a. Num a => a -> a -> a
- Float
r2 Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float -> Float
forall a. Floating a => a -> a
cos (Float
kFloat -> Float -> Float
forall a. Num a => a -> a -> a
*Float
β Float -> Float -> Float
forall a. Num a => a -> a -> a
+ Float
βFloat -> Float -> Float
forall a. Fractional a => a -> a -> a
/Float
2))
vertices :: [(Float, Float)]
vertices =
(Float -> [(Float, Float)] -> [(Float, Float)])
-> [(Float, Float)] -> [Float] -> [(Float, Float)]
forall a b. (a -> b -> b) -> b -> [a] -> b
forall (t :: * -> *) a b.
Foldable t =>
(a -> b -> b) -> b -> t a -> b
foldr
(\Float
k [(Float, Float)]
acc -> (Float -> (Float, Float)
outerV Float
k) (Float, Float) -> [(Float, Float)] -> [(Float, Float)]
forall a. a -> [a] -> [a]
: (Float -> (Float, Float)
innerV Float
k) (Float, Float) -> [(Float, Float)] -> [(Float, Float)]
forall a. a -> [a] -> [a]
: [(Float, Float)]
acc)
[]
((Int -> Float) -> [Int] -> [Float]
forall a b. (a -> b) -> [a] -> [b]
map Int -> Float
forall a b. (Integral a, Num b) => a -> b
fromIntegral [Int
0 .. (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1)])
directions :: AttributeValue
directions = Path -> AttributeValue
mkPath (Path -> AttributeValue) -> Path -> AttributeValue
forall a b. (a -> b) -> a -> b
$ do
Float -> Float -> Path
forall a. Show a => a -> a -> Path
m ((Float, Float) -> Float
forall a b. (a, b) -> a
fst ((Float, Float) -> Float) -> (Float, Float) -> Float
forall a b. (a -> b) -> a -> b
$ [(Float, Float)] -> (Float, Float)
forall a. HasCallStack => [a] -> a
head [(Float, Float)]
vertices) ((Float, Float) -> Float
forall a b. (a, b) -> b
snd ((Float, Float) -> Float) -> (Float, Float) -> Float
forall a b. (a -> b) -> a -> b
$ [(Float, Float)] -> (Float, Float)
forall a. HasCallStack => [a] -> a
head [(Float, Float)]
vertices)
((Float, Float) -> Path) -> [(Float, Float)] -> Path
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ ((Float -> Float -> Path) -> (Float, Float) -> Path
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry Float -> Float -> Path
forall a. Show a => a -> a -> Path
S.l) ([(Float, Float)] -> [(Float, Float)]
forall a. HasCallStack => [a] -> [a]
tail [(Float, Float)]
vertices)
Path
S.z
starFat ::
Int -> Float -> (Float , Float) -> Svg
starFat :: Int -> Float -> (Float, Float) -> Svg
starFat Int
n Float
r1 (Float
c1,Float
c2) =
Int -> Float -> Float -> (Float, Float) -> Svg
starOutline Int
n Float
r1 Float
r2 (Float
c1,Float
c2)
where
β :: Float
β = Float
2 Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float
forall a. Floating a => a
pi Float -> Float -> Float
forall a. Fractional a => a -> a -> a
/ (Int -> Float
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
n)
r2 :: Float
r2 = Float
r1 Float -> Float -> Float
forall a. Num a => a -> a -> a
* (Float
1 Float -> Float -> Float
forall a. Num a => a -> a -> a
- Float -> Float
forall a. Floating a => a -> a
sin(Float
βFloat -> Float -> Float
forall a. Fractional a => a -> a -> a
/Float
2)Float -> Float -> Float
forall a. Num a => a -> a -> a
*Float -> Float
forall a. Floating a => a -> a
tan(Float
βFloat -> Float -> Float
forall a. Fractional a => a -> a -> a
/Float
2))
starRegular ::
Int -> Float -> (Float , Float) -> Svg
starRegular :: Int -> Float -> (Float, Float) -> Svg
starRegular Int
n Float
r1 (Float
c1,Float
c2) =
Int -> Float -> Float -> (Float, Float) -> Svg
starOutline Int
n Float
r1 Float
r2 (Float
c1,Float
c2)
where
β :: Float
β = Float
2 Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float
forall a. Floating a => a
pi Float -> Float -> Float
forall a. Fractional a => a -> a -> a
/ (Int -> Float
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
n)
r2 :: Float
r2 = Float
r1 Float -> Float -> Float
forall a. Num a => a -> a -> a
* (Float
2Float -> Float -> Float
forall a. Num a => a -> a -> a
*Float -> Float
forall a. Floating a => a -> a
cos(Float
βFloat -> Float -> Float
forall a. Fractional a => a -> a -> a
/Float
2) Float -> Float -> Float
forall a. Num a => a -> a -> a
- Float
1Float -> Float -> Float
forall a. Fractional a => a -> a -> a
/Float -> Float
forall a. Floating a => a -> a
cos(Float
βFloat -> Float -> Float
forall a. Fractional a => a -> a -> a
/Float
2))
starSlim ::
Int -> Float -> (Float, Float) -> Svg
starSlim :: Int -> Float -> (Float, Float) -> Svg
starSlim Int
n Float
r1 (Float
c1,Float
c2) =
Int -> Float -> Float -> (Float, Float) -> Svg
starOutline Int
n Float
r1 Float
r2 (Float
c1,Float
c2)
where
β :: Float
β = Float
2 Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float
forall a. Floating a => a
pi Float -> Float -> Float
forall a. Fractional a => a -> a -> a
/ (Int -> Float
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
n)
r2 :: Float
r2 = Float
r1 Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float -> Float
forall a. Floating a => a -> a
cos Float
β
asterisk
:: Int
-> Float
-> (Float , Float)
-> Svg
asterisk :: Int -> Float -> (Float, Float) -> Svg
asterisk Int
n Float
r (Float
c1,Float
c2) =
Svg
S.path
Svg -> Attribute -> Svg
forall h. Attributable h => h -> Attribute -> h
! AttributeValue -> Attribute
A.class_ AttributeValue
"HaskellSvgIcons__asterisk"
Svg -> Attribute -> Svg
forall h. Attributable h => h -> Attribute -> h
! AttributeValue -> Attribute
A.d AttributeValue
directions
where
α :: Float
α = Float
forall a. Floating a => a
pi Float -> Float -> Float
forall a. Fractional a => a -> a -> a
/ (Int -> Float
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
n)
directions :: AttributeValue
directions = Path -> AttributeValue
mkPath (Path -> AttributeValue) -> Path -> AttributeValue
forall a b. (a -> b) -> a -> b
$
(Int -> Path) -> [Int] -> Path
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ (Float -> Path
joinOpposites (Float -> Path) -> (Int -> Float) -> Int -> Path
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> Float
forall a b. (Integral a, Num b) => a -> b
fromIntegral) [Int
0 .. (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1)]
joinOpposites :: Float -> Path
joinOpposites Float
k = do
Float -> Float -> Path
forall a. Show a => a -> a -> Path
m
(Float
c1 Float -> Float -> Float
forall a. Num a => a -> a -> a
+ Float
r Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float -> Float
forall a. Floating a => a -> a
sin (Float
k Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float
α))
(Float
c2 Float -> Float -> Float
forall a. Num a => a -> a -> a
- Float
r Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float -> Float
forall a. Floating a => a -> a
cos (Float
k Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float
α))
Float -> Float -> Path
forall a. Show a => a -> a -> Path
l
(Float
c1 Float -> Float -> Float
forall a. Num a => a -> a -> a
+ Float
r Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float -> Float
forall a. Floating a => a -> a
sin (Float
k Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float
α Float -> Float -> Float
forall a. Num a => a -> a -> a
+ Float
forall a. Floating a => a
pi))
(Float
c2 Float -> Float -> Float
forall a. Num a => a -> a -> a
- Float
r Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float -> Float
forall a. Floating a => a -> a
cos (Float
k Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float
α Float -> Float -> Float
forall a. Num a => a -> a -> a
+ Float
forall a. Floating a => a
pi))
asteriskStar
:: Int
-> Float
-> (Float , Float)
-> Svg
asteriskStar :: Int -> Float -> (Float, Float) -> Svg
asteriskStar Int
n Float
r1 (Float
c1,Float
c2) =
Svg
S.path
Svg -> Attribute -> Svg
forall h. Attributable h => h -> Attribute -> h
! AttributeValue -> Attribute
A.class_ AttributeValue
"HaskellSvgIcons__asteriskStar"
Svg -> Attribute -> Svg
forall h. Attributable h => h -> Attribute -> h
! AttributeValue -> Attribute
A.d AttributeValue
directions
where
α :: Float
α = Float
forall a. Floating a => a
pi Float -> Float -> Float
forall a. Fractional a => a -> a -> a
/ (Int -> Float
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
n)
r2 :: Float
r2 = Float
r1 Float -> Float -> Float
forall a. Num a => a -> a -> a
* (Float
2Float -> Float -> Float
forall a. Num a => a -> a -> a
*Float -> Float
forall a. Floating a => a -> a
cos(Float
αFloat -> Float -> Float
forall a. Fractional a => a -> a -> a
/Float
2) Float -> Float -> Float
forall a. Num a => a -> a -> a
- Float
1Float -> Float -> Float
forall a. Fractional a => a -> a -> a
/Float -> Float
forall a. Floating a => a -> a
cos(Float
αFloat -> Float -> Float
forall a. Fractional a => a -> a -> a
/Float
2))
directions :: AttributeValue
directions = Path -> AttributeValue
mkPath (Path -> AttributeValue) -> Path -> AttributeValue
forall a b. (a -> b) -> a -> b
$
(Int -> Path) -> [Int] -> Path
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ (Float -> Path
joinOpposites (Float -> Path) -> (Int -> Float) -> Int -> Path
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> Float
forall a b. (Integral a, Num b) => a -> b
fromIntegral) [Int
0 .. (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1)]
joinOpposites :: Float -> Path
joinOpposites Float
k = do
Float -> Float -> Path
forall a. Show a => a -> a -> Path
m
(Float
c1 Float -> Float -> Float
forall a. Num a => a -> a -> a
+ Float
r1 Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float -> Float
forall a. Floating a => a -> a
sin (Float
k Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float
α))
(Float
c2 Float -> Float -> Float
forall a. Num a => a -> a -> a
- Float
r1 Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float -> Float
forall a. Floating a => a -> a
cos (Float
k Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float
α))
Float -> Float -> Path
forall a. Show a => a -> a -> Path
l
(Float
c1 Float -> Float -> Float
forall a. Num a => a -> a -> a
+ Float
r1 Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float -> Float
forall a. Floating a => a -> a
sin (Float
k Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float
α Float -> Float -> Float
forall a. Num a => a -> a -> a
+ Float
forall a. Floating a => a
pi))
(Float
c2 Float -> Float -> Float
forall a. Num a => a -> a -> a
- Float
r1 Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float -> Float
forall a. Floating a => a -> a
cos (Float
k Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float
α Float -> Float -> Float
forall a. Num a => a -> a -> a
+ Float
forall a. Floating a => a
pi))
Float -> Float -> Path
forall a. Show a => a -> a -> Path
m
(Float
c1 Float -> Float -> Float
forall a. Num a => a -> a -> a
+ Float
r2 Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float -> Float
forall a. Floating a => a -> a
sin (Float
0.5 Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float
α Float -> Float -> Float
forall a. Num a => a -> a -> a
+ Float
k Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float
α))
(Float
c2 Float -> Float -> Float
forall a. Num a => a -> a -> a
- Float
r2 Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float -> Float
forall a. Floating a => a -> a
cos (Float
0.5 Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float
α Float -> Float -> Float
forall a. Num a => a -> a -> a
+ Float
k Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float
α))
Float -> Float -> Path
forall a. Show a => a -> a -> Path
l
(Float
c1 Float -> Float -> Float
forall a. Num a => a -> a -> a
+ Float
r2 Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float -> Float
forall a. Floating a => a -> a
sin (Float
0.5 Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float
α Float -> Float -> Float
forall a. Num a => a -> a -> a
+ Float
k Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float
α Float -> Float -> Float
forall a. Num a => a -> a -> a
+ Float
forall a. Floating a => a
pi))
(Float
c2 Float -> Float -> Float
forall a. Num a => a -> a -> a
- Float
r2 Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float -> Float
forall a. Floating a => a -> a
cos (Float
0.5 Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float
α Float -> Float -> Float
forall a. Num a => a -> a -> a
+ Float
k Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float
α Float -> Float -> Float
forall a. Num a => a -> a -> a
+ Float
forall a. Floating a => a
pi))