我正在一个程序,用于显示在C语言的正弦曲线, 这里是程序的一小部分制作一个正弦波程序
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static int cxClient, cyClient;
HDC hdc;
int i;
PAINTSTRUCT ps;
POINT apt[NUM];
switch (message)
{
case WM_SIZE:
cXClient = LOWORD(lParam);
cyClient = HIWORD(lParam);
return 0;
case WM_PAINT:
hdc = BeginPaint(hwnd, &ps);
MoveToEx(hdc, 0, cyClient/2, 0);
LineTo(hdc, cxClient, cyClient/2);
for (i = 0; i < NUM; i++)
{
apt[i].x = i * cxClient/NUM;
apt[i].y = (int) (height/2 * (1 - sin(TWOPI * i/NUM)));
}
Polyline(hdc, apt, NUM);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd, message, wParam, lParam);
}
其中NUM被设置为1000和cxClient是客户端的宽度区域IIN低位字和cyClient是在高字客户区的高度,TWOPI如(2 * 3.1459)
全局定义我与程序的问题是
1.我无法理解apt [i] .x和apt [i] .y(包括正弦形式)行。
2.当我定义TWOPI为的#define TWOPI(2 *(22/7))代替(的#define TWOPI(2 * 3.1459)),则图形是正方形,但两者的东西相同,相反,这是更准确的,为什么发生这种情况。
这些东西没有在书中解释,所以我问你。
要回答第二个问题(22/7)是3(整数除法),(22.0/7.0)是Pi(浮点除法)的近似值。 –
对π的更好逼近是3.14159(3.1459错误很大,超过0.13%太大),但也可以使用355.0/113.0(它比3.14159更精确一些)。 –
仅供参考您[可以通过''](http://msdn.microsoft.com/zh-cn/library/4hwaceh6.aspx) –