import { IPoint, IShape, ShapeIntersection } from "../../common-types"; declare abstract class Shape implements IShape { get center(): IPoint; get x(): number; get y(): number; protected pt: IPoint; protected constructor(x: number, y: number); abstract getPath(x: number, y: number, ratio?: number): Path2D; abstract support(dir: IPoint): IPoint; abstract expand(value: number): IShape; abstract move(pos: IPoint): IShape; intersection(shape: IShape, logs: boolean): ShapeIntersection; intersects(shape: IShape, logs: boolean): boolean; distance(shape: IShape): number; } export declare class Point extends Shape { static Zero: Point; get length(): number; get perpendicular(): Point; constructor(xOrP: number | IPoint, y?: number); getPath(x: number, y: number): Path2D; support(): IPoint; expand(): IShape; move(pos: IPoint): IShape; add(p: IPoint): Point; subtract(p: IPoint): Point; multiply(p: IPoint | number): Point; divide(p: IPoint | number): Point; dot(p: IPoint): Point; lerp(p: Point, ratio: number): Point; perpendicularTo(p: Point, length: number): Point; circleWith(a: Point, b: Point): Circle; tangents(c: Circle): Point[]; angle(p: Point): number; rotateAround(p: Point, angle: number): Point; } export declare class Rect extends Shape { readonly width: number; readonly height: number; readonly rotation: number; readonly radius: number; constructor(x: number, y: number, width: number, height: number, rotation?: number, radius?: number); getPath(x: number, y: number, ratio?: number): Path2D; support(dir: IPoint, logs?: boolean): IPoint; expand(value: number): Rect; move(pos: IPoint): Rect; } export declare class Oval extends Shape { readonly width: number; readonly height: number; readonly rotation: number; constructor(x: number, y: number, width: number, height: number, rotation?: number); getPath(x: number, y: number, ratio?: number): Path2D; support(dir: IPoint): IPoint; expand(value: number): Oval; move(pos: IPoint): Oval; } export declare class Circle extends Oval { readonly radius: number; constructor(x: number, y: number, radius: number, rotation?: number); expand(value: number): Circle; move(pos: IPoint): Circle; } export declare class ShapeGroup extends Shape { protected readonly subShapes: ReadonlyArray; constructor(x: number, y: number, subShapes: ReadonlyArray); getPath(x: number, y: number, ratio?: number): Path2D; support(dir: IPoint): IPoint; expand(value: number): IShape; move(pos: IPoint): IShape; } export {};