正弦曲线C或C++代码

2026年09月20日 08:02
有2个网友回答
网友(1):

代码如下:
#include
#include
#include
#include
#define Pi 3.1415926
long WINAPI WndProc(HWND hWnd, UINT iMessage,UINT wParam, LONG lParam);double dfTheta=0,dfRange=100.0;////正弦曲线的角度变量
long i=0,j=0;long lCentreX=0,lCentreY=0,lRadious=(long)(0.2*dfRange);////定义圆心的坐标POINT lpSin[100];//定义正弦曲线的点坐标int WINAPI WinMain( HINSTANCE hInstance, //主函数
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)//主函数
{
MSG Message;
HWND hWnd;
WNDCLASS WndClass;
WndClass.cbClsExtra=0;
WndClass.cbWndExtra=0;
WndClass.hbrBackground=(HBRUSH)(GetStockObject(WHITE_BRUSH));// 背景为白色
WndClass.hCursor=LoadCursor(NULL,IDC_ARROW);
WndClass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
WndClass.hInstance=hInstance;
WndClass.lpfnWndProc=WndProc;
WndClass.lpszClassName="SIN";
WndClass.lpszMenuName=NULL;
WndClass.style=0;
if(!RegisterClass(&WndClass))
{
MessageBeep(0);
return FALSE;
}
hWnd=CreateWindow("SIN",
"移动的圆",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
0,
CW_USEDEFAULT,
0,
NULL,
NULL,
hInstance,
NULL);ShowWindow(hWnd,nCmdShow);//显示窗口
UpdateWindow(hWnd);//更新并绘制用户区
for(int i=0;j<100;j++) //生成正弦曲线的点坐标
{
lpSin[j].x=(long)(j*2*Pi/100*60); lpSin[j].y=(long)(dfRange*sin(j*2*Pi/100));
}
while(GetMessage(&Message,0,0,0))//消息循环
{
TranslateMessage(&Message);
DispatchMessage(&Message);
}
return Message.wParam;
}
///////////////long WINAPI WndProc(HWND hWnd,
UINT iMessage,
UINT wParam,
LONG lParam)
{
HDC hDC;
HBRUSH hBrush;
HPEN hPen;
PAINTSTRUCT PtStr;//定义包含绘图信息的结构体变量
switch(iMessage)
{
case WM_PAINT: //处理绘图消息
hDC=BeginPaint(hWnd,&PtStr); //获取设备环境指针
SetWindowOrgEx(hDC,-200,-200,NULL);//设置远点坐标为(-200,-200)
hPen=CreatePen(PS_DASH,1,RGB(255,0,0));
SelectObject(hDC,hPen);
Polyline(hDC,lpSin,100); //绘制正弦曲线 if(i<=25) //第一个1/4周期
{
hPen=CreatePen(PS_DASH,1,RGB(255,0,0)); //创新红色画笔
hBrush=CreateHatchBrush(HS_BDIAGONAL,RGB(255,0,0)); //创新红画刷
lRadious=(long)(dfRange*0.2+i%25*dfRange*0.4/25); }
else if(i<=50) //第二个1/4周期
{
hPen=CreatePen(PS_DASH,1,RGB(0,255,0)); //创新绿画刷
hBrush=CreateHatchBrush(HS_DIAGCROSS,RGB(0,255,0));//创新绿画刷
lRadious=(long)(dfRange*0.2+i%25*dfRange*0.4/25);//计算半径
}
else if(i<=75) //第三个1/4周期
{
hPen=CreatePen(PS_DASH,1,RGB(0,0,255)); //创新蓝画刷
hBrush=CreateHatchBrush(HS_CROSS,RGB(0,0,255));//创新蓝画刷
lRadious=(long)(dfRange*0.2+i%25*dfRange*0.4/25);//计算半径
}
else
{
hPen=CreatePen(PS_DASH,1,RGB(255,255,0)); //创新黄画刷
hBrush=CreateHatchBrush(HS_VERTICAL,RGB(255,255,0));//创新黄画刷
lRadious=(long)(dfRange*0.2+i%25*dfRange*0.4/25);//计算半径 }
SelectObject(hDC,hBrush);
SelectObject(hDC,hPen);
lCentreX=lpSin[i].x;
lCentreY=lpSin[i].y;
Ellipse(hDC,lCentreX-lRadious,lCentreY-lRadious,
lCentreX+lRadious,lCentreY+lRadious);
i++;
DeleteObject(hPen);
DeleteObject(hBrush);
EndPaint(hWnd,&PtStr);
Sleep(100);
if(i<100)InvalidateRect(hWnd,NULL,1);
return 0;
case WM_DESTROY: PostQuitMessage(0);
return 0;
default:
return (DefWindowProc(hWnd,iMessage,wParam,lParam));
}
}

网友(2):

#include
#include
#include
#include
#define Pi 3.1415926
long WINAPI WndProc(HWND hWnd, UINT iMessage,
UINT wParam, LONG lParam);double dfTheta=0,dfRange=100.0;////正弦曲线的角度变量
long i=0,j=0;long lCentreX=0,lCentreY=0,lRadious=(long)(0.2*dfRange);////定义圆心的坐标POINT lpSin[100];//定义正弦曲线的点坐标int WINAPI WinMain( HINSTANCE hInstance, //主函数
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)//主函数
{
MSG Message;
HWND hWnd;
WNDCLASS WndClass;
WndClass.cbClsExtra=0;
WndClass.cbWndExtra=0;
WndClass.hbrBackground=(HBRUSH)(GetStockObject(WHITE_BRUSH));// 背景为白色
WndClass.hCursor=LoadCursor(NULL,IDC_ARROW);
WndClass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
WndClass.hInstance=hInstance;
WndClass.lpfnWndProc=WndProc;
WndClass.lpszClassName="SIN";
WndClass.lpszMenuName=NULL;
WndClass.style=0;
if(!RegisterClass(&WndClass))
{
MessageBeep(0);
return FALSE;
}
hWnd=CreateWindow("SIN",
"移动的圆",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
0,
CW_USEDEFAULT,
0,
NULL,
NULL,
hInstance,
NULL);ShowWindow(hWnd,nCmdShow);//显示窗口
UpdateWindow(hWnd);//更新并绘制用户区
for(int i=0;j<100;j++) //生成正弦曲线的点坐标
{
lpSin[j].x=(long)(j*2*Pi/100*60); lpSin[j].y=(long)(dfRange*sin(j*2*Pi/100));
}
while(GetMessage(&Message,0,0,0))//消息循环
{
TranslateMessage(&Message);
DispatchMessage(&Message);
}
return Message.wParam;
}
///////////////long WINAPI WndProc(HWND hWnd,
UINT iMessage,
UINT wParam,
LONG lParam)
{
HDC hDC;
HBRUSH hBrush;
HPEN hPen;
PAINTSTRUCT PtStr;//定义包含绘图信息的结构体变量
switch(iMessage)
{
case WM_PAINT: //处理绘图消息
hDC=BeginPaint(hWnd,&PtStr); //获取设备环境指针
SetWindowOrgEx(hDC,-200,-200,NULL);//设置远点坐标为(-200,-200)
hPen=CreatePen(PS_DASH,1,RGB(255,0,0));
SelectObject(hDC,hPen);
Polyline(hDC,lpSin,100); //绘制正弦曲线 if(i<=25) //第一个1/4周期
{
hPen=CreatePen(PS_DASH,1,RGB(255,0,0)); //创新红色画笔
hBrush=CreateHatchBrush(HS_BDIAGONAL,RGB(255,0,0)); //创新红画刷
lRadious=(long)(dfRange*0.2+i%25*dfRange*0.4/25); }
else if(i<=50) //第二个1/4周期
{
hPen=CreatePen(PS_DASH,1,RGB(0,255,0)); //创新绿画刷
hBrush=CreateHatchBrush(HS_DIAGCROSS,RGB(0,255,0));//创新绿画刷
lRadious=(long)(dfRange*0.2+i%25*dfRange*0.4/25);//计算半径
}
else if(i<=75) //第三个1/4周期
{
hPen=CreatePen(PS_DASH,1,RGB(0,0,255)); //创新蓝画刷
hBrush=CreateHatchBrush(HS_CROSS,RGB(0,0,255));//创新蓝画刷
lRadious=(long)(dfRange*0.2+i%25*dfRange*0.4/25);//计算半径
}
else
{
hPen=CreatePen(PS_DASH,1,RGB(255,255,0)); //创新黄画刷
hBrush=CreateHatchBrush(HS_VERTICAL,RGB(255,255,0));//创新黄画刷
lRadious=(long)(dfRange*0.2+i%25*dfRange*0.4/25);//计算半径 }
SelectObject(hDC,hBrush);
SelectObject(hDC,hPen);
lCentreX=lpSin[i].x;
lCentreY=lpSin[i].y;
Ellipse(hDC,lCentreX-lRadious,lCentreY-lRadious,
lCentreX+lRadious,lCentreY+lRadious);
i++;
DeleteObject(hPen);
DeleteObject(hBrush);
EndPaint(hWnd,&PtStr);
Sleep(100);
if(i<100)InvalidateRect(hWnd,NULL,1);
return 0;
case WM_DESTROY: PostQuitMessage(0);
return 0;
default:
return (DefWindowProc(hWnd,iMessage,wParam,lParam));
}
}