Files
dz4/z-5-sinus.cpp
2024-11-02 17:28:57 +03:00

84 lines
2.1 KiB
C++

#include <iostream>
#include <windows.h>
#include <cmath>
// Определение размеров окна
const int WIDTH = 800;
const int HEIGHT = 600;
// Определение параметров синусоид
const double PI = 3.14159265358979323846;
const double X_SCALE = 0.01;
const double Y_SCALE = 100.0; // Машт по Y
// Основная функция для рисования синусоид
void DrawSineWaves(HDC hdc) {
int centerY = HEIGHT / 2;
// Рисование синусоид
for (double x = 0; x < WIDTH; x += 0.5) {
double xVal = x * X_SCALE;
int ySmall2 = static_cast<int>(0.3 * std::sin(7 * xVal) * Y_SCALE);
SetPixel(hdc, static_cast<int>(x), centerY - ySmall2, RGB(255, 204, 0));
}
}
// Оконная процедура
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
switch (uMsg) {
case WM_PAINT: {
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hwnd, &ps);
DrawSineWaves(hdc);
EndPaint(hwnd, &ps);
}
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
// Основная функция WinAPI
int WINAPI wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ PWSTR pCmdLine, _In_ int nCmdShow) {
const wchar_t CLASS_NAME[] = L"SineWaveWindowClass";
WNDCLASS wc = {};
wc.lpfnWndProc = WindowProc;
wc.hInstance = hInstance;
wc.lpszClassName = CLASS_NAME;
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
RegisterClass(&wc);
HWND hwnd = CreateWindowEx(
0,
CLASS_NAME,
L"Sine Waves Graph",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, WIDTH, HEIGHT,
nullptr,
nullptr,
hInstance,
nullptr
);
if (hwnd == nullptr) {
return 0;
}
ShowWindow(hwnd, nCmdShow);
MSG msg;
while (GetMessage(&msg, nullptr, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}