-
-
Notifications
You must be signed in to change notification settings - Fork 800
/
Utils.ts
34 lines (29 loc) · 1.02 KB
/
Utils.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import { type ICoordinates, type IShapeDrawData, degToRad } from "@tsparticles/engine";
import type { ISide } from "./ISide.js";
const piDeg = 180,
origin: ICoordinates = { x: 0, y: 0 },
sidesOffset = 2;
/**
*
* @param data -
* @param start -
* @param side -
*/
export function drawPolygon(data: IShapeDrawData, start: ICoordinates, side: ISide): void {
const { context } = data,
sideCount = side.count.numerator * side.count.denominator,
decimalSides = side.count.numerator / side.count.denominator,
interiorAngleDegrees = (piDeg * (decimalSides - sidesOffset)) / decimalSides,
interiorAngle = Math.PI - degToRad(interiorAngleDegrees); // convert to radians
if (!context) {
return;
}
context.beginPath();
context.translate(start.x, start.y);
context.moveTo(origin.x, origin.y);
for (let i = 0; i < sideCount; i++) {
context.lineTo(side.length, origin.y);
context.translate(side.length, origin.y);
context.rotate(interiorAngle);
}
}