LPtoDP --> DPtoLP
От: Аноним  
Дата: 30.06.04 12:47
Оценка:
Столкнулся с непонятной штукой.
Почему так происходит:


POINT pts[2];
        
pts[1].x = x1;
pts[1].y = y1;
pts[0].x = x2;
pts[0].y = y2;

LPtoDP( gc->hDC, pts, 2 );
/*
...
     Действия, в моём случае не изменяющие Х2 и У2 !
...
*/

DPtoLP( gc->hDC, pts, 1 );
    
x2 = pts[0].x;
y2 = pts[0].y;


На входе х2 — 602
На выходе х2 — 603

Откуда берётся еденичка?
Re: LPtoDP --> DPtoLP
От: EyeOfHell  
Дата: 30.06.04 13:52
Оценка:
День добрый.

А>Столкнулся с непонятной штукой.

А>Почему так происходит:
А>LPtoDP( gc->hDC, pts, 2 );
А>DPtoLP( gc->hDC, pts, 1 );
А>На входе х2 — 602
А>На выходе х2 — 603
А>Откуда берётся еденичка?

К сожалению, ни LPtoDP(), ни LPtoDP() не обратимы. Это связано с округлением при float-преобразованиях. Тоесть — если мы преобразовали некое число x из LP в DP, а потом результат обрытно — то у нас нет никакой гарантии, что мы
снова получим x. Плавающая точка ;(.

Для избежания рекомендуется переделать логику, чтобы она не требовала обратного преобразования либо не зависила от него.

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