Показать сообщение отдельно
  #8  
Старый 26.05.2013, 02:13
Аватар для Freeman
Freeman Freeman вне форума
Местный
 
Регистрация: 05.10.2012
Адрес: Санкт-Петербург
Сообщения: 576
Версия Delphi: 6
Репутация: выкл
По умолчанию

Цитата:
Сообщение от xabik
Вывод осуществляется по координатам xz и yz
Это ключевое слово. Стало быть, исходные координаты не портятся. По крайней мере, в приведенном коде. В реальном коде нигде присвоения xz и yz исходным координатам нет?

Смею предположить, что в данном случае может происходить накопление погрешности из-за использования целочисленных координат. Округление при каждом вычислении, -- и вот тебе на.

Можно либо перейти на вещественные xz и yz, либо оперировать дробными пикселями, как это делает формат Flash (SWF). Целому пикселю соответствует изображение при максимальном приближении, а при выводе делится на масштаб и округляется. Не помню, возможны ли в SWF масштабы не в степенях двойки.

Кроме того, как мне кажется, логично и правильно будет отделить хранение от представления. Хранение -- исходные данные -- остаются неизменными. Представление характеризуется масштабом и прямоугольником отсечения, которые передаются в процедуру отрисовки отдельными параметрами. Координаты будут пересчитываться при каждом отображении, и округление будет делаться один раз -- непосредственно перед отрисовкой. Я бы сделал именно так.
Ответить с цитированием