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

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

|

Для просмотра документации необходимо авторизоваться на сайте