SVG Path: кривая, отходящая от прямой линии

Мне нужно нарисовать прямую линию (для разделения контента), а затем в конце начать кривую, которая соединяется с назначенной конечной точкой.

Моя проблема заключается в резком повороте, который он делает, когда начинает рисовать дугу после окончания прямой линии. Как убрать этот острый угол?

В качестве решения допустимо удлинение прямой, чтобы сгладить ее переход в кривую. Я просто не уверен, как это сделать программно, так как конечная точка будет периодически меняться, и она должна работать для всех вариантов использования.

Скрипка: (масштаб 1/5)

http://jsfiddle.net/7k2neef2/1/

Путь SVG:

M 56 494 l 324 0 A 100 100 0 0 0 231 275

Я должен отметить, что я использую функцию для получения дуги, а затем добавляю ее к прямой линии. Вот функция:

            function describeArc(x, y, radius, startAngle, endAngle){

                var arcSweep = endAngle - startAngle <= 180 ? "0" : "1";

                var d = [
                    "A", radius, radius, 0, arcSweep, 0, x, y
                ].join(" ");

                d = 'M 56 494 l 324 0 ' + d;

                return d;
            }

person daveycroqet    schedule 02.12.2015    source источник
comment
Ваша линия всегда горизонтальна? Какие требования к дуге?   -  person MBo    schedule 02.12.2015
comment
@MBo Стартовая линия всегда горизонтальна. Требования к дуге отсутствуют.   -  person daveycroqet    schedule 02.12.2015


Ответы (1)


Для горизонтального отрезка (x1,y1)-(x2,y1) и точки (px, py) мы можем построить дугу окружности с мягким соединением. Координаты центра окружности

cx = x2
cy = y1 + R 

Давайте

dx = px - x2
dy = py - y1
then
dx^2 + (R-dy)^2 = R^2
dx^2 + R^2 - 2 * R * dy + dy^2 = R^2
dx^2 + dy^2 = 2 * R * dy
R = (dx^2 + dy^2) / (2*dy)

Теперь у нас есть центр, радиус дуги, начальная и конечная точки. Если вам нужны углы для построения дуги, то начальный угол -Pi/2 (if py > y1), конечный угол atan2(py-cy, px-cx)

person MBo    schedule 02.12.2015