Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 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 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | /* solver-types.ts */
export type VertexIndex = number; // integer, 0 <= i < N
// Segment between two vertices (edge or diagonal). Undirected: (i,j) == (j,i).
export type SegmentRef = {
i: VertexIndex; // i != j
j: VertexIndex;
};
export type LengthConstraint = {
type: "length";
seg: SegmentRef;
length: number; // > 0
};
export type InteriorAngleConstraint = {
type: "interiorAngle";
i: VertexIndex;
angleRad: number; // 0 < angleRad < 2π (π allowed)
};
// |segX| = factor * |segY|
export type SegmentLengthRatioConstraint = {
type: "segmentLengthRatio";
segX: SegmentRef;
segY: SegmentRef;
factor: number; // > 0
};
// undirected angle in [0, π], 0 => parallel, π/2 => perpendicular
export type SegmentRelativeAngleConstraint = {
type: "segmentRelativeAngle";
segA: SegmentRef;
segB: SegmentRef;
angleRad: number; // 0 <= angleRad <= π
};
export type PolygonConstraint =
| LengthConstraint
| InteriorAngleConstraint
| SegmentLengthRatioConstraint
| SegmentRelativeAngleConstraint;
export type VertexKind = "convex" | "reflex" | "straight";
export type SimplePolygonSolveOptions = {
maxIterations?: number; // default 3000
tolerance?: number; // default 1e-10
initialization?:
| { kind: "regularNgon" }
| {
kind: "custom";
initialVertices: { x: number; y: number }[];
};
simplicityEpsilon?: number; // default 1e-6
restarts?: number; // default 0
randomSeed?: number;
diagnostics?: "none" | "basic" | "verbose";
};
export type PolygonData = {
sides: number;
sideLengths: number[]; // boundary edges i->i+1 mod N
interiorAngles: number[]; // per vertex i in radians (may include π)
};
export type SolverError = {
kind:
| "InvalidInput"
| "Infeasible"
| "DidNotConverge"
| "Degenerate"
| "NotSimple"
| "WrongOrientation";
message: string;
details?: Record<string, unknown>;
};
|