package Ġcom . so y wiz . kor im . vector . raster izer Ċ Ċ import Ġcom . so y wiz . kor im . bitmap .* Ċ import Ġcom . so y wiz . kor im . color .* Ċ import Ġcom . so y wiz . kor im . paint .* Ċ import Ġcom . so y wiz . kor io . async .* Ċ import Ġcom . so y wiz . kor io . util .* Ċ import Ġcom . so y wiz . k orm a . geom .* Ċ import Ġcom . so y wiz . k orm a . geom . vector .* Ċ import Ġkotlin . test .* Ċ Ċ class ĠR aster izer Test Ġ{ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest () Ġ= Ġsuspend Test Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Bitmap 3 2 ( 1 0 0 , Ġ 1 0 0 ). context 2 d Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠ Ġfill ( Colors . RED ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġcircle ( 5 0 , Ġ 5 0 , Ġ 4 0 ) ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// }. writeTo ("/ tmp / 1 / b . png ". uni V fs , ĠPNG ) ĊĊĠĠĠĠĠĠĠ Ġval Ġr ast Ġ= ĠR aster izer () ĊĠĠĠĠĠĠĠ Ġr ast . quality Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġr ast . path . reset () ĊĠĠĠĠĠĠĠ Ġr ast . path . moveTo ( 0 . 0 , Ġ 1 0 . 0 ) ĊĠĠĠĠĠĠĠ Ġr ast . path . lineTo ( 2 . 0 , Ġ 0 . 0 ) ĊĠĠĠĠĠĠĠ Ġr ast . path . lineTo ( 1 0 . 0 , Ġ 0 . 0 ) ĊĠĠĠĠĠĠĠ Ġr ast . path . lineTo ( 1 0 . 0 , Ġ 1 0 . 0 ) ĊĠĠĠĠĠĠĠ Ġr ast . path . close () ĊĠĠĠĠĠĠĠ Ġval Ġlog Ġ= Ġarray ListOf < String >() ĊĠĠĠĠĠĠĠ Ġval Ġstats Ġ= ĠR aster izer . Stats () ĊĠĠĠĠĠĠĠ Ġr ast . raster ize Fill ( Rectangle ( 0 , Ġ 0 , Ġ 1 0 , Ġ 1 0 ), Ġquality Ġ= Ġ 8 , Ġstats Ġ= Ġstats ) Ġ{ Ġa , Ġb , Ġy Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog Ġ+= Ġ" r ast (${ ( a . toDouble () Ġ/ ĠR ast Scale . R AST _ FIXED _ SCALE ). nice Str }, Ġ${ ( a . toDouble () Ġ/ ĠR ast Scale . R AST _ FIXED _ SCALE ). nice Str }, Ġ${ ( a . toDouble () Ġ/ ĠR ast Scale . R AST _ FIXED _ SCALE ). nice Str })" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// println ( log . last ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// assertEquals ( Raster izer . Stats ( edges Checked = 3 8 0 , Ġedges Emit ted = 8 0 , Ġy Count = 9 5 ), Ġstats ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( Raster izer . Stats ( edges Checked Ġ= Ġ 1 9 0 , Ġedges Emit ted Ġ= Ġ 8 0 , Ġy Count Ġ= Ġ 8 8 ), Ġstats ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest 2 () Ġ= Ġsuspend Test Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbmp 1 Ġ= ĠBitmap 3 2 ( 1 0 0 , Ġ 1 0 0 ). context 2 d Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// debug Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfill ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Linear Gradient ( 0 , Ġ 0 , Ġ 0 , Ġ 1 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( 0 . 0 , ĠColors . BLUE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( 1 . 0 , ĠColors . GREEN ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmove To ( 0 , Ġ 2 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline To ( 1 0 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline To V ( 1 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline To H (- 1 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclose () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġship Size Ġ= Ġ 2 4 ĊĠĠĠĠĠĠĠ Ġval Ġbmp 2 Ġ= ĠBitmap 3 2 ( ship Size , Ġship Size ). context 2 d Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstroke ( Colors . RED , ĠlineWidth Ġ= Ġship Size Ġ* Ġ 0 . 0 5 , Ġline Cap Ġ= ĠLine Cap . ROUND ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmove To ( ship Size Ġ* Ġ 0 . 5 , Ġ 0 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline To ( ship Size , Ġship Size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline To ( ship Size Ġ* Ġ 0 . 5 , Ġship Size Ġ* Ġ 0 . 8 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline To ( 0 , Ġship Size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclose () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġbmp 3 Ġ= ĠBitmap 3 2 ( 3 , Ġ( ship Size Ġ* Ġ 0 . 3 ). toInt ()). context 2 d Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlineWidth Ġ= Ġ 1 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġline Cap Ġ= ĠLine Cap . ROUND ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstroke ( Colors . WHITE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmove To ( width Ġ/ Ġ 2 , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline To V ( height ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// bmp 1 . show Image And Wait () ĊĠĠĠĠĠĠĠ Ġ// bmp 2 . show Image And Wait () ĊĠĠĠĠĠĠĠ Ġ// bmp 3 . show Image And Wait () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Line Join () Ġ= Ġsuspend Test Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġhttps :// developer . mozilla . org / en - US / docs / Web / API / Canvas Rendering Context 2 D / line Join ĊĠĠĠĠĠĠĠ Ġval Ġbmp Ġ= ĠNative Image Or Bitmap 3 2 ( 5 0 0 , Ġ 5 0 0 , Ġnative Ġ= Ġfalse ). context 2 d Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// val Ġbmp Ġ= ĠNative Image Or Bitmap 3 2 ( 1 5 0 , Ġ 1 5 0 , Ġnative Ġ= Ġtrue ). context 2 d Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlineWidth Ġ= Ġ 1 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ(( i , Ġline Join ) Ġin ĠlistOf ( Line Join . ROUND , ĠLine Join . BE VEL , ĠLine Join . MIT ER ). with Index ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . line Join Ġ= Ġline Join ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkeep Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbegin Path () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmove To (- 5 , Ġ 5 Ġ+ Ġi Ġ* Ġ 4 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline To ( 3 5 , Ġ 4 5 Ġ+ Ġi Ġ* Ġ 4 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline To ( 7 5 , Ġ 5 Ġ+ Ġi Ġ* Ġ 4 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline To ( 1 1 5 , Ġ 4 5 Ġ+ Ġi Ġ* Ġ 4 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline To ( 1 5 5 , Ġ 5 Ġ+ Ġi Ġ* Ġ 4 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstroke () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkeep Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtranslate ( 0 , Ġ 3 5 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbegin Path () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmove To (- 5 , Ġ 5 Ġ+ Ġi Ġ* Ġ 4 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquad To ( 3 5 , Ġ 4 5 Ġ+ Ġi Ġ* Ġ 4 0 , Ġ 7 5 , Ġ 5 Ġ+ Ġi Ġ* Ġ 4 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquad To ( 1 1 5 , Ġ 4 5 Ġ+ Ġi Ġ* Ġ 4 0 , Ġ 1 5 5 , Ġ 5 Ġ+ Ġi Ġ* Ġ 4 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstroke () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbegin Path () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// line Join Ġ= ĠLine Join . MIT ER ĊĠĠĠĠĠĠĠĠĠĠĠ Ġline Join Ġ= ĠLine Join . BE VEL ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcircle ( 2 5 0 , Ġ 2 0 0 , Ġ 3 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstroke () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbegin Path () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmove To ( 1 5 0 , Ġ 2 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġline To ( 2 0 0 , Ġ 2 5 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġline To ( 1 5 0 , Ġ 3 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġline To ( 1 0 0 , Ġ 2 5 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// lineTo ( 1 5 0 , Ġ 2 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclose () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstroke () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( n Ġin ĠlistOf ( Line Cap . B UT T , ĠLine Cap . ROUND , ĠLine Cap . S QUARE )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkeep Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtranslate ( 2 5 0 , Ġ 2 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbegin Path () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline Cap Ġ= Ġn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmove To ( n . ordinal Ġ* Ġ 2 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline To ( n . ordinal Ġ* Ġ 2 0 , Ġ 5 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstroke () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( n Ġin ĠlistOf ( Line Cap . B UT T , ĠLine Cap . ROUND , ĠLine Cap . S QUARE )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkeep Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtranslate ( 2 5 , Ġ 2 5 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbegin Path () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline Cap Ġ= Ġn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmove To ( n . ordinal Ġ* Ġ 2 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline To ( n . ordinal Ġ* Ġ 2 0 , Ġ- 5 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstroke () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġkeep Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġradius Ġ= Ġ 5 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtranslate ( 4 0 0 , Ġ 1 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbegin Path () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline Cap Ġ= ĠLine Cap . ROUND ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcolor A Ġ= ĠColors . RED ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcolor B Ġ= ĠColors . BLUE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( n Ġin Ġ 0 Ġuntil Ġ 3 6 0 Ġstep Ġ 3 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstroke ( RGBA . interpolate ( color A , Ġcolor B , Ġn . toDouble () Ġ/ Ġ 3 6 0 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbegin Path () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmove To ( 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline To ( n . degrees . cos ine Ġ* Ġradius , Ġn . degrees . s ine Ġ* Ġradius ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġhttps :// developer . mozilla . org / en - US / docs / Web / API / Canvas Rendering Context 2 D / stroke Style ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkeep Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtranslate ( 3 0 0 , Ġ 3 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlineWidth Ġ= Ġ 1 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġ 6 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġ 0 Ġuntil Ġ 6 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstroke Style Ġ= Ġcom . so y wiz . kor im . paint . Color Paint ( RGBA ( 0 , Ġ( 2 5 5 Ġ- Ġ 4 2 . 5 Ġ* Ġi ). toInt (), Ġ( 2 5 5 Ġ- Ġ 4 2 . 5 Ġ* Ġj ). toInt (), Ġ 2 5 5 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbegin Path (); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// arc ( 1 2 . 5 Ġ+ Ġj Ġ* Ġ 2 5 , Ġ 1 2 . 5 Ġ+ Ġi Ġ* Ġ 2 5 , Ġ 1 0 . 0 , Ġ 0 . 0 , ĠPI Ġ* Ġ 2 , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarc ( 1 2 . 5 Ġ+ Ġj Ġ* Ġ 2 5 , Ġ 1 2 . 5 Ġ+ Ġi Ġ* Ġ 2 5 , Ġ 1 0 . 0 , Ġ 0 . degrees , Ġ 3 6 0 . degrees ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstroke (); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// bmp . show Image And Wait () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Line Join 2 () Ġ= Ġsuspend Test Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbmp Ġ= ĠNative Image Or Bitmap 3 2 ( 5 0 0 , Ġ 5 0 0 , Ġnative Ġ= Ġfalse ). context 2 d Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbegin Path () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġline Cap Ġ= ĠLine Cap . S QUARE ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlineWidth Ġ= Ġ 3 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmove To ( 2 0 0 , Ġ 2 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġline To ( 3 0 0 , Ġ 1 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstroke () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// bmp . show Image And Wait () ĊĠĠĠ Ġ} Ċ } Ċ