【问题标题】:Make the same curve in SVG and CANVAS在 SVG 和 CANVAS 中制作相同的曲线
【发布时间】:2015-01-29 19:36:58
【问题描述】:

我在 SVG 和 CANVAS 中创建相同的曲线时遇到问题。我有图形 d3js 强制布局,并在强制刻度方法中为 SVG 曲线准备值:

                        link.attr("d", function (d) {
                        var dx = d.target.x - d.source.x,
                            dy = d.target.y - d.source.y,
                            dr = Math.sqrt(dx * dx + dy * dy),
                            normX = dx / ((dr != 0) ? dr : 1),
                            normY = dy / ((dr != 0) ? dr : 1),
                            sourcePadding = d.left ? 50 : 5,
                            targetPadding = d.right ? 50 : 5,
                            sourceX = d.source.x + (sourcePadding * normX),
                            sourceY = d.source.y + (sourcePadding * normY),
                            targetX = d.target.x - (targetPadding * normX),
                            targetY = d.target.y - (targetPadding * normY);

                        return "M" +
                            sourceX + "," +
                            sourceY + "A" +
                            dr + "," + dr + " 0 0,1 " +
                            targetX + "," +
                            targetY;});

如何在 CANVAS 中创建相同的曲线?我试试这个,但这没有用:

                    edges.forEach(function (d) {
                        // Draw a line from source to target.
                        context.beginPath();
                        context.fillStyle = d.color;
                       // context.quadraticCurveTo(288, 0, 388, 150);
                        context.moveTo(d.source.x, d.source.y);
                        context.quadraticCurveTo(d.source.y, d.source.y - 50, d.target.x, d.target.y);
                       // context.lineTo(d.target.x, d.target.y);
                        context.stroke();
                    });

感谢您的帮助!

有 jdFidlle SVG / CANVAS : JsFiddle SVG on the left canvas on right

已解决,解决方案在此: SOLUTION 但是我在曲线的尽头有箭头问题。有人可以帮我吗?我认为半径可能存在问题。谢谢!

【问题讨论】:

    标签: canvas svg d3.js


    【解决方案1】:

    SVG 二次曲线命令是 Q,而不是 A(椭圆弧)。画布中的弧线将使用arc or arcTo 绘制。

    【讨论】:

    • 好的,谢谢,但是如何更正将 SVG 映射到 CANVAS arc 函数。我试试这个: context.arc(d.source.x, d.source.y, dr, 0, 0,1, 0);没有工作
    • 将 startAngle 和 endAngle 都指定为 0 不会得到任何东西。试试 arcTo 而不是 arc。
    • 仍然没有工作:context.arcTo(d.source.x, d.source.y, d.target.x, d.target.y, 30);
    • 创建一个我们可以运行的jsfiddle。
    猜你喜欢
    • 2019-02-28
    • 1970-01-01
    • 2011-09-28
    • 2011-10-14
    • 2015-12-30
    • 2016-11-19
    • 1970-01-01
    • 1970-01-01
    • 2014-12-16
    相关资源
    最近更新 更多