UNPKG

zrender

Version:

A lightweight graphic library providing 2d draw for Apache ECharts

76 lines (60 loc) 1.48 kB
/** * 玫瑰线 * @module zrender/graphic/shape/Rose */ import Path, { PathProps } from '../Path'; const sin = Math.sin; const cos = Math.cos; const radian = Math.PI / 180; export class RoseShape { cx = 0 cy = 0 r: number[] = [] k = 0 n = 1 } export interface RoseProps extends PathProps { shape?: Partial<RoseShape> } class Rose extends Path<RoseProps> { shape: RoseShape constructor(opts?: RoseProps) { super(opts); } getDefaultStyle() { return { stroke: '#000', fill: null as string }; } getDefaultShape() { return new RoseShape(); } buildPath(ctx: CanvasRenderingContext2D, shape: RoseShape) { const R = shape.r; const k = shape.k; const n = shape.n; const x0 = shape.cx; const y0 = shape.cy; let x; let y; let r; ctx.moveTo(x0, y0); for (let i = 0, len = R.length; i < len; i++) { r = R[i]; for (let j = 0; j <= 360 * n; j++) { x = r * sin(k / n * j % 360 * radian) * cos(j * radian) + x0; y = r * sin(k / n * j % 360 * radian) * sin(j * radian) + y0; ctx.lineTo(x, y); } } } } Rose.prototype.type = 'rose'; export default Rose;