Модераторы: Rickert, Alexeis, BorisVorontsov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> GDI+.Увеличение масштаба на дробную величину. Проблемы с дробными частями коордиат 
:(
    Опции темы
akolit
Дата 13.2.2009, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здравствуйте.
Проблема заключается в следующем:
Имеются некоторые фигуры,заданные набором точек.Есть необходимость увеличить в масштабе данные фигуры в 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.
То есть в двух координатах в координате с меньшим значением накапливается меньше дробной части коэффициента, чем в координате с большим значением.
И такое несоответствие возникает во всех испробованных вариантах при определённых значениях координат.
Вопрос: как избежать данной проблемы и сохранить пропорции при любом коэффициенте и любых значениях координат точек?
PM MAIL   Вверх
Gongex
Дата 16.2.2009, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

Репутация: -1
Всего: 0



Вот неужели тебя колышет такая мелочь?!? Отличается на 1,ну это же не тысча, и не миллион.Забей,и рисуй наздоровье.

Это сообщение отредактировал(а) Gongex - 16.2.2009, 16:55
PM MAIL   Вверх
akolit
Дата 17.2.2009, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Gongex
да ты понимаешь, я-то забить могу. НО:
во-первых заказчик не будет рад такому + заказчик далеко не один!!
во-вторых это реально бросается в глаза!!
PM MAIL   Вверх
kamre
Дата 17.2.2009, 15:45 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(akolit @ 13.2.2009,  17:29)
И такое несоответствие возникает во всех испробованных вариантах при определённых значениях координат.
Вопрос: как избежать данной проблемы и сохранить пропорции при любом коэффициенте и любых значениях координат точек?

Самый правильный вариант - это рисовать отрезки с субпиксельной точностью и со сглаживанием. Вот здесь подробно расписано что это такое.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

Ждём вас! С уважением, Alexeis, Rickert.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема »


 




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


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

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