Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Прорисовка эллипса под углом, Нужен алгоритм 
:(
    Опции темы
pashik2006
Дата 29.3.2006, 02:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 29.3.2006

Репутация: нет
Всего: нет



Добрый день. Вот столкнулся с проблемой прорисовки эллипса под углом. Если нужно просто вывести эллипс, я вывожу по формуле x^2/a^2+y^2/b^2=1, где a и b - половины большой и малой оси соответственно. Я циклом проганяю по иксу от -a до a и получаю значения игрика. При необходимости вывести эллипс под улом, я проделываю примерно тоже, тока перед выводом перевожу координаты из виртуальной системы координат (которая повернута на заданый угол), в мою реальную систему координат (формулы преобразования координат). Вот тока картина печальная выходит. Изза токо, что координаты округляются, Эллипс выходит очень корявый. На algolist.manual.ru есть хороший пример прорисовки окружности. Может кто знает как эллипс прорисовать. Заранее благодарен.

x := Round((-a)*cos(fi*pi/180)-0*sin(fi*pi/180));
y := Round((-a)*sin(fi*pi/180)+0*cos(fi*pi/180));
Form1.Canvas.MoveTo(x+x0,y+y0);
for x_ := -a to a do
begin
y_ := Round(sqrt(abs(b*b-b*b*x_*x_/(a*a))));
x := Round(x_*cos(fi*pi/180)-y_*sin(fi*pi/180));
y := Round(x_*sin(fi*pi/180)+y_*cos(fi*pi/180));
Form1.Canvas.LineTo(x+x0,y+y0);
end;

Это сообщение отредактировал(а) pashik2006 - 29.3.2006, 02:29
PM MAIL   Вверх
MBo
Дата 29.3.2006, 06:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 234
Регистрация: 10.6.2002

Репутация: 5
Всего: 18



В Windows GDI эллипсы и окружности рисуются с помощью 4-х кривых Безье.
Таким образом, нужно вычислить 12 контрольных точек для рисования окружности (для первого квадранта точки (R,0), (R,0.55228475*R),(0.55228475*R,R)(R,0)), провести над ними аффинное преобразование, и отрисовать PolyBezier
PM MAIL   Вверх
pashik2006
Дата 30.3.2006, 00:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 29.3.2006

Репутация: нет
Всего: нет



А по какому принципу выщитываются эти коефициенты (0.55228475)?? И как их для овала учесть?
PM MAIL   Вверх
cardinal
Дата 30.3.2006, 01:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 5
Всего: 99



А можно работать в трехмерном пространстве и повернуть круг! сначала по оси y, а потом по оси z. Вот тебе и повернутый эллипс. smile
(Отображать его конечно надо в 2D)...

Сам придумал! smile


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
MBo
Дата 30.3.2006, 06:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 234
Регистрация: 10.6.2002

Репутация: 5
Всего: 18



> по какому принципу выщитываются эти коефициенты (0.55228475)??
Это приближение четверти окружности кривой Безье.
Принцип такой - в первом квадранте дуга окружности начинается в точке (R,0), а вектор касательной направлен вертикально.
Составляют такое уравнение, чтобы середина кривой Безье совпадала с серединой дуги, и находят множитель для определения контрольных точек.

>И как их для овала учесть?
Чтобы получить из окружности эллипс, проводят преобразования - масштабирования по осям, поворота, и переноса. Эти же преобразования применяются и к контрольным точкам Безье.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0700 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.