为什么此代码将正弦曲线倒置打印

Why does this code print the sine curve upside down

生成的 y 值似乎是正确的。请参阅 printf 打印输出,它打印出递增的 y 值。但是当发送到 SetPixel 函数时,它似乎打印出正弦曲线,就像乘以 -1???

怎么了?

#include <windows.h>
//#include <stdio.h>
#include <math.h>

int main() 
{
    HWND console = GetConsoleWindow();
    HDC dc = GetDC(console);
    int pixel =0;
    COLORREF C1= RGB(255,0,0); /* red */
    for (double i = 0; i< 6.3; i+=0.05)
    {
        SetPixel(dc,pixel,(int)(100+50*sin(i)),C1);
        /*printf("%d ", (int)(100+50*sin(i))); // prints numbers as expected, eg 100 102 104 107 109 112 etc */
        pixel+=1;
    } 
    ReleaseDC(console, dc);
    return 0;
}

反馈后

由于 Windows 坐标系从左上角 (0,0) 开始,您可以像这样更改 sin 函数的符号:

SetPixel(dc,pixel,(int)(100+50*-sin(i)),C1);

有效。

坐标系与您的预期不尽相同:y == 0 是屏幕的顶部,而不是底部。

Windows Coordinate System:

The x-coordinates increase to the right; y-coordinates increase from top to bottom.

following 很好地说明了这一点(它谈论 Java 坐标,但 Windows 坐标是相同的):

解决此问题的一个简单方法是翻转 sin() 的符号:

    SetPixel(dc,pixel,(int)(100-50*sin(i)),C1);
                               ↑