aboutsummaryrefslogtreecommitdiff
path: root/src/arc.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/arc.ts')
-rw-r--r--src/arc.ts37
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(" ")
+}