javascript - SVG路径: Curve tailing off of a straight line

标签 javascript math svg curve

我需要画一条直线(出于内容分离的目的),然后在其末端开始一条连接到指定端点的曲线。

我的问题是在完成直线后开始绘制圆弧时发生急转弯。如何消除这个尖 Angular ?

作为一种解决方案,延长直线以平滑其过渡到曲线是可以接受的。我只是不确定如何以编程方式执行此操作,因为端点会定期更改并且它必须适用于所有用例。

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)

现在我们有了圆心、圆弧半径、起点和终点。 如果需要 Angular 来构建弧线,则起始 Angular 为 -Pi/2 (if py > y1) ,结束 Angular 为atan2(py-cy, px-cx)

关于javascript - SVG路径: Curve tailing off of a straight line,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34037686/

相关文章:

javascript - 从 Greasemonkey 访问变量到页面,反之亦然

math - 组合数

math - 负数的 1 和 2 补码

javascript - 使用 d3.js 将 SVG 元素转换为 g 元素

javascript - 当关注下一个输入字段时,jQuery 超出了最大调用堆栈大小

javascript - 模块导出,nodejs 护照验证时间太长

javascript - 动态创建Anchor标签点击方法在Internet Explorer 11中不下载文件

math - 光线转换引擎渲染产生轻微失真,向屏幕边缘增加

javascript - 在 SVG 中旋转多边形

xml - python : lxml returns empty list from svg with xpath