SVG路径:曲线拖尾直线
SVG Path: Curve tailing off of a straight line
我需要画一条直线(用于内容分隔),然后在它的末端,开始一条连接到指定端点的曲线。
我的问题是在完成直线后开始画圆弧时出现急转弯。怎么去掉这个尖角?
作为解决方案,可以延长直线以使其平滑过渡到曲线。我只是不确定如何以编程方式执行此操作,因为端点会定期更改并且它必须适用于所有用例。
Fiddle:(1/5 比例)
http://jsfiddle.net/7k2neef2/1/
SVG 路径:
M 56 494 l 324 0 A 100 100 0 0 0 231 275
我应该注意,我正在使用一个函数来导出弧,然后将其附加到直线上。这是函数:
function describeArc(x, y, radius, startAngle, endAngle){
var arcSweep = endAngle - startAngle <= 180 ? "0" : "1";
var d = [
"A", radius, radius, 0, arcSweep, 0, x, y
].join(" ");
d = 'M 56 494 l 324 0 ' + d;
return d;
}
对于水平线段(x1,y1)-(x2,y1)和点(px,py)我们可以构建软连接的圆弧。
圆心坐标
cx = x2
cy = y1 + R
让我们
dx = px - x2
dy = py - y1
then
dx^2 + (R-dy)^2 = R^2
dx^2 + R^2 - 2 * R * dy + dy^2 = R^2
dx^2 + dy^2 = 2 * R * dy
R = (dx^2 + dy^2) / (2*dy)
现在我们有了圆心、圆弧半径、起点和终点。
如果您需要角度来构建圆弧,则起始角度为 -Pi/2 (if py > y1)
,结束角度为 atan2(py-cy, px-cx)
我需要画一条直线(用于内容分隔),然后在它的末端,开始一条连接到指定端点的曲线。
我的问题是在完成直线后开始画圆弧时出现急转弯。怎么去掉这个尖角?
作为解决方案,可以延长直线以使其平滑过渡到曲线。我只是不确定如何以编程方式执行此操作,因为端点会定期更改并且它必须适用于所有用例。
Fiddle:(1/5 比例)
http://jsfiddle.net/7k2neef2/1/
SVG 路径:
M 56 494 l 324 0 A 100 100 0 0 0 231 275
我应该注意,我正在使用一个函数来导出弧,然后将其附加到直线上。这是函数:
function describeArc(x, y, radius, startAngle, endAngle){
var arcSweep = endAngle - startAngle <= 180 ? "0" : "1";
var d = [
"A", radius, radius, 0, arcSweep, 0, x, y
].join(" ");
d = 'M 56 494 l 324 0 ' + d;
return d;
}
对于水平线段(x1,y1)-(x2,y1)和点(px,py)我们可以构建软连接的圆弧。 圆心坐标
cx = x2
cy = y1 + R
让我们
dx = px - x2
dy = py - y1
then
dx^2 + (R-dy)^2 = R^2
dx^2 + R^2 - 2 * R * dy + dy^2 = R^2
dx^2 + dy^2 = 2 * R * dy
R = (dx^2 + dy^2) / (2*dy)
现在我们有了圆心、圆弧半径、起点和终点。
如果您需要角度来构建圆弧,则起始角度为 -Pi/2 (if py > y1)
,结束角度为 atan2(py-cy, px-cx)