Добавить z-5-sinus.cpp

This commit is contained in:
oltnd
2024-11-01 22:55:34 +03:00
parent e29fb0b82d
commit e2bac2d092

87
z-5-sinus.cpp Normal file
View File

@@ -0,0 +1,87 @@
#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;
}