|
|
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) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/657742957c52.html, оценка из 5, голосов 10
|