package Ġdev . lun ar coffee . ris ako . bot . ext s . commands . math . plot Ċ Ċ import Ġjava . awt . Color Ċ import Ġjava . awt . Graphics 2 D Ċ import Ġjava . awt . image . Buffered Image Ċ import Ġjava . io . File Ċ import Ġjavax . image io . Image IO Ċ import Ġkotlin . math . abs Ċ import Ġkotlin . math . round ToInt Ċ import Ġjava . awt . Rendering Hints Ġas ĠR H Ċ Ċ class ĠFunction Plot ter ( val Ġfunction Strings : ĠList < String >) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġimage Name Ġ= Ġ" src / main / resources / plot /${ function Strings . hashCode ()}. png " ĊĊĠĠĠ Ġfun Ġplot (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġsave Image () ĊĠĠĠĠĠĠĠ Ġreturn Ġimage Name ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsave Image () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠFile ( image Name ) ĊĠĠĠĠĠĠĠ Ġval Ġimage Ġ= ĠBufferedImage ( IMAGE _ SIZE , ĠIMAGE _ SIZE , ĠBufferedImage . TYPE _ INT _ ARGB ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Graphics (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠMake Ġthe Ġtext Ġlook Ġnice . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Rendering Hint ( RH . KEY _ ANTI ALIAS ING , ĠR H . VALUE _ ANTI ALIAS _ ON ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Rendering Hint ( RH . KEY _ ST RO KE _ CONTROL , ĠR H . VALUE _ ST RO KE _ PURE ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFill Ġbackground Ġwith Ġwhite . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfill Rect ( 0 , Ġ 0 , ĠIMAGE _ SIZE , ĠIMAGE _ SIZE ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Functions () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Axes () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠImage IO . write ( image , Ġ" png ", Ġfile ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠGraphics 2 D . draw Axes () Ġ{ ĊĠĠĠĠĠĠĠ Ġpaint Ġ= ĠColor . BLACK ĊĊĠĠĠĠĠĠĠ Ġ// ĠDraw Ġthe Ġx Ġand Ġy Ġaxes . ĊĠĠĠĠĠĠĠ Ġdraw Line ( IMAGE _ SIZE Ġ- ĠPRECISION Ġ* ĠINTER VAL Ġ* Ġ 2 , ĠOR IGIN , ĠPRECISION Ġ* ĠINTER VAL Ġ* Ġ 2 , ĠOR IGIN ) ĊĠĠĠĠĠĠĠ Ġdraw Line ( ORIGIN , ĠIMAGE _ SIZE Ġ- ĠPRECISION Ġ* ĠINTER VAL Ġ* Ġ 2 , ĠOR IGIN , ĠPRECISION Ġ* ĠINTER VAL Ġ* Ġ 2 ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠDraw Ġticks Ġand Ġlabels Ġto Ġmark Ġintervals . ĊĠĠĠĠĠĠĠ Ġfor Ġ( n Ġin Ġ 1 Ġuntil Ġ 2 Ġ* ĠPRECISION Ġ/ ĠMULTIPLIER ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAvoid Ġcreating Ġan Ġextra Ġcross Ġor Ġmaking Ġlabels Ġthat Ġcover Ġthe Ġcros ses Ġat Ġthe Ġorigin . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( n Ġ== ĠPRECISION Ġ/ ĠMULTIPLIER ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDraw Ġticks . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Line ( n Ġ* ĠMULTIPLIER , ĠOR IGIN Ġ- Ġ 8 , Ġn Ġ* ĠMULTIPLIER , ĠOR IGIN Ġ+ Ġ 8 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Line ( ORIGIN Ġ- Ġ 8 , Ġn Ġ* ĠMULTIPLIER , ĠOR IGIN Ġ+ Ġ 8 , Ġn Ġ* ĠMULTIPLIER ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGet Ġthe Ġcorrect Ġoffset Ġfor Ġthe Ġdifferent Ġwidths Ġof Ġthe Ġnumbers Ġon Ġthe Ġinterval ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġlabels Ġto Ġcorrectly Ġcenter Ġthem . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx Label Ġ= Ġn Ġ* ĠMULTIPLIER Ġ- Ġwhen Ġ( n Ġ- ĠPRECISION Ġ/ ĠMULTIPLIER ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġin Ġ 1 .. 9 Ġ-> Ġ 4 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġin Ġ 1 0 .. 9 9 , Ġin Ġ- 9 .. - 1 Ġ-> Ġ 8 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ 1 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDraw Ġinterval Ġlabels . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw String (( n Ġ- ĠPRECISION Ġ/ ĠMULTIPLIER ). toString (), Ġx Label , ĠOR IGIN Ġ- Ġ 1 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw String (( PREC ISION Ġ/ ĠMULTIPLIER Ġ- Ġn ). toString (), ĠOR IGIN Ġ+ Ġ 1 6 , Ġn Ġ* ĠMULTIPLIER Ġ+ Ġ 4 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠGraphics 2 D . draw Functions () Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ(( index , Ġstring ) Ġin Ġfunction Strings . with Index ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġevaluator Ġ= ĠFunction Evaluator ( string ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( x Ġin Ġ- PREC ISION Ġuntil ĠPRECISION ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġevaluator . evaluate ( x . toDouble () Ġ/ ĠMULTIPLIER ) !! Ġ* ĠINTER VAL Ġ* ĠMULTIPLIER ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnext Y Ġ= Ġevaluator . evaluate (( x Ġ+ Ġ 1 . 0 ) Ġ/ ĠMULTIPLIER ) !! Ġ* ĠINTER VAL Ġ* ĠMULTIPLIER ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTry Ġto Ġignore Ġholes / asy mpt otes / g aps . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( y . isNaN () Ġ|| Ġnext Y . isNaN () Ġ|| Ġabs ( next Y Ġ- Ġy ) Ġ> Ġ 2 _ 5 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpaint Ġ= ĠCOL ORS [ index ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Line ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOR IGIN Ġ+ Ġx Ġ* ĠINTER VAL , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( IMAGE _ SIZE Ġ- ĠOR IGIN Ġ- Ġy ). round ToInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOR IGIN Ġ+ Ġ( x Ġ+ Ġ 1 ) Ġ* ĠINTER VAL , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( IMAGE _ SIZE Ġ- ĠOR IGIN Ġ- Ġnext Y ). round ToInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠIMAGE _ SIZE Ġ= Ġ 8 0 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠOR IGIN Ġ= ĠIMAGE _ SIZE Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠPRECISION Ġ= Ġ 4 0 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠINTER VAL Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠMULTIPLIER Ġ= Ġ 4 0 ĊĊĠĠĠĠĠĠĠ Ġ// ĠColors Ġto Ġuse Ġwhen Ġplotting Ġfunctions . ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠCOL ORS Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠColor . RED , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠColor . BLUE , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠColor . decode ("# 1 9 AA 0 6 "), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠColor . decode ("# EF 9 F 0 0 "), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠColor . MAG ENT A ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ