diff options
Diffstat (limited to 'src/arc.ts')
-rw-r--r-- | src/arc.ts | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/src/arc.ts b/src/arc.ts new file mode 100644 index 0000000..d8e1e7d --- /dev/null +++ b/src/arc.ts @@ -0,0 +1,37 @@ +function polarToCartesian( + centerX: number, + centerY: number, + radius: number, + degreesAngle: number +): number[] { + const radianAngle = (degreesAngle - 90) * Math.PI / 180 + return [ + centerX + radius * Math.cos(radianAngle), + centerY + radius * Math.sin(radianAngle) + ] +} + +export function describe( + x: number, + y: number, + radius: number, + startAngle: number, + endAngle: number +): string { + const [startX, startY] = polarToCartesian(x, y, radius, endAngle) + const [endX, endY] = polarToCartesian(x, y, radius, startAngle) + const largeArcFlag = endAngle - startAngle <= 180 ? "0" : "1" + return [ + "M", + startX.toString(), + startY, + "A", + radius.toString(), + radius.toString(), + "0", + largeArcFlag, + "0", + endX.toString(), + endY.toString(), + ].join(" ") +} |