SVG - raphael的新月形

时间:2013-05-16 21:29:24

标签: svg raphael

我有一个半圈的圆圈,我将用它来创造闪耀效果 - 我真正想做的就是让它成为新月形状

有人知道如何使半圆呈新月形状,所以它看起来更像3D吗?

这是我到目前为止所拥有的

http://jsfiddle.net/Hf79W/3/

var paper = Raphael("holder", 550, 550/1.5);
var rad = Math.PI / 180;
function sector(cx, cy, r, startAngle, endAngle, params) {
        var x1 = cx + r * Math.cos(-startAngle * rad),
        x2 = cx + r * Math.cos(-endAngle * rad),
        y1 = cy + r * Math.sin(-startAngle * rad),
        y2 = cy + r * Math.sin(-endAngle * rad);
    return paper.path(["M", cx, cy, "L", x1, y1, "A", r, r, 0, +(endAngle - startAngle > 180), 0, x2, y2, "z"]).attr(params);
}
var circle = paper.circle(100, 100, 50).attr({"fill":"brown"});
var fifty = sector(100,100,50,0,180,{"fill":"white","opacity":"0.4"});

2 个答案:

答案 0 :(得分:2)

我已经修改了一下主函数来实现同样的目的。

function sector(cx, cy, r, startAngle, endAngle, params) {
    var x1 = cx + r * Math.cos(-startAngle * rad),
        x2 = cx + r * Math.cos(-endAngle * rad),
        y1 = cy + r * Math.sin(-startAngle * rad),
        y2 = cy + r * Math.sin(-endAngle * rad);
    return paper.path(["M", x1, y1, 
    "A", r, r, 0, +(endAngle - startAngle > 180), 0, x2, y2, 
    "A", r*1.1, r*1.1, 0, +(endAngle - startAngle > 180), 1, x1, y1, 
    "z"]).attr(params);
}

在绘制第二条曲线时,反转绘图感并稍微增加半径。希望有所帮助。

答案 1 :(得分:0)

我通过在inkscape中绘制新月然后保存为SVG来解决这个问题