Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.10.2010, 15:38   #1
Kingdom_Reborn
Форумчанин
 
Регистрация: 21.10.2010
Сообщений: 130
Вопрос Поворот эллипса.

Есть эллипс x^2/a^2 + y^2/b^2 = 1 (каноническое уравнение эллипса). Есть алгоритм для рисования этого эллипса. Мне нужно повернуть этот эллипс на некоторый угол, как это можно сделать? В программе для рисования эллипс задаётся параметрами a, b и координатами центра. Центром можно считать начало координат.
Собствено алгоритм Брезенхема:
Код:
void ellipse(int x, int y, int a, int b, int color)
{
     int col,i,row,bnew;
     long a_square,b_square,two_a_square,two_b_square,four_a_square,four_b_square,d;

     b_square=b*b;
     a_square=a*a;
     row=b;
     col=0;
     two_a_square=a_square<<1;
     four_a_square=a_square<<2;
     four_b_square=b_square<<2;
     two_b_square=b_square<<1;
     d=two_a_square*((row-1)*(row))+a_square+two_b_square*(1-a_square);
     while(a_square*(row)>b_square*(col))
     {
          putpixel(col+x,row+y,color);
          putpixel(col+x,y-row,color);
          putpixel(x-col,row+y,color);
          putpixel(x-col,y-row,color);
          if (d>=0)
          {
               row--;
               d-=four_a_square*(row);
          }
          d+=two_b_square*(3+(col<<1));
          col++;
     }
     d=two_b_square*(col+1)*col+two_a_square*(row*(row-2)+1)+(1-two_a_square)*b_square;
     while ((row) + 1)
     {
          putpixel(col+x,row+y,color);
          putpixel(col+x,y-row,color);
          putpixel(x-col,row+y,color);
          putpixel(x-col,y-row,color);
          if (d<=0)
          {
               col++;
               d+=four_b_square*col;
          }
          row--;
          d+=two_a_square*(3-(row <<1));
     }
}

Последний раз редактировалось Kingdom_Reborn; 21.10.2010 в 15:41.
Kingdom_Reborn вне форума Ответить с цитированием
Старый 21.10.2010, 15:54   #2
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,691
По умолчанию

Берешь вычисленную точку, считаешь угол радиус вектора(центр эллипса и точки), увеличиваешь его на требуемый угол поворота и пересчитываешь.
|x=r*cos(a+a')
{
|y=r*sin(a+a')

a' - угол поворота
a - угол радиус вектора
r - расстояние до центра

А если хочешь иначе, то придется читать дифференциальную геометрию, вспоминать собственные числа и вектора и выводить общее каноническое уравнение эллипса с произвольным углом(поворот системы координат)...
Kostia вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Центр эллипса. Vergil Помощь студентам 2 21.05.2010 12:37
Раскраска эллипса rubik Мультимедиа в Delphi 1 02.05.2010 05:21
цветовая раскраска эллипса rubik Помощь студентам 1 01.05.2010 15:52
Пересечение эллипса с прямой (Delphi) 0rtega Помощь студентам 0 13.04.2010 21:45
Рисование Эллипса Macwin Общие вопросы C/C++ 1 18.03.2010 14:38