svg-path-properties
Version:
Calculate the length for an SVG path, to use it with node or a Canvas element
254 lines (251 loc) • 13.5 kB
text/typescript
// Legendre-Gauss abscissae (xi values, defined at i=n as the roots of the nth order Legendre polynomial Pn(x))
export const tValues = [
[],
[],
[-0.5773502691896257, 0.5773502691896258],
[],
[-0.33998104358485626, 0.33998104358485626, -0.8611363115940526, 0.8611363115940526],
[],
[
0.6612093864662645, -0.6612093864662645, -0.2386191860831969, 0.2386191860831969,
-0.932469514203152, 0.932469514203152
],
[
0, 0.4058451513773972, -0.4058451513773972, -0.7415311855993945, 0.7415311855993945,
-0.9491079123427585, 0.9491079123427585
],
[
-0.1834346424956498, 0.1834346424956498, -0.525532409916329, 0.525532409916329,
-0.7966664774136267, 0.7966664774136267, -0.9602898564975363, 0.9602898564975363
],
[
0, -0.8360311073266358, 0.8360311073266358, -0.9681602395076261, 0.9681602395076261,
-0.3242534234038089, 0.3242534234038089, -0.6133714327005904, 0.6133714327005904
],
[
-0.14887433898163122, 0.14887433898163122, -0.4333953941292472, 0.4333953941292472,
-0.6794095682990244, 0.6794095682990244, -0.8650633666889845, 0.8650633666889845,
-0.9739065285171717, 0.9739065285171717
],
[
0, -0.26954315595234496, 0.26954315595234496, -0.5190961292068118, 0.5190961292068118,
-0.7301520055740494, 0.7301520055740494, -0.8870625997680953, 0.8870625997680953,
-0.978228658146057, 0.978228658146057
],
[
-0.1252334085114689, 0.1252334085114689, -0.3678314989981802, 0.3678314989981802,
-0.5873179542866175, 0.5873179542866175, -0.7699026741943047, 0.7699026741943047,
-0.9041172563704749, 0.9041172563704749, -0.9815606342467192, 0.9815606342467192
],
[
0, -0.2304583159551348, 0.2304583159551348, -0.44849275103644687, 0.44849275103644687,
-0.6423493394403402, 0.6423493394403402, -0.8015780907333099, 0.8015780907333099,
-0.9175983992229779, 0.9175983992229779, -0.9841830547185881, 0.9841830547185881
],
[
-0.10805494870734367, 0.10805494870734367, -0.31911236892788974, 0.31911236892788974,
-0.5152486363581541, 0.5152486363581541, -0.6872929048116855, 0.6872929048116855,
-0.827201315069765, 0.827201315069765, -0.9284348836635735, 0.9284348836635735,
-0.9862838086968123, 0.9862838086968123
],
[
0, -0.20119409399743451, 0.20119409399743451, -0.3941513470775634, 0.3941513470775634,
-0.5709721726085388, 0.5709721726085388, -0.7244177313601701, 0.7244177313601701,
-0.8482065834104272, 0.8482065834104272, -0.937273392400706, 0.937273392400706,
-0.9879925180204854, 0.9879925180204854
],
[
-0.09501250983763744, 0.09501250983763744, -0.2816035507792589, 0.2816035507792589,
-0.45801677765722737, 0.45801677765722737, -0.6178762444026438, 0.6178762444026438,
-0.755404408355003, 0.755404408355003, -0.8656312023878318, 0.8656312023878318,
-0.9445750230732326, 0.9445750230732326, -0.9894009349916499, 0.9894009349916499
],
[
0, -0.17848418149584785, 0.17848418149584785, -0.3512317634538763, 0.3512317634538763,
-0.5126905370864769, 0.5126905370864769, -0.6576711592166907, 0.6576711592166907,
-0.7815140038968014, 0.7815140038968014, -0.8802391537269859, 0.8802391537269859,
-0.9506755217687678, 0.9506755217687678, -0.9905754753144174, 0.9905754753144174
],
[
-0.0847750130417353, 0.0847750130417353, -0.2518862256915055, 0.2518862256915055,
-0.41175116146284263, 0.41175116146284263, -0.5597708310739475, 0.5597708310739475,
-0.6916870430603532, 0.6916870430603532, -0.8037049589725231, 0.8037049589725231,
-0.8926024664975557, 0.8926024664975557, -0.9558239495713977, 0.9558239495713977,
-0.9915651684209309, 0.9915651684209309
],
[
0, -0.16035864564022537, 0.16035864564022537, -0.31656409996362983, 0.31656409996362983,
-0.46457074137596094, 0.46457074137596094, -0.600545304661681, 0.600545304661681,
-0.7209661773352294, 0.7209661773352294, -0.8227146565371428, 0.8227146565371428,
-0.9031559036148179, 0.9031559036148179, -0.96020815213483, 0.96020815213483,
-0.9924068438435844, 0.9924068438435844
],
[
-0.07652652113349734, 0.07652652113349734, -0.22778585114164507, 0.22778585114164507,
-0.37370608871541955, 0.37370608871541955, -0.5108670019508271, 0.5108670019508271,
-0.636053680726515, 0.636053680726515, -0.7463319064601508, 0.7463319064601508,
-0.8391169718222188, 0.8391169718222188, -0.912234428251326, 0.912234428251326,
-0.9639719272779138, 0.9639719272779138, -0.9931285991850949, 0.9931285991850949
],
[
0, -0.1455618541608951, 0.1455618541608951, -0.2880213168024011, 0.2880213168024011,
-0.4243421202074388, 0.4243421202074388, -0.5516188358872198, 0.5516188358872198,
-0.6671388041974123, 0.6671388041974123, -0.7684399634756779, 0.7684399634756779,
-0.8533633645833173, 0.8533633645833173, -0.9200993341504008, 0.9200993341504008,
-0.9672268385663063, 0.9672268385663063, -0.9937521706203895, 0.9937521706203895
],
[
-0.06973927331972223, 0.06973927331972223, -0.20786042668822127, 0.20786042668822127,
-0.34193582089208424, 0.34193582089208424, -0.469355837986757, 0.469355837986757,
-0.5876404035069116, 0.5876404035069116, -0.6944872631866827, 0.6944872631866827,
-0.7878168059792081, 0.7878168059792081, -0.8658125777203002, 0.8658125777203002,
-0.926956772187174, 0.926956772187174, -0.9700604978354287, 0.9700604978354287,
-0.9942945854823992, 0.9942945854823992
],
[
0, -0.1332568242984661, 0.1332568242984661, -0.26413568097034495, 0.26413568097034495,
-0.3903010380302908, 0.3903010380302908, -0.5095014778460075, 0.5095014778460075,
-0.6196098757636461, 0.6196098757636461, -0.7186613631319502, 0.7186613631319502,
-0.8048884016188399, 0.8048884016188399, -0.8767523582704416, 0.8767523582704416,
-0.9329710868260161, 0.9329710868260161, -0.9725424712181152, 0.9725424712181152,
-0.9947693349975522, 0.9947693349975522
],
[
-0.06405689286260563, 0.06405689286260563, -0.1911188674736163, 0.1911188674736163,
-0.3150426796961634, 0.3150426796961634, -0.4337935076260451, 0.4337935076260451,
-0.5454214713888396, 0.5454214713888396, -0.6480936519369755, 0.6480936519369755,
-0.7401241915785544, 0.7401241915785544, -0.820001985973903, 0.820001985973903,
-0.8864155270044011, 0.8864155270044011, -0.9382745520027328, 0.9382745520027328,
-0.9747285559713095, 0.9747285559713095, -0.9951872199970213, 0.9951872199970213
]
]
// Legendre-Gauss weights (wi values, defined by a function linked to in the Bezier primer article)
export const cValues = [
[],
[],
[],
[],
[],
[
0.5688888888888889, 0.47862867049936647, 0.47862867049936647, 0.23692688505618908,
0.23692688505618908
],
[
0.3607615730481386, 0.3607615730481386, 0.46791393457269104, 0.46791393457269104,
0.17132449237917036, 0.17132449237917036
],
[
0.4179591836734694, 0.3818300505051189, 0.3818300505051189, 0.27970539148927664,
0.27970539148927664, 0.1294849661688697, 0.1294849661688697
],
[
0.362683783378362, 0.362683783378362, 0.31370664587788727, 0.31370664587788727,
0.22238103445337448, 0.22238103445337448, 0.10122853629037626, 0.10122853629037626
],
[
0.3302393550012598, 0.1806481606948574, 0.1806481606948574, 0.08127438836157441,
0.08127438836157441, 0.31234707704000286, 0.31234707704000286, 0.26061069640293544,
0.26061069640293544
],
[
0.29552422471475287, 0.29552422471475287, 0.26926671930999635, 0.26926671930999635,
0.21908636251598204, 0.21908636251598204, 0.1494513491505806, 0.1494513491505806,
0.06667134430868814, 0.06667134430868814
],
[
0.2729250867779006, 0.26280454451024665, 0.26280454451024665, 0.23319376459199048,
0.23319376459199048, 0.18629021092773426, 0.18629021092773426, 0.1255803694649046,
0.1255803694649046, 0.05566856711617366, 0.05566856711617366
],
[
0.24914704581340277, 0.24914704581340277, 0.2334925365383548, 0.2334925365383548,
0.20316742672306592, 0.20316742672306592, 0.16007832854334622, 0.16007832854334622,
0.10693932599531843, 0.10693932599531843, 0.04717533638651183, 0.04717533638651183
],
[
0.2325515532308739, 0.22628318026289723, 0.22628318026289723, 0.2078160475368885,
0.2078160475368885, 0.17814598076194574, 0.17814598076194574, 0.13887351021978725,
0.13887351021978725, 0.09212149983772845, 0.09212149983772845, 0.04048400476531588,
0.04048400476531588
],
[
0.2152638534631578, 0.2152638534631578, 0.2051984637212956, 0.2051984637212956,
0.18553839747793782, 0.18553839747793782, 0.15720316715819355, 0.15720316715819355,
0.12151857068790319, 0.12151857068790319, 0.08015808715976021, 0.08015808715976021,
0.03511946033175186, 0.03511946033175186
],
[
0.2025782419255613, 0.19843148532711158, 0.19843148532711158, 0.1861610000155622,
0.1861610000155622, 0.16626920581699392, 0.16626920581699392, 0.13957067792615432,
0.13957067792615432, 0.10715922046717194, 0.10715922046717194, 0.07036604748810812,
0.07036604748810812, 0.03075324199611727, 0.03075324199611727
],
[
0.1894506104550685, 0.1894506104550685, 0.18260341504492358, 0.18260341504492358,
0.16915651939500254, 0.16915651939500254, 0.14959598881657674, 0.14959598881657674,
0.12462897125553388, 0.12462897125553388, 0.09515851168249279, 0.09515851168249279,
0.062253523938647894, 0.062253523938647894, 0.027152459411754096, 0.027152459411754096
],
[
0.17944647035620653, 0.17656270536699264, 0.17656270536699264, 0.16800410215645004,
0.16800410215645004, 0.15404576107681028, 0.15404576107681028, 0.13513636846852548,
0.13513636846852548, 0.11188384719340397, 0.11188384719340397, 0.08503614831717918,
0.08503614831717918, 0.0554595293739872, 0.0554595293739872, 0.02414830286854793,
0.02414830286854793
],
[
0.1691423829631436, 0.1691423829631436, 0.16427648374583273, 0.16427648374583273,
0.15468467512626524, 0.15468467512626524, 0.14064291467065065, 0.14064291467065065,
0.12255520671147846, 0.12255520671147846, 0.10094204410628717, 0.10094204410628717,
0.07642573025488905, 0.07642573025488905, 0.0497145488949698, 0.0497145488949698,
0.02161601352648331, 0.02161601352648331
],
[
0.1610544498487837, 0.15896884339395434, 0.15896884339395434, 0.15276604206585967,
0.15276604206585967, 0.1426067021736066, 0.1426067021736066, 0.12875396253933621,
0.12875396253933621, 0.11156664554733399, 0.11156664554733399, 0.09149002162245,
0.09149002162245, 0.06904454273764123, 0.06904454273764123, 0.0448142267656996,
0.0448142267656996, 0.019461788229726478, 0.019461788229726478
],
[
0.15275338713072584, 0.15275338713072584, 0.14917298647260374, 0.14917298647260374,
0.14209610931838204, 0.14209610931838204, 0.13168863844917664, 0.13168863844917664,
0.11819453196151841, 0.11819453196151841, 0.10193011981724044, 0.10193011981724044,
0.08327674157670475, 0.08327674157670475, 0.06267204833410907, 0.06267204833410907,
0.04060142980038694, 0.04060142980038694, 0.017614007139152118, 0.017614007139152118
],
[
0.14608113364969041, 0.14452440398997005, 0.14452440398997005, 0.13988739479107315,
0.13988739479107315, 0.13226893863333747, 0.13226893863333747, 0.12183141605372853,
0.12183141605372853, 0.10879729916714838, 0.10879729916714838, 0.09344442345603386,
0.09344442345603386, 0.0761001136283793, 0.0761001136283793, 0.057134425426857205,
0.057134425426857205, 0.036953789770852494, 0.036953789770852494, 0.016017228257774335,
0.016017228257774335
],
[
0.13925187285563198, 0.13925187285563198, 0.13654149834601517, 0.13654149834601517,
0.13117350478706238, 0.13117350478706238, 0.12325237681051242, 0.12325237681051242,
0.11293229608053922, 0.11293229608053922, 0.10041414444288096, 0.10041414444288096,
0.08594160621706773, 0.08594160621706773, 0.06979646842452049, 0.06979646842452049,
0.052293335152683286, 0.052293335152683286, 0.03377490158481415, 0.03377490158481415,
0.0146279952982722, 0.0146279952982722
],
[
0.13365457218610619, 0.1324620394046966, 0.1324620394046966, 0.12890572218808216,
0.12890572218808216, 0.12304908430672953, 0.12304908430672953, 0.11499664022241136,
0.11499664022241136, 0.10489209146454141, 0.10489209146454141, 0.09291576606003515,
0.09291576606003515, 0.07928141177671895, 0.07928141177671895, 0.06423242140852585,
0.06423242140852585, 0.04803767173108467, 0.04803767173108467, 0.030988005856979445,
0.030988005856979445, 0.013411859487141771, 0.013411859487141771
],
[
0.12793819534675216, 0.12793819534675216, 0.1258374563468283, 0.1258374563468283,
0.12167047292780339, 0.12167047292780339, 0.1155056680537256, 0.1155056680537256,
0.10744427011596563, 0.10744427011596563, 0.09761865210411388, 0.09761865210411388,
0.08619016153195327, 0.08619016153195327, 0.0733464814110803, 0.0733464814110803,
0.05929858491543678, 0.05929858491543678, 0.04427743881741981, 0.04427743881741981,
0.028531388628933663, 0.028531388628933663, 0.0123412297999872, 0.0123412297999872
]
]
// LUT for binomial coefficient arrays per curve order 'n'
export const binomialCoefficients = [[1], [1, 1], [1, 2, 1], [1, 3, 3, 1]]