Gdi+.Увеличение масштаба на дробную величину. Проблемы с дробными част

Тема в разделе "MS Visual C++", создана пользователем akolit, 13 фев 2009.

  1. akolit

    akolit Гость

    Здравствуйте.
    Проблема заключается в следующем:
    Имеются некоторые фигуры,заданные набором точек.Есть необходимость увеличить в масштабе данные фигуры в N раз, при том, что N- число с плавающей точкой.При этом необходимо сохранить пропорции всех фигур.
    Алгоритм действий следующий:
    координаты каждой точки умножаются на N;
    но при этом возникают ситуации, при которых одинаковые фигуры до увеличения начинают отличаться друг от друга после увеличения.Это обусловлено тем, что после умножения координаты становятся нецелыми.И их простое округление(как это делает GDI+) работает некорректно.
    Испробованы следующие варианты:
    1.Отбрасывать дробную часть.
    2.При любом значении дробной части округлять всё в большую сторону.
    Например, имеются две линии, заданные двумя точками:
    ====================
    Линия 1:
    1 точка
    (X1=0;Y1=0)

    2 точка
    (X2=210;Y2=0)
    ===================
    Линия 2:
    1 точка
    (X1=2;Y1=0)

    2 точка
    (X2=212;Y2=0)
    ===================
    Длинна линий одинаковая и равна 210;
    Коэффициент увеличения N=1.21
    Умножим все координаты на N
    и получим:
    ====================
    Линия 1:
    1 точка
    (X1=0;Y1=0)

    2 точка
    (X1=254.1;Y1=0)
    ===================
    Линия 2:
    1 точка
    (X1=2.42;Y1=0)

    2 точка
    (X1=256.52;Y1=0)
    ===================
    Округлив значения, длины линий отличаются на 1.
    То есть в двух координатах в координате с меньшим значением накапливается меньше дробной части коэффициента, чем в координате с большим значением.
    И такое несоответствие возникает во всех испробованных вариантах при определённых значениях координат.
    Вопрос: как избежать данной проблемы и сохранить пропорции при любом коэффициенте и любых значениях координат точек?
     
  2. grigsoft

    grigsoft Well-Known Member

    Регистрация:
    15 ноя 2005
    Сообщения:
    735
    Симпатии:
    0
    Я так думаю, что стоит-таки почитать книжку по машинной графике, а не изобретать велосипед. Наверняка такие вещи давно обсосаны. Я графикой никогда не занимался, но навскидку:
    1. Погрешность эта минимальна и вполне ее можно игнорировать
    2. если надо масштабировать фигуры, то ими и надо заниматься, а не точками: бей на треугольники, переноси 2 вершины, а третью достраивай независимо и т.п.
     
Загрузка...
Похожие Темы - Gdi+ Увеличение масштаба
  1. ESWANT
    Ответов:
    1
    Просмотров:
    795
  2. alekssgor
    Ответов:
    0
    Просмотров:
    2.197
  3. TYMON
    Ответов:
    1
    Просмотров:
    3.087
  4. alekssgor
    Ответов:
    0
    Просмотров:
    1.988
  5. alekssgor
    Ответов:
    0
    Просмотров:
    2.609

Поделиться этой страницей