Столкнулся с непонятной штукой.
Почему так происходит:
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
Откуда берётся еденичка?
День добрый.
А>Столкнулся с непонятной штукой.
А>Почему так происходит:
А>LPtoDP( gc->hDC, pts, 2 );
А>DPtoLP( gc->hDC, pts, 1 );
А>На входе х2 — 602
А>На выходе х2 — 603
А>Откуда берётся еденичка?
К сожалению, ни LPtoDP(), ни LPtoDP() не обратимы. Это связано с округлением при float-преобразованиях. Тоесть — если мы преобразовали некое число x из LP в DP, а потом результат обрытно — то у нас нет никакой гарантии, что мы
снова получим x. Плавающая точка ;(.
Для избежания рекомендуется переделать логику, чтобы она не требовала обратного преобразования либо не зависила от него.
С уважением, Око