Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.05.2023, 00:12   #1
dstrx
Новичок
Джуниор
 
Регистрация: 18.12.2022
Сообщений: 2
По умолчанию Рисование в C++

Траектория заряженной частицы в магнитном поле.

Как соединить точки отрезками?

Код:
#include <windows.h>
#include "resource.h"
#include <iostream>

using namespace std;

int x, y;
double B, Vx, Vy;

int WINAPI DlgProc(HWND hDlg, WORD wMsg, WORD wParam, DWORD)
{
    PAINTSTRUCT ps;
    if (wMsg == WM_CLOSE || wMsg == WM_COMMAND && wParam == IDOK) {
        EndDialog(hDlg, 0);
    }
    else
        if (wMsg == WM_INITDIALOG) {
            RECT rc;
            GetClientRect(hDlg, &rc);
            int borderx = rc.right - rc.left;       	// рассчитаем границы окна
            int bordery = rc.bottom - rc.top;
            x += (borderx / 2);                	 	// учтём координаты окна для x0, y0
            y += (bordery / 2);
            x > borderx ? x = borderx : x;      	// если координаты выходят за границу окна - приравниваю их к границе
            y > bordery ? y = bordery : y;
        }
        else
            if (wMsg == WM_PAINT) {
                BeginPaint(hDlg, &ps);
                const double q = 1.6 * pow(10, -19);    		//	заряд электрона
                const double m = 9.1 * pow(10, -31);    		//	масса электрона
                const double V = sqrt(pow(Vx, 2) + pow(Vy, 2));     	//	общая скорость
                const double w = (q * B) / m;
                int t = 1, X, Y;
                while (x > 1 && y > 1) {
                    SetPixel(ps.hdc, x, y, RGB(0, 0, 0));
                    x = x + (((V / w) * cos(w * t)) * pow(10, 13));
                    y = y + (((V / w) * sin(w * t)) * pow(10, 13));
                    t++;
                }
                EndPaint(hDlg, &ps);
            }
    return 0;
}

void main()
{
    cout << "Please, enter 2 coords:" << endl;
    cin >> x >> y;
    cout << "x0 = " << x << "\ny0 = " << y << endl;
    cout << "Enter B, Vx, Vy" << endl;
    cin >> B >> Vx >> Vy;
    cout << "B = " << B << "\nVx = " << Vx << "\nVy = " << Vy << endl;
    DialogBox(NULL, MAKEINTRESOURCE(IDD_DIALOG1), NULL, (DLGPROC)DlgProc);
}
dstrx вне форума Ответить с цитированием
Старый 12.05.2023, 07:55   #2
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 967
По умолчанию

dstrx, сохраняй точки в вектор, а в WM_PAINT выводи при помощи Poliline
Алексей1153 на форуме Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Рисование Alex2012 C# (си шарп) 1 21.10.2011 21:52
Рисование !) Weyner Помощь студентам 4 23.10.2010 14:53
Рисование !) Weyner Помощь студентам 0 23.10.2010 09:20
Рисование Masip Общие вопросы Delphi 10 08.06.2010 22:16
рисование в си++/clr dampirik Общие вопросы C/C++ 4 06.10.2009 17:08