rscvn

Кусочная 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 затем определяется. В конструкции, используемой в rscvnV выбран в качестве отражения, через перпендикуляр к сегменту от 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 в зависимости от одной конечной точки

Смотрите также

|