Re: [Boston.pm] Drawing diagrams with circular arcs

Bill Ricker via Boston-pm <[email protected]> Fri, 28 Feb 2025 21:22:20 -0500
Newsgroups gmane.comp.lang.perl.perl-mongers.boston
Message-ID <CAAbKA3V5Ou-194rv333y-Qh8+CTa19OLS5fAttFr+oKBoW4=tg@mail.gmail.com>
SGkgU3RldmUhCgpJIGFtIHdvcmtpbmcgb24gYSBwZXQgcHJvamVjdCB3aGVyZSBJIHdhbnQgdG8g
ZHJhdyBkaWFncmFtcyBjb25zaXN0aW5nIG9mCj4gY29ubmVjdGVkIGNpcmN1bGFyIGFyY3MuCj4K
CkkgcHJlc3VtZSB5b3UgbWVhbiBzZWN0b3Itb2YtY2lyY2xlIGFyY3MsIHF1aXRlIHBvc3NpYmx5
IHNlbWktY2lyY2xlIGFyY3MsCmFzIG9wcG9zZWQgdG8gZnVsbCBjaXJjbGVzPwpBcmUgeW91IG9w
cG9zZWQgdG8gZWxsaXBzZXMsIHNwbGluZXMsIGFuZCByYWlscm9hZCAic3BpcmFsIiB0aGF0IGlz
IGRvdWJseQpkaWZmZXJlbnRpYWJsZSB3aGVyZSBpdCBidXR0LWpvaW50cyB0byBhIHN0cmFpZ2h0
PwoKICBJIHRoaW5rIGl0IGNvdWxkIGJlIGRvbmUgaW4gVmlzaW8sCj4gYnV0IEkgbm8gbG9uZ2Vy
IGhhdmUgdGhhdC4KPgoKUG9zc2libHkgbXkgZmF2b3JpdGUgTVMgT2ZmaWNlIGNvbXBvbmVudC4K
VGhlIHN0YW5kYXJkIGFuc3dlciB0byAibGlrZSBWaXNpbyBidXQgRkxPU1MiIGlzIExpYnJlT2Zm
aWNlIERyYXcuCk90aGVyIGFsdGVybmF0aXZlcyBzZWUgaHR0cHM6Ly9hbHRlcm5hdGl2ZXRvLm5l
dC9zb2Z0d2FyZS9taWNyb3NvZnQtdmlzaW8vCgpNeSBwcmVmZXJyZWQgcHJvZ3JhbW1pbmcgbGFu
Z3VhZ2UgaXMgUGVybC4KPgpCdXQgSSBoYXZlIG5vdCBhY3RpdmVseSB1c2VkIGl0IGZvciBtYW55
IHllYXJzLgo+ClRzay4gR2V0IGJhY2sgYXQgaXQgOi1ECgpNeSBjdXJyZW50IFBDIHJ1bnMgV2lu
ZG93cyAxMCwgYnV0IEkgY291bGQgYWxzbyB1c2UgV2luZG93cyAxMSBmb3IKPiBkZXZlbG9wbWVu
dC4KCgpXZWxsIEknZCBzYXkgaXQncyBoYWxmLXBhc3QgdGltZSB5b3Ugc2V0IHVwIGZvciBhIExp
bnV4IGR1YWwtYm9vdC4KV2luZG93cyAxMSBsb29rcyB0byBiZSBhIGxpdHRsZSB0b28gc3RyYW5n
ZS4KClRoaXMgaXMgcGVybCA1LCB2ZXJzaW9uIDI4LCBzdWJ2ZXJzaW9uIDIgKHY1LjI4LjIpIGJ1
aWx0IGZvcgo+CgpTaW5jZSB3ZSdyZSB1cCB0byBQZXJsIDUuMDQwIHdpdGggNS4wNDEgaW4gZmlu
YWwgZGV2ZWxvcG1lbnQsIHllYWggeW91Cm1pZ2h0IGp1c3Qgd2FudCB0byB1cGRhdGUgUGVybC4K
R29vZCBuZXdzIElJUkMgaXMgdGhleSd2ZSByZXN1bWVkIHByZWJ1aWx0IGJpbmFyaWVzLgoKSSB0
aGluayB0aGUgR0QgbGlicmFyeSBjb3VsZCBkbyB0aGlzLCBhbmQgdGhlcmUgYXJlIHNvbWUgUGVy
bCBBUElzIHRvIGl0Lgo+CgpZZXMsIEdEIDxodHRwczovL21ldGFjcGFuLm9yZy9wb2QvR0QjRHJh
d2luZy1Db21tYW5kcz4gYW5kIEdEOjpTaW1wbGUgb24KQ1BBTiBjYW4gZHJhdyBjaXJjdWxhciBh
bmQgZWxsaXB0aWNhbCBhcmNzIChhbmQgaWYgZmlsbGVkLCBzZWN0b3JzKS4KKEkgdXNlZCB0aGUg
ZmlsbGVkIGVsbGlwdGljYWwgYXJjIHNlY3RvcnMgaW4gR0QucG0gdG8gcmVjcmVhdGUgYW5kIHRo
ZW4KcmVmaW5lIG15IGNhLjE5OTAgTVNDIEVHQSBjb2xvciBzb2xpZCAoV2FuZyBMYWJzIHRvd2Vy
IDEpLikKCkJ1dCB0aGUgbGlicmFyeSBpdHNlbGYgc2VlbXMgb2xkIGFuZCBtYXliZSBkaWZmaWN1
bHQgdG8gaW5zdGFsbCBvbiBXaW5kb3dzLgo+CgpHRCBsaWJyYXJpZXMgaGF2ZW4ndCBiZWVuIGEg
cHJvYmxlbSBmb3IgbWUgb24gTGludXggYXQgbGVhc3QuCkkgcmVsb2FkIEdELnBtIGV0YyBhbm51
YWxseSB3aGVuIEkgcGVybGJyZXcgdGhlIG5ldyByZWxlYXNlIG9mIFBlcmwgYW5kCnJlbG9hZCBt
eSBsaWJzLgpJIGhhdmVuJ3QgYnVpbHQgR0QucG0gb24gV2luZG93cyBpbiBzbyBsb25nIEkgY2Fu
J3QgcGVyc29uYWxseSBhZHZpc2UuCkNQQU5UUyA8aHR0cDovL21hdHJpeC5jcGFudGVzdGVycy5v
cmcvP2Rpc3Q9R0QlMjAyLjgzO21heHZlcj0xPiBzaG93cyAxCnN1Y2Nlc3MgZWFjaCBvbiBNU1dJ
TjMyIHdpdGggUGVybCA1LjQwLlswMV0sIDUuMzguMiwgNS4zNi4zLCA1LjMyLjEgYW5kIEdECjIu
ODMuCkl0IGZhaWxlZCBvbmNlIHdpdGggZGV2IFBlcmwgYnVpbGRzIDUuNDEuWzU2N10sIGJ1dCB0
aGF0J3Mgbm90IGFsYXJtaW5nOwp0aGV5J3ZlIHJldmVydGVkIGEgY291cGxlIGxlc3MtYmFja3dh
cmRzLWNvbXBhdGlibGUtdGhhbi1leHBlY3RlZCBjaGFuZ2VzCmluIGRldi4KKEkgbm90aWNlIHRo
YXQgR0QgaGFzIGhhZCBhbiBvbmdvaW5nIHByb2JsZW0gd2l0aCBPcGVuQlNEIGFuZCBTb2xhcmlz
LApXVEFGPykKCldoYXQgZG8gcGVvcGxlIHN1Z2dlc3Q/Cj4KCkZvciBtYW55IGdyYXBoLWRpYWdy
YW1zLCB0aGUgc2Vuc2libGUgYXBwcm9hY2ggaXMgZm9yIGEgUGVybCBwcm9ncmFtIHRvCmVtaXQg
YSB0ZXh0dWFsIGZvcm0gb2YgdGhlIGdyYXBoLCBlLmcuIEdyYXBoVml6IGRvdCBsYW5ndWFnZSBm
aWxlcywgd2hpY2gKZ2V0IHR1cm5lZCBpbnRvIFNWRyBhbmQvb3IgUE5HIGJ5IEdyYXBoVml6IGNv
bW1hbmRsaW5lIHRvb2wgKHVzdWFsbHkgY2FsbGVkCidkb3QnIGFmdGVyIHRoZSBkZWZhdWx0ICJF
bmdpbmUiKikuCmh0dHBzOi8vbWV0YWNwYW4ub3JnL3BvZC9HcmFwaFZpejIKaHR0cHM6Ly9ncmFw
aHZpei5vcmcvZG9jcy9sYXlvdXRzL2RvdC8KKihIaW50OiBpbiBHViwgZGlmZmVyZW50IGJ1aWx0
LWluIGxheW91dCBydWxlcyBhcmUgY2FsbGVkICJFbmdpbmVzIi4pCgpTZXR0aW5nIHRoZSBkZWZh
dWx0IGVkZ2UgdHlwZSBpbiBhIEdyYXBoVml6IGdyYXBoIHRvICpzcGxpbmVzPWN1cnZlZCogd2ls
bApnaXZlICpub3QqIGNpcmN1bGFyIGJ1dCAqc3BsaW5lKiBjdXJ2ZXMuCkV4YW1wbGUKPGh0dHBz
Oi8vZWRvdG9yLm5ldC8/ZW5naW5lPWRvdCMlMjMlMjBQbGFjZSUyMHRoZSUyMGN1cnNvciUyMGlu
c2lkZSUyMCUyMmdyYXBoJTIyJTIwdG8lMjBnZXQlMjBzb21lJTIwcmVmYWN0b3JpbmclMjBvcHRp
b25zJTBBJTBBZ3JhcGglMjAlN0IlMEElMEElMDlzcGxpbmVzJTNEY3VydmVkJTNCJTIwJTBBJTA5
JTBBJTIwJTIwJTIwJTIwJTIzJTIwVG8lMjByZWZhY3RvciUyMG5vZGVzJTJDJTIwcGxhY2UlMjB0
aGUlMjBjdXJzb3IlMjBsZWZ0JTIwdG8lMjBhJTIwbm9kZSUyMG5hbWUlMEElMjAlMjAlMjAlMjBh
JTIwLS0lMjBiJTBBJTIwJTIwJTIwJTIwYSUyMC0tJTIwYyUzQiUwQSUyMCUyMCUyMCUyMGElMjAt
LSUyMGQlM0IlMEElMEElMjAlMjAlMjAlMjAlMjMlMjBIb3ZlciUyMG92ZXIlMjBjb2xvciUyMG5h
bWVzJTIwdG8lMjBnZXQlMjBhJTIwY29sb3IlMjBwaWNrZXIlMEElMjAlMjAlMjAlMjBiJTIwLS0l
MjBiJTIwJTVCY29sb3IlM0RibHVlJTVEJTBBJTIwJTIwJTIwJTIwYiUyMC0tJTIwZCUyMCU1QmNv
bG9yJTNEJTIyJTIzZmYwMDAwJTIyJTVEJTNCJTBBJTBBJTIwJTIwJTIwJTIwJTIzJTIwR2V0JTIw
Y29tcGxldGlvbiUyMHdoZW4lMjBhc3NpZ25pbmclMjBhJTIwc2hhcGUlMjBvciUyMGNvbG9yJTBB
JTIwJTIwJTIwJTIwYiUyMCU1QnNoYXBlJTNEYm94JTJDJTIwY29sb3IlM0R5ZWxsb3clNUQlM0Il
MEElMEElMjAlMjAlMjAlMjBhJTNCJTIwJTIzJTIwWW91JTIwY2FuJTIwcmVtb3ZlJTIwb3B0aW9u
YWwlMjAlM0IlMjBieSUyMHBsYWNpbmclMjB0aGUlMjBjdXJzb3IlMjBsZWZ0JTIwdG8lMjBhJTIw
c2VtaWNvbG9uJTBBJTdEJTBBPi4KKG9ubGluZSBHViBkb3QgZWRpdG9yL3R1dG9yaWFsL2V4YW1w
bGUgISEgbmVhdCEpCkFGQUlLLCBHcmFwaFZpeiBkb2Vzbid0IGhhdmUgc2VtaWNpcmNsZXMgYXMg
YW4gb3B0aW9uPyBCdXQgaXQgZG9lcyBsaWtlCmRyYXdpbmcgZnVsbCAzNjDCsCBjaXJjbGVzLgoK
Rm9yIG5vdyBJIGp1c3Qgd2FudCB0byBkcmF3IHRoZSBkaWFncmFtcy4gIEJ1dCBsYXRlciBJIG1p
Z2h0IGFsc28gd2FudCB0bwo+IGNvdW50IHRoZSBudW1iZXIgb2YgZWRnZXMsIHZlcnRpY2VzLCBh
bmQgZmFjZXMuICBUaGF0IGlzIHdoeSBJIGFtCj4gY29uc2lkZXJpbmcgdXNpbmcgYSBwcm9ncmFt
Lgo+CgpBIGdvb2QgcmVhc29uIGZvciB1c2luZyBhIGRlY2xhcmF0aXZlIHRleHQgZm9ybWF0IG9m
IHRoZSBkaWFncmFtIGFzIGFuCmludGVybWVkaWFyeSwgc3VjaCBhcyBHcmFwaFZpeidzIGRvdCBs
YW5ndWFnZS4KCk9uZSBsYXN0IHBvaW50LiAgVGhpcyBjb3VsZCBiZSBhIGdvb2QgZmlyc3QgdGVz
dCAoZm9yIG1lKSBvZiBBSSBjb2RlIGFzc2lzdAo+IHRvb2xzLiAgQnV0IEkgdGhpbmsgdGhleSB1
c3VhbGx5IGdlbmVyYXRlIFB5dGhvbiBvciBKYXZhc2NyaXB0LCBhbmQgSSBoYXZlCj4gbm90IHVz
ZWQgZWl0aGVyIG9mIHRob3NlIGxhbmd1YWdlcy4gIEFyZSB0aGVyZSBBSSB0b29scyB0aGF0IGdl
bmVyYXRlCj4gUGVybD8KPgoKYSkgSSBmaW5kIHRoYXQgdGhvdWdodCB1bmNsZWFuLgpiKSB0aGUg
Y29tbW9uIExMTSBoYWxsdWNpbmF0b3J5LW9yYWNsZXMgYXBwYXJlbnRseSBjcmVhdGUgZmFpcmx5
IGdvb2QgUGVybApzaW5jZSB3ZSd2ZSBwdXQgc28gbXVjaCBvZiBpdCBvbmxpbmUgZm9yIHRoZW0g
dG8gdmlvbGF0ZSBjb3B5cmlnaHRzIG9mLiAoQXMKaW4sIGlmIGl0IGdpdmVzIHlvdSBjb2RlIEkg
d3JvdGUgYXMgIlNhbWUgTGljZW5zZSBhcyBQZXJsIiBhbmQgZG9lc24ndCB0ZWxsCnlvdSB0aGF0
LCBpdCdzIHRoZWZ0LikgT3ZpZCAoQ3VydGlzKSBoYXMgYmVlbiBibG9nZ2luZyBhYm91dCB1c2lu
ZyB0aGVtLgpIZSdzIGEgZ29vZCBlbm91Z2ggY29kZXIgaGUgY2FuIGZpeCB3aGF0ZXZlciBlcnJv
cnMgdGhlIExMTSBoYWxsdWNpbmF0ZXMsCnNvIGl0IG1heSBzYXZlIGhpbSB0aW1lIGFuZCBub3Qg
Y3JlYXRlIG1vcmUgdGVjaG5pY2FsIGRlYnQgZHVlIHRvIGhpZGRlbgpidWdzIGJ1dCAuLi4KCi8v
IEJpbGwKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkJv
c3Rvbi1wbSBtYWlsaW5nIGxpc3QKQm9zdG9uLXBtQHBtLm9yZwpodHRwczovL21haWwucG0ub3Jn
L21haWxtYW4vbGlzdGluZm8vYm9zdG9uLXBtCg==