【问题标题】:SVG, Raphael.js, DrawingSVG,Raphael.js,绘图
【发布时间】:2012-05-06 21:49:18
【问题描述】:

我想这更像是一个数学问题,或者可能是一个 SVG 问题。我正在考虑修改我在 raphael.js 网站上找到的一些示例代码。我已经将其修改为具有自定义中心点。现在我想修改它,以便我可以指定弧的开始角度。 (类似于 d3.js,所以我可以用它来制作像条形图这样的东西,中间缺失)。

但是我不知道从哪里或如何开始。我的数学很糟糕,我不知道 alpha 是什么以及 a 变量是什么。或者为什么 x 和 y 是这样计算的。我一遍又一遍地阅读 SVG 规范,但我缺少一些重要的基础知识,我不知道。

谁能指出我正确的方向,以便我开始理解这些东西?

window.onload = function () {
    var r = Raphael("holder", 600, 600),
        R = 200,
        init = true,
        param = {stroke: "#fff", "stroke-width": 30};
    // Custom Attribute
    r.customAttributes.arc = function (xPos, yPos, value, total, R) {
        var alpha = 360 / total * value,
        a = (90 - alpha) * Math.PI / 180,
        x = xPos + R * Math.cos(a),
        y = yPos - R * Math.sin(a),
        var path = [["M", xPos, yPos - R], ["A", R, R, 0, +(alpha > 180), 1, x, y]];
        return {path: path};
    };
    var sec = r.path().attr(param).attr({arc: [300, 300, 3, 60, R]});
};

运行代码产生:

<svg height="600" version="1.1" width="600" xmlns="http://www.w3.org/2000/svg" style="overflow: hidden; position: relative;">
    <path style="" fill="none" stroke="#bfb5b5" d="M300,100A200,200,0,0,1,361.8033988749895,109.7886967409693" stroke-width="30">
</svg>

我也不知道圆弧参数如何协同工作来绘制它们正在绘制的内容。

抱歉没有关注这个问题。

编辑: 它基于极地时钟示例。 http://raphaeljs.com/polar-clock.html

【问题讨论】:

  • 请解释为什么这被否决。这都是关于学习的。无论是学习代码还是学习如何发布问题。
  • 你能贴一个原始示例的链接吗?
  • 对我来说似乎是个好问题,+1。这是不平凡的,并展示了良好的先前尝试。 @guided1 - 未声明的反对票是 StackOverflow 生命中的一个偶然事实。不要太担心他们:)

标签: javascript math svg raphael geometric-arc


【解决方案1】:

我认为该示例的作者正在尝试创建自定义属性,以便轻松创建基于时钟旋转的弧线。 基本上,自定义属性的total 参数表示时钟的总移动(60 秒),而value(在您的情况下为 3)表示您尝试绘制的弧的长度(以秒为单位)。所以基本上你有一个 3 秒的弧。

现在是数学:

  • alpha :弧的角度(以度为单位)。您注意到从秒到度的转换:3 秒 -> 18 度

  • a :以弧度表示的角度。三角公式使用弧度而不是度数,因此您需要这种转换。出于某种我不明白的原因,这是互补角 (90 - alpha)
    编辑:互补角(可能)用于补偿在三角学中 y -axis 指向上方,而在 svg 画布上它指向下方。

  • x, y :您正在绘制的路径(弧)的终点。这些是使用基本三角法计算得出的(抱歉..您在这里没有得到任何帮助)。

svg arc 的参数说明如下:http://www.w3.org/TR/SVG/paths.html#PathDataEllipticalArcCommands

【讨论】:

  • 谢谢。谢谢你。谢谢你。我很惭愧地承认我的基本三角也缺乏。转至khanacademy.org 我走了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-14
  • 1970-01-01
  • 2013-03-23
  • 1970-01-01
  • 1970-01-01
  • 2013-07-09
  • 1970-01-01
相关资源
最近更新 更多