GDI的数值精度限制?

Yve*_*ust 6 windows precision gdi

我正在使用Windows GDI函数Arc绘制圆弧.它需要参数圆的边界框和两个分界开始和结束角度的点(不是角度本身).

当我传递如下的参数时,我得到一个异常结果.而不是具有大半径的圆的准平圆弧(大约13069,边界框是正方形),我得到图片上的输出(旋转;第二个版本显示两个端点的位置;第三个是预期的输出).

Arc(hDC, -25660, -12837, 477, 13300, 475, 462, 476, 66);
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我怀疑异常是由于弧的大半径/平坦度,尽管坐标不是那么大.你有什么解释吗?我主要关注的是找到出现这些显着特征的条件,以便解决这些问题.


这是一个产生问题的简单控制台应用程序:

#include <Windows.h>

int main(int argc, char* argv[])
{
    HDC hDC= GetDC(GetForegroundWindow());
    SelectObject(hDC, GetStockObject(WHITE_PEN));

    // Right
    Arc(hDC, -16, 37, 457, 510, 475, 462, 476, 66);

    // Wrong
    Arc(hDC, -25660, -12837, 477, 13300, 475, 462, 476, 66);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)