2014 dxdy logo

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

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




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

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

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

 
 
 
 
Сообщение05.03.2008, 20:43 
Аватара пользователя
: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}$. Ну, а теперь окружность можно сплюснуть обратно.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 
 
 
 
Сообщение13.03.2008, 00:12 
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

 
 
 
 
Сообщение13.03.2008, 01:33 
Аватара пользователя
: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