这几天想做一个svg画图的小工具。需要画箭头,知道和三角函数有关,但已经忘的差不多了,于是在网上耙了一个基于flex画箭头的代码,稍加改动,在SVG上试验成功。
记录如下:
function getArrowKeypoints(startX,startY,endX,endY){
// L/_C_\R
var
arrowRadius = 6; //箭头尺寸大小就靠它了
var
pointsXY = [0,0,0,0,0,0];
//根据关系直线起至坐标获得线的夹角
var
tmpx = endX - startX ;
var
tmpy = startY - endY;
var
angle = Math.atan2(tmpy,tmpx)*(180/Math.PI);
var
centerX = endX - arrowRadius * Math.cos(angle *(Math.PI/180))
;
var
centerY = endY + arrowRadius * Math.sin(angle *(Math.PI/180))
;
var
topX = endX ;
var
topY = endY ;
var
leftX
= centerX + arrowRadius * Math.cos((angle +120)
*(Math.PI/180));
var
leftY = centerY - arrowRadius * Math.sin((angle +120)
*(Math.PI/180));
var
rightX = centerX + arrowRadius * Math.cos((angle +240)
*(Math.PI/180));
var
rightY = centerY - arrowRadius * Math.sin((angle +240)
*(Math.PI/180));
pointsXY[0]
= leftX;
pointsXY[1]
= leftY;
pointsXY[2]
= centerX; 在箭身靠终点的一个点,这样画箭头更漂亮些
pointsXY[3]
= centerY;
pointsXY[4]
= rightX;
pointsXY[5]
= rightY;
//pointsXY[6]
= ;
//pointsXY[7]
= ;
return
pointsXY;
}
x0-startX y0->startY x1->endX y1->endY
SVG:
记录如下:
function getArrowKeypoints(startX,startY,endX,endY){
}
x0-startX y0->startY x1->endX y1->endY
SVG: