Re[2]: Zoom, Help!
От: vovkos Россия https://ioninja.com
Дата: 03.05.01 09:42
Оценка:
>2. Для каждой точки ищется соотв. точка в исходной картинке.

Сорри за навязчивость, это наверно все знают, но все равно напишу :)
Поиск соотв. точки можно осуществлять без чисел с плавающей запятой.
Вообще в случаях, когда float'ы вылазят от деления одного целого на другое,
(а именно этот случай и рассматриваем) существует способ реализовать все
на целых числах (кажись называется алгоритм Брезенхейма, но я не уверен)
Если на пальцах, то надо складывать числители получающихся дробей отдельно,
вообще не производя делений.
Допустим нам надо поставить в соответвие:
x1 меняется 0..width1-1 и x2 меняется 0..width2-1.
вводим переменную t — в ней будем накапливать числители.

x1 = 0 x2 = 0 t = 0

while (x1 < width1)
{
x1++;
t += width2;
while (t > width1)
{
t -= width1;
x2++;
}
}

наглядно и понятно.
конечно по хорошему надо без внутреннего while-а, просто ввести еще две целочисленные переменные — m = целая часть от деления width2 на width1, и n = m * width1 и вместо
внутреннего while поставить
t -= n;
x2 += m;

все :)

Удачи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.