2015-01-18 4 views
3

생성 된 y 값이 올바른 것 같습니다. 증가하는 값을 인쇄하는 printf 인쇄를 참조하십시오. 하지만 SetPixel 함수로 보내면 -1로 곱해진 것처럼 sin e 커브를 인쇄하는 것처럼 보입니다. ???왜이 코드는 사인 곡선을 뒤집어서 인쇄합니까

무엇이 잘못 되었나요? 때문에 그냥 이런 죄 기능의 기호 변경할 수 있습니다 왼쪽 상단부터 윈도우 좌표계 (0,0)에 피드백

AFTER

#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; 
} 

:

와 setPixel를 (DC, 픽셀, (int) (100 + 50 * -sin (i)), C1);

그건 그렇습니다.

답변

3

좌표계가 예상 한 바가 없습니다. y == 0은 화면 하단이 아니라 상단입니다.

Windows Coordinate System 참조 :

의 x 좌표는 오른쪽으로 증가; y 좌표가 위에서 아래로 증가합니다.

following가 멋지게 보여 (이것은 자바 좌표에 대해 이야기하지만, 윈도우 좌표는 동일) :

Coordinate systems

이 문제를 해결하는 쉬운 방법은 sin()의 부호를 반전하는 것입니다 :

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

아, ok (0,0)는 왼쪽 위입니다. 나는 고마워. –