Кусочная biarc интерполяция Эрмита
c = rscvn(p,u)
c = rscvn(p)
c = rscvn(p,u)
возвращает плоскую кусочную кривую biarc (в квадратичном rBform), который передает, по порядку, через данные точки p(:,j)
и создается следующим образом (см. Конструкцию Biarc). Между любыми двумя отличными points p(:,j)
и p(:,j+1)
, кривая обычно состоит из двух круговых дуг (включая прямолинейные сегменты), которые присоединяются к непрерывности касательной к первой дуге, запускающейся в p(:,j)
и нормальный там к u(:,j)
и второй дуге, заканчивающейся в p(:,j+1)
и нормальный там к u(:,j+1)
, и с двумя дугами, записанными как та каждый раз, когда это возможно. Таким образом кривая непрерывна касательной везде кроме, возможно, в повторных точках, где кривая может иметь угол, или когда угол, сформированный этими двумя сегментами, заканчивающимися в p(:,j)
, является необычно маленьким, в этом случае кривая может иметь острый выступ в той точке.
p
должен быть действительной матрицей с двумя строками и по крайней мере двумя столбцами, и любой столбец должен отличаться от по крайней мере одного из своих соседних столбцов.
u
должен быть действительной матрицей с двумя строками с одинаковым числом столбцов как p
(для двух исключений, смотрите ниже), и не может иметь никакого нулевого столбца.
c = rscvn(p)
выбирает нормали следующим образом. Для j=2:end-1
u(:,j)
является средним значением (нормированный, превращение права) нормали к векторам p(:,j)-p(:,j-1)
и p(:,j+1)-p(:,j)
. Если p(:,1)==p(:,end)
, то и нормали конца выбраны в качестве среднего значения нормалей к p(:,2)-p(:,1)
и p(:,end)-p(:,end-1)
, таким образом предотвращающему угол в получившейся замкнутой кривой. В противном случае нормали конца так выбраны, что существует только одна дуга по первому и последнему сегменту (граничное условие не-узла).
rscvn(p,u)
, с u
, имеющим точно два столбца, также выбирает внутренние нормали что касается случая, когда u
отсутствует, но использует два столбца u
как нормали конечной точки.
Пример 1. Следующий код генерирует описание круга, с помощью всего четыре части. За исключением различного масштабирования последовательности узла, это - то же описание, как предоставляется rsmak('circle',1,[1;1])
.
p = [1 0 -1 0 1; 0 1 0 -1 0]; c = rscvn([p(1,:)+1;p(2,:)+1],p);
Тем же кругом, но использующий всего две части, обеспечивают
c2 = rscvn([0,2,0; 1,1,1]);
Пример 2. Следующий код строит две буквы. Обратите внимание на то, что вторая буква является результатом интерполяции ко всего четырем точкам. Отметьте также использование перевода в графическом выводе второй буквы.
p = [-1 .8 -1 1 -1 -1 -1; 3 1.75 .5 -1.25 -3 -3 3]; i = eye(2); u = i(:,[2 1 2 1 2 1 1]); B = rscvn(p,u); S = rscvn([1 -1 1 -1; 2.5 2.5 -2.5 -2.5]); fnplt(B), hold on, fnplt(fncmb(S,[3;0])), hold off axis equal, axis off
Две буквы, составленные из круговых дуг
Пример 3. Следующий код генерирует Конструкцию Biarc использования в обсуждении ниже biarc конструкции, используемой здесь. Отметьте использование fntlr
, чтобы найти касательную к biarc вначале в точке, где две дуги присоединяются, и в конце.
p = [0 1;0 0]; u = [.5 -.1;-.25 .5]; plot(p(1,:),p(2,:),'k'), hold on biarc = rscvn(p,u); breaks = fnbrk(biarc,'b'); fnplt(biarc,breaks(1:2),'b',3), fnplt(biarc,breaks(2:3),'r',3) vd = fntlr(biarc,2,breaks); quiver(vd(1,:),vd(2,:),vd(4,:),-vd(3,:)), hold off
Конструкция Biarc
Учитывая две отличных точки, p1
и p2
, в плоскости и, соответственно, два ненулевых вектора, u1
и u2
, существует семейство с одним параметром biarcs (т.е. кривая, состоящая из двух дуг с общей касательной в их соединении) запускающийся в p1
и нормально там к u1
и заканчивающийся в p2
и нормальный там к u2
. Один способ параметризовать это семейство biarcs нормальным направлением, v
, в точке q
, в котором присоединяются две дуги. С ненулевым выбранным v
существует затем точно один выбор q
, следовательно целый biarc затем определяется. В конструкции, используемой в rscvn
, v
выбран в качестве отражения, через перпендикуляр к сегменту от p1
до p2
, среднего значения векторов u1
и u2
, - после того, как оба вектора были так нормированы, что их длина равняется 1 и что они оба точка справа от сегмента от p1
до p2
. Этот выбор для v
кажется естественным в двух стандартных случаях: (i) u2
является отражением u1
через перпендикуляр к сегменту от p1
до p2
; (ii) u1
и u2
параллельны. Этот выбор v
подтвержден Biarcs как Функция Левого Нормального, которое показывает получившийся biarcs, когда p1
, p2
и u2 = [.809;.588]
сохранены фиксированными, и только нормальному в p1
позволяют отличаться.
Biarcs как функция левого нормального
Но невозможно иметь интерполяцию biarc, зависят постоянно во всех четырех данных, p1
, p2
, u1
, u2
. Должен быть разрыв как нормальные направления, u1
и u2
, пройти через направление от p1
до p2
. Это проиллюстрировано в Biarcs как Функция Одной Конечной точки, которая показывает biarcs, когда одна точка, p1 = [0;0]
, и эти две нормали, u1 = [1;1]
и u2 = [1;-1]
, считается зафиксированная и только другая точка, p2
, перемещения, на круге вокруг p1
.
Biarcs как функция одной конечной точки