生成的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);
有效。
答案 0 :(得分:3)
坐标系统并不是您所期望的:y == 0
是屏幕的 top ,而不是底部。
x坐标向右增加; y坐标从上到下增加。
following很好地说明了它(它讨论了Java坐标,但Windows坐标是相同的):
解决此问题的一种简单方法是翻转sin()
:
SetPixel(dc,pixel,(int)(100-50*sin(i)),C1);
↑