我正在尝试围绕具有给定边距的椭圆绘制贝塞尔曲线:
我想以编程方式实现这一点,所以如果我改变椭圆大小,曲线会跟随它。
目前我已经做了这个功能:
function bezierPathTopRounded(ellipse, margin) {
var box = ellipse.paper.getBBox();
var leftX = box.x - margin;
var rightX = box.x + margin + box.width;
var y = box.y + box.height/2 - margin;
var p = "M "+ leftX + ", "+ y
+ " C " //could be relative too
+ ( box.x - margin + (box.width/15) ) + ", " + ( box.y + margin - (box.height/4.5) ) + " "
+ ( box.x + margin + box.width - (box.width/15) ) + ", " + ( box.y + margin - (box.height/4.5) ) + " "
+ rightX +", " + y;
return p;
}
但我不知道如何计算这个方向点值,以便它适用于任何椭圆:
- box.width/15
- 盒子高度/4.5
这个例子有一个小提琴。
我已经阅读了这个stackoverflow问题,并在我的示例中尝试了相同的方法,但仍然无法找到一个简单的解决方案,它仍然是随机的......
编辑
现在我正在尝试使用椭圆A
rc,结果比使用 Bezier Path 更糟糕:
有我正在使用的功能。如果我删除边距,它会完全按照我的椭圆...最后问题是我如何才能按照椭圆的边距?
function borderPath(ellipse, margin, flag) {
var flag = flag == undefined ? 1 : 0;
var box = ellipse.paper.getBBox();
var leftX = box.x - margin;
var rightX = box.x + margin + box.width;
var y = box.y + box.height/2;
y += (flag == 1) ? -margin : margin;
var rx = box.width/2 + margin;
var ry = box.height/2;
var p = "M "+ leftX + ", "+ y
+ " A "
+ rx + " " + ry
+ " 0 0 "+ flag +" "
+ rightX +", " + y;
return p;
}
在此处查看更新的小提琴。
对于可怕的颜色真的很抱歉,这些是例如目的。