为什么此代码会正面打印正弦曲线

时间:2015-01-18 12:47:51

标签: c windows winapi screen trigonometry

生成的y值似乎正确。请参阅printf print out,其中打印增加的y值。但是当发送到SetPixel函数时,它似乎打印出sin e曲线,好像乘以-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,像素,(int)的(100 + 50 * -sin(i))的,C1);

有效。

1 个答案:

答案 0 :(得分:3)

坐标系统并不是您所期望的:y == 0是屏幕的 top ,而不是底部。

请参阅Windows Coordinate System

  

x坐标向右增加; y坐标从上到下增加

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

Coordinate systems

解决此问题的一种简单方法是翻转sin()

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