package Ġjump aku . cur ves . f sc . blend Ċ Ċ import Ġjump aku . commons . control . None Ċ import Ġjump aku . commons . control . Option Ċ import Ġjump aku . commons . control . Some Ċ import Ġjump aku . cur ves . core . curve . Interval Ċ import Ġjump aku . cur ves . core . curve . Param Point Ċ import Ġjump aku . cur ves . core . curve . bsp line . BS pline Ċ import Ġjump aku . cur ves . core . curve . bsp line . K not Vector Ċ import Ġjump aku . cur ves . core . fuzzy . Grade Ċ import Ġjump aku . cur ves . core . geom . Point Ċ import Ġjump aku . cur ves . core . geom . lerp Ċ import Ġjump aku . cur ves . core . geom . middle Ċ import Ġjump aku . cur ves . f sc . generate . F uzz ifier Ċ import Ġjump aku . cur ves . f sc . generate . Generator Ċ import Ġjump aku . cur ves . f sc . generate . extend Back Ċ import Ġjump aku . cur ves . f sc . generate . extend Front Ċ import Ġjump aku . cur ves . f sc . generate . fit . Weighted Param Point Ċ import Ġjava . util .* Ċ import Ġkotlin . math . abs Ċ import Ġkotlin . math . ceil ĊĊ Ċ sealed Ġclass ĠBlend Result Ġ{ ĊĊĠĠĠ Ġabstract Ġval Ġoverlap State : ĠOver lap State ĊĊĠĠĠ Ġclass ĠNot B len ded ( override Ġval Ġoverlap State : ĠOver lap State . Not Detected ) Ġ: ĠBlend Result () ĊĊĠĠĠ Ġclass ĠB len ded ( override Ġval Ġoverlap State : ĠOver lap State . Detected , Ġval Ġb len ded : ĠB Spline ) Ġ: ĠBlend Result () Ċ } Ċ Ċ /** Ċ Ġ* ĠBl ends Ġtwo ĠF SC s Ġinto Ġa Ġsingle ĠF SC Ġif Ġthey Ġare Ġoverlapping . Ċ Ġ* ĠThe Ġconcept Ġof Ġthis Ġprocess Ġis Ġproposed Ġin Ġthe Ġfollowing Ġpaper : Ċ Ġ* ĠS AT O , ĠY , ĠY AS UF UK U , ĠN , ĠS AG A , ĠS . ĠSequential Ġfuzzy Ġspline Ġcurve Ġgenerator Ġfor Ġdrawing Ġinterface Ġby Ġsketch . ĠThe ĠTransactions Ġof Ġthe ĠInstitute Ġof ĠElectron ics , ĠInformation Ġand ĠCommunication ĠEngine ers Ġ 2 0 0 3 ; 8 6 ( 2 ): 2 4 2 âĢĵ 2 5 1 . ĠURL : Ġhttps :// ci . nii . ac . jp / na id / 1 1 0 0 0 3 1 7 0 8 8 3 / en / Ċ Ġ*/ Ċ class ĠBl ender ( ĊĠĠĠ Ġval Ġdegree : ĠInt Ġ= Ġ 3 , ĊĠĠĠ Ġval Ġk not Span : ĠDouble Ġ= Ġ 0 . 1 , ĊĠĠĠ Ġval Ġextend Degree : ĠInt Ġ= Ġ 2 , ĊĠĠĠ Ġval Ġextend Inner Span : ĠDouble Ġ= Ġk not Span Ġ* Ġ 2 , ĊĠĠĠ Ġval Ġextend Outer Span : ĠDouble Ġ= Ġk not Span Ġ* Ġ 2 , ĊĠĠĠ Ġval Ġsampling Span : ĠDouble Ġ= Ġ 0 . 0 1 , ĊĠĠĠ Ġval Ġoverlap Threshold : ĠGr ade Ġ= ĠGr ade . FALSE , ĊĠĠĠ Ġval Ġblend Rate : ĠDouble Ġ= Ġ 0 . 5 , ĊĠĠĠ Ġval Ġband Width : ĠDouble Ġ= Ġ 0 . 0 5 , ĊĠĠĠ Ġval Ġf uzz ifier : ĠF uzz ifier Ġ= ĠF uzz ifier . Linear ( ĊĠĠĠĠĠĠĠ Ġvelocity Coefficient Ġ= Ġ 0 . 8 6 , ĊĠĠĠĠĠĠĠ Ġacceleration Coefficient Ġ= Ġ 0 . 7 7 ĊĠĠĠ Ġ) Ċ ) Ġ{ ĊĊĠĠĠ Ġdata Ġclass ĠSmall Interval ( val Ġbegin : ĠDouble , Ġval Ġend : ĠDouble ) Ġ: ĠClosed Range < Double > Ġby ĠInterval ( begin , Ġend ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġrepresentative : ĠDouble Ġ= Ġbegin . middle ( end ) ĊĊĠĠĠĠĠĠĠ Ġval Ġspan : ĠDouble Ġ= Ġend Ġ- Ġbegin ĊĊĠĠĠĠĠĠĠ Ġfun Ġl erp ( t : ĠDouble , Ġthat : ĠSmall Interval ): ĠSmall Interval Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSmall Interval ( begin . lerp ( t , Ġthat . begin ), Ġend . lerp ( t , Ġthat . end )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠSample d Curve ( val Ġcurve : ĠB Spline , Ġval Ġspans : ĠList < Small Interval >) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġrepresentative Params : ĠList < Double > Ġ= Ġspans . map Ġ{ Ġit . represent ative Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġrepresentative Points : ĠList < Point > Ġ= Ġcurve ( represent ative Params ) ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġsample ( curve : ĠB Spline , Ġsampling Span : ĠDouble ): ĠSample d Curve Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSample d Curve ( curve , Ġcurve . domain . sample ( sampling Span ). zip With Next (:: Small Interval )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( degree Ġ>= Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġrequire ( k not Span Ġ> Ġ 0 . 0 ) ĊĠĠĠĠĠĠĠ Ġrequire ( extend Degree Ġ>= Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġrequire ( extend Inner Span Ġ> Ġ 0 . 0 ) ĊĠĠĠĠĠĠĠ Ġrequire ( extend Outer Span Ġ> Ġ 0 . 0 ) ĊĠĠĠĠĠĠĠ Ġrequire ( sampling Span Ġ> Ġ 0 . 0 ) ĊĠĠĠĠĠĠĠ Ġrequire ( blend Rate Ġin Ġ 0 . 0 .. 1 . 0 ) ĊĠĠĠĠĠĠĠ Ġrequire ( band Width Ġ> Ġ 0 . 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġdetector : ĠOver lap Detector Ġ= ĠOver lap Detector ( overlap Threshold , Ġblend Rate ) ĊĠĠĠ Ġval Ġparame tri zer : ĠOver lap Parame tri zer Ġ= ĠOver lap Parame tri zer ( sampling Span , Ġblend Rate ) ĊĊĠĠĠ Ġfun Ġtry Blend ( existing : ĠB Spline , Ġoverlapping : ĠB Spline ): ĠBlend Result Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġexisting Sample d Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSample d Curve ( existing , Ġexisting . domain . sample ( sampling Span ). zip With Next (:: Small Interval )) ĊĠĠĠĠĠĠĠ Ġval Ġoverlapping Sample d Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSample d Curve ( over lapping , Ġoverlapping . domain . sample ( sampling Span ). zip With Next (:: Small Interval )) ĊĠĠĠĠĠĠĠ Ġval Ġoverlap State Ġ= Ġdetector . detect ( existing Sample d , Ġoverlapping Sample d ) ĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġwhen Ġ( overlap State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠOver lap State . Not Detected Ġ-> Ġreturn ĠBlend Result . Not B len ded ( overlap State ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠOver lap State . Detected Ġ-> Ġparame tri zer . parametrize ( existing Sample d , Ġoverlapping Sample d , Ġoverlap State ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠBlend Result . B len ded ( overlap State , Ġgenerate ( data )) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġgenerate ( blend Data : ĠList < Weighted Param Point >): ĠB Spline Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdomain Ġ= Ġblend Data . run Ġ{ ĠInterval ( first (). param , Ġlast (). param ) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġextend Front ( blend Data , Ġextend Inner Span , Ġextend Outer Span , Ġextend Degree , Ġsampling Span ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġblend Data , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġextend Back ( blend Data , Ġextend Inner Span , Ġextend Outer Span , Ġextend Degree , Ġsampling Span ) ĊĠĠĠĠĠĠĠ Ġ). flatten (). let Ġ{ Ġweight By K de ( it , Ġband Width ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġextended Domain Ġ= ĠInterval ( data . first (). param , Ġdata . last (). param ) ĊĠĠĠĠĠĠĠ Ġval Ġk not Vector Ġ= ĠK not Vector . clamp ed ( extended Domain , Ġdegree , Ġk not Span ) ĊĠĠĠĠĠĠĠ Ġreturn ĠGenerator . generate ( data , Ġk not Vector , Ġf uzz ifier ). restrict ( domain ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġfun Ġweight By K de ( param Points : ĠList < Weighted Param Point >, Ġband Width : ĠDouble ): ĠList < Weighted Param Point > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġn Ġ= Ġparam Points . size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġkernel ( t : ĠDouble ): ĠDouble Ġ= Ġif Ġ( abs ( t ) Ġ> Ġ 1 ) Ġ 0 . 0 Ġelse Ġ 1 5 Ġ* Ġ( 1 Ġ- Ġt Ġ* Ġt ) Ġ* Ġ( 1 Ġ- Ġt Ġ* Ġt ) Ġ/ Ġ 1 6 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġweights Ġ= Ġmutable ListOf < Double >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ(( i , Ġp ) Ġin Ġparam Points . with Index ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġdensity Ġ= Ġkernel ( 0 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġj Ġ= Ġi Ġ- Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( j Ġ>= Ġ 0 Ġ&& Ġabs ( param Points [ j ]. param Ġ- Ġp . param ) Ġ/ Ġband Width Ġ< Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdensity Ġ+= Ġkernel (( param Points [ j ]. param Ġ- Ġp . param ) Ġ/ Ġband Width ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ-- j ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġk Ġ= Ġi Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( k Ġ< Ġparam Points . size Ġ&& Ġabs ( param Points [ k ]. param Ġ- Ġp . param ) Ġ/ Ġband Width Ġ< Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdensity Ġ+= Ġkernel (( param Points [ k ]. param Ġ- Ġp . param ) Ġ/ Ġband Width ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ++ k ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġweights Ġ+= Ġn Ġ* Ġband Width Ġ/ Ġdensity ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġparam Points . zip ( weights ) Ġ{ Ġwp , Ġw Ġ-> Ġwp . copy ( weight Ġ= Ġwp . weight Ġ* Ġw ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġderive ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgenerator : ĠGenerator , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsampling Span : ĠDouble Ġ= Ġ 0 . 0 1 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverlap Threshold : ĠGr ade Ġ= ĠGr ade . FALSE , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġblend Rate : ĠDouble Ġ= Ġ 0 . 5 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġband Width : ĠDouble Ġ= Ġ 0 . 0 5 ĊĠĠĠĠĠĠĠ Ġ): ĠBl ender Ġ= ĠBl ender ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdegree Ġ= Ġgenerator . degree , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġk not Span Ġ= Ġgenerator . k not Span , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġextend Degree Ġ= Ġgenerator . extend Degree , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġextend Inner Span Ġ= Ġgenerator . extend Inner Span , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġextend Outer Span Ġ= Ġgenerator . extend Outer Span , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsampling Span Ġ= Ġsampling Span , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverlap Threshold Ġ= Ġoverlap Threshold , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġblend Rate Ġ= Ġblend Rate , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġband Width Ġ= Ġband Width , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġf uzz ifier Ġ= Ġgenerator . fuzz ifier ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } ĊĊ