Кусочная 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 в зависимости от одной конечной точки