Цитата:
Сообщение от xabik
Вывод осуществляется по координатам xz и yz
|
Это ключевое слово. Стало быть, исходные координаты не портятся. По крайней мере, в приведенном коде. В реальном коде нигде присвоения xz и yz исходным координатам нет?
Смею предположить, что в данном случае может происходить накопление погрешности из-за использования целочисленных координат. Округление при каждом вычислении, -- и вот тебе на.
Можно либо перейти на вещественные xz и yz, либо оперировать дробными пикселями, как это делает формат Flash (SWF). Целому пикселю соответствует изображение при максимальном приближении, а при выводе делится на масштаб и округляется. Не помню, возможны ли в SWF масштабы не в степенях двойки.
Кроме того, как мне кажется, логично и правильно будет отделить хранение от представления. Хранение -- исходные данные -- остаются неизменными. Представление характеризуется масштабом и прямоугольником отсечения, которые передаются в процедуру отрисовки
отдельными параметрами. Координаты будут пересчитываться при каждом отображении, и округление будет делаться один раз -- непосредственно перед отрисовкой. Я бы сделал именно так.