编程绘制函数和坐标系 c 语言
时间: 2024-05-12 10:19:11 浏览: 9
以下是一个简单的示例程序,用于在屏幕上绘制一个函数和坐标系。该程序使用了 Windows API 来绘制图形。
```c
#include <windows.h>
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
WNDCLASSEX wc;
HWND hwnd;
MSG Msg;
// 注册窗口类
wc.cbSize = sizeof(WNDCLASSEX);
wc.style = 0;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
wc.lpszMenuName = NULL;
wc.lpszClassName = "MyClass";
wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
if (!RegisterClassEx(&wc))
{
MessageBox(NULL, "Window Registration Failed!", "Error", MB_ICONEXCLAMATION | MB_OK);
return 0;
}
// 创建窗口
hwnd = CreateWindowEx(
WS_EX_CLIENTEDGE,
"MyClass",
"My Window",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, 640, 480,
NULL, NULL, hInstance, NULL);
if (hwnd == NULL)
{
MessageBox(NULL, "Window Creation Failed!", "Error", MB_ICONEXCLAMATION | MB_OK);
return 0;
}
ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);
// 消息循环
while (GetMessage(&Msg, NULL, 0, 0) > 0)
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
return Msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
static int xMin = -10, xMax = 10, yMin = -10, yMax = 10;
static int xOrigin, yOrigin, xScale, yScale;
switch (msg)
{
case WM_CREATE:
// 设置坐标系原点和比例
xOrigin = 50;
yOrigin = 430;
xScale = 30;
yScale = 30;
break;
case WM_PAINT:
hdc = BeginPaint(hwnd, &ps);
// 绘制坐标系
MoveToEx(hdc, xOrigin, yOrigin, NULL);
LineTo(hdc, xOrigin + (xMax - xMin) * xScale, yOrigin);
MoveToEx(hdc, xOrigin, yOrigin, NULL);
LineTo(hdc, xOrigin, yOrigin - (yMax - yMin) * yScale);
// 绘制函数 y = sin(x)
int x, y;
double dx = 0.1;
for (double i = xMin; i <= xMax; i += dx)
{
x = xOrigin + (i - xMin) * xScale;
y = yOrigin - sin(i) * yScale;
SetPixel(hdc, x, y, RGB(255, 0, 0));
}
EndPaint(hwnd, &ps);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd, msg, wParam, lParam);
}
return 0;
}
```
该程序绘制了 $y=\sin(x)$ 函数和坐标系,如下图所示:
![函数和坐标系](https://img-blog.csdn.net/20171020214219307?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYmFpZHU4MjQ2/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/80)