Я пытаюсь нарисовать кривую Безье окружающей эллипс с заданным запасом:Рисунок часть эллипса программно с Безье или эллиптической траектории - SVG и Raphaël.js
I хочу добиться этого программно, поэтому, если я изменю размер эллипса, кривая последует за ним.
На данный момент я сделал эту функцию:
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
- box.height/4,5
Существует fiddle with this example.
Я прочитал это stackoverflow question и я попробовал то же самое на моем примере, но до сих пор не могу понять, простое решение, оно остается случайным ...
Редактировать
Теперь я м, пытаясь с эллиптическим A
гсом, результат worser чем с путем Безье:
Существует функцию я использую. Если я удаляю поле, он точно соответствует моему эллипсу ... Наконец, это вопрос, как я могу следовать за эллипсом с запасом?
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;
}
См. updated fiddle here.
Действительно извините за ужасные цвета, это, например, цель.
Почему Безье? Почему бы не провести еще один частичный эллипс соответствующего размера/позиции? –
Вы meen с эллиптической дугой? Я пробовал это раньше, но это было невозможно из-за того, что он не был совершенным эллипсом. И мне нужно, чтобы это был путь, поэтому я могу нарисовать эту конкретную строку. – soyuka
Да, я имею в виду эллиптическую дугу, хотя вижу, что концентрические эллипсы не могут дать эффект, который вы ищете. Сказав, что я думаю, что кривая Безье будет только приближением. Как вы вывели 'box.width/15' и' box.height/4.5'? Разве это не вопрос обобщения математики? –