04 · 画箭头

把"主线 + 两条斜线"封装成 drawArrow(),画流程图直接复用

箭头数学:从点 (x1,y1) 到 (x2,y2),方向角 θ = atan2(y2-y1, x2-x1)。 两翼端点 = (x2 - L·cos(θ ± α), y2 - L·sin(θ ± α)),α 通常 ~25°,L 是翼长。
const dx = x2 - x1, dy = y2 - y1;
const angle = Math.atan2(dy, dx);
const alpha = Math.PI / 7; // 25 度
const L = 18; // 翼长
// 翼 1:逆时针偏 α
const a1x = x2 - L * Math.cos(angle - alpha);
const a1y = y2 - L * Math.sin(angle - alpha);
// 翼 2:顺时针偏 α
const a2x = x2 - L * Math.cos(angle + alpha);
const a2y = y2 - L * Math.sin(angle + alpha);
封装的好处:之后画流程图只要 drawArrow(rc, x1, y1, x2, y2, opts) 一行。