package Ġcn . an con o . math . algebra . linear . space Ċ Ċ import Ġcn . an con o . math . algebra . abs . calculator . Equal Predicate Ċ import Ġcn . an con o . math . algebra . abs . calculator . Field Calculator Ċ import Ġcn . an con o . math . algebra . linear . Full Vector Basis Ċ import Ġcn . an con o . math . algebra . linear . IF ull Vector Basis Ċ import Ġcn . an con o . math . algebra . linear . Vector Ċ import Ġcn . an con o . math . algebra . linear . Vector Basis Ċ import Ġcn . an con o . math . number Models . api . plus Ċ import Ġcn . an con o . math . property . Composable Ċ import Ġjava . util . function . Function Ċ Ċ /** Ċ Ġ* ĠDescri bes Ġan Ġaffine Ġcoordinate Ġsystem Ġin Ġn - dimension ĠE u cl id Ġspace . Ċ Ġ*/ Ċ interface ĠI Affine Coordinate System < T > Ġ: ĠI Linear Space < T > Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġ[ standard Dimension ] Ġis Ġequal Ġto Ġ[ dimension ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġval Ġstandard Dimension : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġdimension ĊĠĠĠ Ġoverride Ġval Ġvector Basis : ĠI Full Vector Basis < T > ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAny Ġvector Ġwhose Ġsize Ġis Ġequal Ġto Ġ[ dimension ] Ġis Ġcontained . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġcontains ( v : ĠVector < T >): ĠBoolean Ġ= Ġv . size Ġ== Ġdimension Ċ Ċ } Ċ Ċ abstract Ġclass ĠAff ine Coordinate System < T >( mc : ĠField Calculator < T >, Ġfinal Ġoverride Ġval Ġdimension : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġorigin Vector : ĠVector < T >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvector Base : ĠFull Vector Basis < T >) ĊĠĠĠ Ġ: ĠAff ine Space < T >( mc , Ġorigin Vector , Ġvector Base ), ĠI Affine Coordinate System < T >, ĠComp osable < Affine Coordinate System < T >> Ġ{ ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( dimension Ġ== Ġorigin Vector . size ) ĊĠĠĠĠĠĠĠ Ġrequire ( dimension Ġ== Ġvector Base . rank ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" Can Be Primary Constructor Property ") ĊĠĠĠ Ġoverride Ġval Ġvector Basis : ĠFull Vector Basis < T > Ġ= Ġvector Base ĊĊĊĠĠĠ Ġoverride Ġval Ġstandard Dimension : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġdimension ĊĊĊĠĠĠ Ġoverride Ġfun Ġcontains ( v : ĠVector < T >): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper < IA ff ine Coordinate System >. contains ( v ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠEqual Ġto Ġ` before . and Then ( this )`. ĊĠĠĠĠ Ġ* Ġ@ see Ġand Then ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġcompose ( before : ĠAff ine Coordinate System < T >): ĠAff ine Coordinate System < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġbefore . and Then ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAssume Ġ[ after ] Ġis Ġa Ġlocal Ġcoordinate Ġsystem Ġbased Ġon Ġ` this `, Ġreturns Ġa Ġnew Ġcoordinate Ġsystem ĊĠĠĠĠ Ġ* Ġrepresenting Ġ[ after ] Ġbased Ġon Ġthe Ġstandard Ġcoordinate Ġsystem . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġand Then ( after : ĠAff ine Coordinate System < T >): ĠAff ine Coordinate System < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġn Origin Vector Ġ= Ġorigin Vector Ġ+ Ġto Standard C ord ( after . origin Vector ) ĊĠĠĠĠĠĠĠ Ġval Ġn Vector Base Ġ= Ġvector Basis . and Then Full ( after . vector Basis ) ĊĠĠĠĠĠĠĠ Ġreturn ĠDA ff ine Coordinate System ( calculator , Ġdimension , Ġn Origin Vector , Ġn Vector Base ) ĊĠĠĠ Ġ} Ċ Ċ // ĠĠĠ Ġ/** Ċ // ĠĠĠĠ Ġ* ĠReturns Ġthe Ġlinear Ġtransformation Ġthat Ġtransforms Ġthis Ġto Ġanother Ġaffine Ġcoordinate Ġsystem , Ċ // ĠĠĠĠ Ġ* Ġit Ġis Ġrequired Ġthat Ġboth Ġcoordinate Ġsystems Ġhave Ġthe Ġsame Ġdimension . Ċ // ĠĠĠĠ Ġ*/ Ċ // ĠĠĠ Ġfun Ġtransformation To ( affine Coordinate System : ĠAff ine Coordinate System < T >): ĠAff ine Trans < T > Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġrequire ( dimension Ġ== Ġaffine Coordinate System . dimension ) Ċ // ĠĠĠĠĠĠĠ Ġval Ġtranslation Ġ= Ġaffine Coordinate System . origin Vector Ġ- Ġorigin Vector Ċ // ĠĠĠĠĠĠĠ Ġval Ġtrans Matrix Ġ= Ġvector Base . trans Matrix ( affine Coordinate System . vector Base ) Ċ // ĠĠĠĠĠĠĠ Ġreturn ĠD Linear Trans ( mc , Ġdimension , Ġtrans Matrix , Ġtranslation ) Ċ // ĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠCreates Ġa Ġnew Ġlinear Ġspace Ġfrom Ġthe Ġgiven Ġorigin Ġvector Ġand Ġvector Ġbase . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġ< T > Ġvalue Of ( origin Vector : ĠVector < T >, Ġvector Base : ĠFull Vector Basis < T >): ĠAff ine Coordinate System < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( origin Vector . size Ġ== Ġvector Base . vector Length ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdimension Ġ= Ġvector Base . vector Length ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmc Ġ= Ġvector Base . calculator ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠDA ff ine Coordinate System ( mc , Ġdimension , Ġorigin Vector , Ġvector Base ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠCreates Ġa Ġnew Ġlinear Ġspace Ġfrom Ġthe Ġgiven Ġorigin Ġvector Ġand Ġbase Ġvectors . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġ< T > Ġvalue Of ( origin Vector : ĠVector < T >, Ġvar arg Ġbase Vectors : ĠVector < T >): ĠAff ine Coordinate System < T > Ġ= Ġvalue Of ( origin Vector , ĠVector Basis . create Full Base (* base Vectors )) ĊĠĠĠ Ġ} Ċ } Ċ Ċ // /** Ċ // Ġ* ĠReturns Ġthe Ġlinear Ġtransformation Ġthat Ġtransforms Ġthe Ġstandard Ġcoordinate Ġsystem Ġto Ċ // Ġ* Ġthis Ġaffine Ġcoordinate Ġsystem . Ċ // Ġ*/ Ċ // fun Ġ< T > ĠI Affine Coordinate System < T >. to Linear Trans ( math Calculator : ĠMath Calculator < T >): ĠLinear Trans < T > Ġ{ Ċ // ĠĠĠ Ġreturn ĠD Linear Trans ( math Calculator , Ġdimension , Ġvector Base . get Vectors As Matrix (), Ġorigin Vector ) Ċ //} Ċ Ċ // /** Ċ // Ġ* ĠReturns Ġthe Ġlinear Ġtransformation Ġthat Ġtransforms Ġthe Ġstandard Ġcoordinate Ġsystem Ġto Ċ // Ġ* Ġthis Ġaffine Ġcoordinate Ġsystem . Ċ // Ġ*/ Ċ // fun Ġ< T > ĠAff ine Coordinate System < T >. to Linear Trans (): ĠLinear Trans < T > Ġ{ Ċ // ĠĠĠ Ġreturn ĠD Linear Trans ( math Calculator , Ġdimension , Ġvector Base . get Vectors As Matrix (), Ġorigin Vector ) Ċ //} Ċ Ċ internal Ġclass ĠDA ff ine Coordinate System < T >( mc : ĠField Calculator < T >, Ġdimension : ĠInt , Ġorigin Vector : ĠVector < T >, Ġvector Base : ĠFull Vector Basis < T >) Ġ: ĊĠĠĠĠĠĠĠ ĠAff ine Coordinate System < T >( mc , Ġdimension , Ġorigin Vector , Ġvector Base ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġ< N > Ġmap To ( new Calculator : ĠEqual Predicate < N >, Ġmapper : ĠFunction < T , ĠN >): ĠAff ine Space < N > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠDA ff ine Coordinate System ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Calculator Ġas ĠField Calculator , Ġdimension , Ġorigin Vector . map To ( new Calculator , Ġmapper ), Ġvector Basis . map To ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Calculator , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmapper ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ /** Ċ Ġ* ĠDescri bes Ġthe Ġstandard Ġcoordinate Ġsystem . Ċ Ġ*/ Ċ class ĠStandard Coordinate System < T >( mc : ĠField Calculator < T >, Ġdimension : ĠInt ) Ġ: ĠAff ine Coordinate System < T >( mc , Ġdimension , ĊĠĠĠĠĠĠĠ ĠVector . zero ( dimension , Ġmc ), ĠVector Basis . standard ( dimension , Ġmc )) Ġ{ ĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( dimension Ġ> Ġ 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġ< N > Ġmap To ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Calculator : ĠEqual Predicate < N >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmapper : ĠFunction < T , ĠN > ĊĠĠĠ Ġ): ĠStandard Coordinate System < N > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠStandard Coordinate System ( new Calculator Ġas ĠField Calculator , Ġdimension ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġand Then ( after : ĠAff ine Coordinate System < T >): ĠAff ine Coordinate System < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( after . dimension Ġ== Ġthis . dimension ) ĊĠĠĠĠĠĠĠ Ġreturn Ġafter ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcompose ( before : ĠAff ine Coordinate System < T >): ĠAff ine Coordinate System < T > Ġ= Ġbefore ĊĊĠĠĠ Ġoverride Ġfun Ġfrom Standard C ord ( v : ĠVector < T >): ĠVector < T > Ġ= Ġv ĊĊĠĠĠ Ġoverride Ġfun Ġto Standard C ord ( v : ĠVector < T >): ĠVector < T > Ġ= Ġv Ċ Ċ // ĠĠĠ Ġoverride Ġfun Ġtransformation To ( affine Coordinate System : ĠI Affine Coordinate System < T >): ĠLinear Trans < T > Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġreturn Ġaffine Coordinate System . to Linear Trans ( math Calculator ) Ċ // ĠĠĠ Ġ} Ċ Ċ }