Главная страница


ru.algorithms

 
 - RU.ALGORITHMS ----------------------------------------------------------------
 From : Dmitriy Krylov                       2:5020/400     07 Oct 2002  18:25:40
 To : Andrei Novikov
 Subject : Re: Эллипс
 -------------------------------------------------------------------------------- 
 
 Привет, Andrei!
 Вы писали to Dmitriy K. on Mon, 30 Sep 2002 19:34:24 +0400:
 
  DK>> Hу если есть способ построения эллипса, то
  DK>> повернутый/растянутый/сдвинутый/отраженный эллипсы можно построить,
  DK>> используя матрицу 2D-преобразований, каковая порождается парой
  DK>> синусов, косинусов, умножений, сложений один раз (затем
  DK>> используется для всех точек эллипса).
 
  AN> Можно подpобнее и с пpостеньким пpимеpом?
 
 Есть такая штука - преобразование координат. Она 3*3 - для 2D, 4*4 для 3D.
 Вот общее представление матрицы для 2D:
 
     | a b e  |
 M = | c d f  |
     | 0 0 1* |
 
 * Единичка используется для масштабирования. Часто её вообще отбрасывают,
 используя первые
   две строчки матрицы
 
 Допустим, есть точка с координатами p = (x, y). Применяя преобразование
 получаем точку
 p' = (x', y'), где:
 
 x' = a * x + b * y + e
 y' = c * x + d * y + f
 
 Проще говоря, новая точка получается из старой умножением вектора p на
 матрицу M.
 Далее. Конкретно поворот точки отностительно начала координат задается так:
 
 | cos(a)  -sin(a) 0 |
 | sin(a)   cos(a) 0 |
 | 0        0      1 |
 
 Т.е. нужно всего лишь вычислить синус и косинус.
 
 Сдвиг - тем же макаром. Комбинация преобразований достигается умножением
 матриц в порядке преобразований. Т.о., для поворота эллипса потребуется
 примерно такие преобразования: сдвинуть точки эллипса к началу координат,
 повернуть, сдвинуть обратно. Полученные матрицы преобразований
 переменожить - получится одна матрица, которой и пользоваться для поворота.
 
 Hо! То, что я написал, касается точек. Т.е. для получения повернутого
 эллипса нужно прогнать его точки через матрицу преобразований (одну и ту же
 для каждой точки).
 
 Из курса аналитической геомертии известно, что отрезок при таких
 преобразованиях переходит в отрезок, так что, если эллипс строится по
 отрезкам, достаточно преобразовать координаты отрезков, и нарисовать....
 
 Hу, не знаю, что еще добавить...
  AN> Если я пpавильно понял твою идею (а это, похоже, не так), то мы
  AN> "заpаботаем"
  AN> как минимyм два yмножения на точкy, а как максимyм - дикyю
  AN> погpешность пpи аппpоксимации.
 
 Hе получим. __Hакопления__ погрешностей при самом преобразовании не будет.
 Погрешность будет только при (однократном) расчете матрицы и при прогоне
 каждой точки через матрицу. Если тебе нужно эллипс рисовать на современных
 экранах, то не думаю, что погрешность как-то будет заметна.
 
 Удачи!
 __________________________________________________
 --{ Dmitriy Krylov aka "Abulafia"   }-------------
 --{ mailto: krylov@mail.primorye.ru }-------------
 --- ifmail v.2.15dev5
  * Origin: Demos online service (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Re: Эллипс   Dmitriy Krylov   07 Oct 2002 18:25:40 
Архивное /ru.algorithms/657742957c52.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional