Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 Аппроксимация элиптической кривой при помощи кривой Безье
Добрый день.
Кто нибудь может подсказать, как аппроксимировать дугу эллипса при помощи криых Безье, или где это можно прочитать.

Зарание большое спасибо.

 
Аватара пользователя
> дугу эллипса
ИМХО так же, как и любую другую гладкую кривую.

 
Аватара пользователя
:evil:
Бодигрим писал(а):
ИМХО так же, как и любую другую гладкую кривую.

Хорошо, тогда вопрос: как аппроксимировать любую гладкую кривую при помощи кривой Безье? :lol: :twisted:

wheelly писал(а):
как аппроксимировать дугу эллипса при помощи криых Безье,

Первый шаг — это превратить эллипс в окружность (немного растянуть вдоль короткой оси). Потом можно пытаться аппроксимировать дугу окружности. Пытаться, потому, что качество аппроксимации сильно зависит от углового размера дуг. Для дуг с угловым размером $\le \pi/2$ хорошо работает, например, такой выбор управляющих точек: если радиус окружности $R$, а величина дуги $\beta$, то $P_1P_2$, $P_4P_3$ направлены по касательной к дуге и имеют длину $|P_1P_2| = |P_4P_3|=\frac43 R \tg\frac{\beta}{4}$. Ну, а теперь окружность можно сплюснуть обратно.

Строго говоря, это не лучшее приближение ни в каком смысле, поскольку растяжение/сплющивание не сохраняют расстояния. Но на безрыбье…

Это положение управляющих точек соответствует касательной на концах к.Б., проходящей через середину дуги. Возможны и другие условия: минимальность отклонения, равенство площади, и другие. Результаты могут быть и лучше в некотором (заранее определённом) смысле, но формулы будут заметно более громоздкие.

 
Аватара пользователя
незваный гость писал(а):
Результаты могут быть и лучше в некотором (заранее определённом) смысле, но формулы будут заметно более громоздкие.

Насколько я знаю, дугу эллипса точно определяется кривыми b-spline и формулы там не такие сложные. Кивые Безье частный их случай. Это можно проверить записав дугу эллипса в формате igs в одном из пакетов инженерной графики.

 
Аватара пользователя
:evil:
Zai писал(а):
Насколько я знаю, дугу эллипса точно определяется кривыми b-spline и формулы там не такие сложные.

Эт’ вряд ли. Дело в том, что окружность (эллипс) невыразимы в полиномиальной покоординатной параметризации (а сегменты B-spline'а именно таковы).

Zai писал(а):
Кивые Безье частный их случай.

К.Б. — это параметрическая кривая третьего порядка. А сплайн — это семейство гладко согласованных полиномиальных кривых. К.Б., конечно, частный случай, в том же смысле, что и отрезок — частный случай ломаной. Но, например, отрезком трудно аппроксимировать окружность, а ломаной — можно.

Zai писал(а):
Это можно проверить записав дугу эллипса в формате igs в одном из пакетов инженерной графики.

«Лишь теория объясняет, что же мы ухитряемся наблюдать.» Например, Вы увидите некоторую к.Б. И что, она станет дугой эллипса?

 
Аватара пользователя
Вставлю свои пять копеек:
:D
wheelly писал(а):
Аппроксимация элиптической кривой при помощи кривой Безье

как аппроксимировать дугу эллипса

Эллиптическая кривая - это не дуга эллипса, несмотря на название.

 
Аватара пользователя
:evil:
Echo-Off писал(а):
Эллиптическая кривая - это не дуга эллипса, несмотря на название.

Точно не эллиптическая функция?

 
Аватара пользователя
незваный гость писал(а):
«Лишь теория объясняет, что же мы ухитряемся наблюдать.» Например, Вы увидите некоторую к.Б. И что, она станет дугой эллипса?

К.Б. можно определять и в полярных координатах. Тогда дуга окружности будет отрезком.

 
Аватара пользователя
:evil:
Zai писал(а):
К.Б. можно определять и в полярных координатах. Тогда дуга окружности будет отрезком.

Всё можно. Хотелось бы при этом сохранить какие-нибудь полезные свойства. Иначе зачем называть к.Б.?!

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

 
С помощью кривой Безье точно изобразить дугу эллипса не получится, а вот с помощью рациональной кривой Безье можно. Материалов я быстро найти не смог, но можно попробовать погуглить по слову NURBS -- non-uniform rational B-spline.

В английской википедии есть пример параметризации окружности: http://en.wikipedia.org/wiki/NURBS

 
Echo-Off писал(а):
Эллиптическая кривая - это не дуга эллипса, несмотря на название.

Похоже вы правы :-) .

Выражусь по точнее:
В SVG файлах есть элемент path. Одна из команд этого элемента - это "elliptical arc curve" (http://www.w3.org/TR/SVG11/paths.html#P ... rcCommands).
Вот к чему сводится моя задача:
Есть две точки на плоскости A и B, которые принадлежат эллипсу с заданными полуосями a и b и центром (cx;cy) (пусть мы точно знаем что точки принадлежат этому эллипсу).
Надо найти такую К.Б. (желательно кубическую), которая очень "близко" расположенна к дуге эллипса AB.
Требуется именно кривая Безъе, т.к. девайс умеет рисовать только прямую и кубическую кривую Безъе.

Я нашел описание на англ., но мне немного не понятен этот документ :( .
elliptical-arc.pdf
Вот тот же документ в html

 
Аватара пользователя
:evil:
elliptical arc curve == Кривая "дуга эллипса"

Добавлено спустя 55 минут 5 секунд:

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

В обозначениях статьи, $P_1 = E(\eta_1)$, $P_2 = E(\eta_2)$, $Q_1 = P_1 + \alpha E'(\eta_1)$, $Q_2 = P_2 - \alpha E'(\eta_2)$, $\alpha = \frac43 \tg(\frac{\eta_2-\eta_1}{4})$ даёт заметно лучший результат. Раз так в 8 лучший. А если использовать что-нибудь чуть хитрее (скажем, $\alpha = \frac43 \tg(\frac{\eta_2-\eta_1}{4})\left(1-0.0264731\tg^4(\frac{\eta_2-\eta_1}{4})\right)$), то мы и ещё раза в полтора улучшим.

 [ Сообщений: 12 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group