87 lines
2.4 KiB
C++
87 lines
2.4 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;
|
|
} |