Drop Down MenusCSS Drop Down MenuPure CSS Dropdown Menu

неділя, 14 травня 2017 р.

Створення програми "PolarPaint 2.0"

Всім привіт! Сьогодні я розповім вам, як створити легку програму С++, при запуску якої, у нас з'явиться координатна площина, на якій будуть малюватись різні фігури.






Спочатку, я би хотів трохи розповісти про полярну систему координат:

Полярна система координат — двомірна система координат, в якій кожна точка на площині однозначно визначається двома числами — полярним кутом і полярним радіусом. Полярна система координат особливо корисна у випадках, коли відносини між точками простіше зобразити у вигляді радіусів і кутів; в більш поширеною, або прямокутної декартової системі координат, такі відносини можна встановити тільки шляхом застосування тригонометричних рівнянь.З допомогою полярної системи координат можна побудувати досить багато цікавих постатей, наприклад ті, які є на малюнку вище і будуть нижче.


       

Повертаємось до розробки самої програми:

Для початку, беремо основу програми.



Повертаємось до VisualStudio. Відкриваємо Solution Explorer - нам знадобляться 3 файли, це: ProgramDlg.hProgramDlg.cpp та Редактор вікна









Відкриваємо "Редактор вікна" і б'ємо вікно в точку. Далі, клацаємо по файлу вікна і натискаємо "Add Resource". У відкритому вікні обираємо "Menu" та натискаємо "Add".

Після цього, робимо меню такого вигляду (1 пункт меню робимо з точно такими же підпунктами, як і у попередній програмі):







Далі, по першому підпункту клацаємо правою клавішею миши і обираємо "Add Event Handler". У відчиненому вікні змінюємо тільки другий пункт на CProgramDlg. Натискаємо "Add and Edit".
Робимо так з усіма підпунктами меню. Можна взяти з текстового файлу PolarPaint код для пунктів меню, або взяти мій код:


Відкриваємо ProgramDlg.h і стираємо весь код; 
І вставляємо цей код:



// ProgramDlg.h : файл заголовка
//

#pragma once

#define mtime 298
#define PI 3.14159265358979323846

// диалоговое окно CProgramDlg
class CProgramDlg : public CDialog
{
// Создание
public:
CProgramDlg(CWnd* pParent = NULL); // стандартный конструктор

// Данные диалогового окна
#ifdef AFX_DESIGN_TIME
enum { IDD = IDD_PROGRAM_DIALOG };
#endif

protected:
virtual void DoDataExchange(CDataExchange* pDX); // поддержка DDX/DDV


// Реализация
protected:
HICON m_hIcon;

// Созданные функции схемы сообщений
virtual BOOL OnInitDialog();
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
DECLARE_MESSAGE_MAP()

private:

COLORREF cf,ck, c[25];
HFONT hold, hNew, hbk;
HPEN hPenOxy, hOldPen, pen;
HBRUSH m, oldm, brush;
CPen d, oldd;
CBitmap pic;
CRect rc, w, kw[30];

CString msg, t, z;

int Matrix[50][50];
int x1, y1, x2, y2, x3, y3, x4, y4;
int RH, RW, k, i, j, p, x, y, cx, cy, dx, dy;

bool fg;

public:
afx_msg void OnFilePolar1();
afx_msg void OnFilePolar2();
afx_msg void OnFilePolar3();
afx_msg void OnFilePolar4();
afx_msg void OnFilePolar5();
afx_msg void OnFilePolar6();
afx_msg void OnFilePolar7();
afx_msg void OnFileSinx();
afx_msg void OnFileCosx();
};



Потім, відкриваємо ProgramDlg.cpp і стираємо весь код;
Замість старого коду вставляємо ось цей код
:


// ProgramDlg.cpp : файл реализации
//

#include "stdafx.h"
#include "Program.h"
#include "ProgramDlg.h"
#include "afxdialogex.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// диалоговое окно CProgramDlg



CProgramDlg::CProgramDlg(CWnd* pParent /*=NULL*/)
: CDialog(IDD_PROGRAM_DIALOG, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CProgramDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);

fg = true;

SetWindowTextW(L"Системы координат");
}

BEGIN_MESSAGE_MAP(CProgramDlg, CDialog)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_COMMAND(ID_FILE_POLAR1, &CProgramDlg::OnFilePolar1)
ON_COMMAND(ID_FILE_POLAR2, &CProgramDlg::OnFilePolar2)
ON_COMMAND(ID_FILE_POLAR3, &CProgramDlg::OnFilePolar3)
ON_COMMAND(ID_FILE_POLAR4, &CProgramDlg::OnFilePolar4)
ON_COMMAND(ID_FILE_POLAR5, &CProgramDlg::OnFilePolar5)
ON_COMMAND(ID_FILE_POLAR6, &CProgramDlg::OnFilePolar6)
ON_COMMAND(ID_FILE_POLAR7, &CProgramDlg::OnFilePolar7)
ON_COMMAND(ID_FILE_SINX, &CProgramDlg::OnFileSinx)
ON_COMMAND(ID_FILE_COSX, &CProgramDlg::OnFileCosx)
END_MESSAGE_MAP()


// обработчики сообщений CProgramDlg

BOOL CProgramDlg::OnInitDialog()
{
CDialog::OnInitDialog();

// Задает значок для этого диалогового окна.  Среда делает это автоматически,
//  если главное окно приложения не является диалоговым
SetIcon(m_hIcon, TRUE); // Крупный значок
SetIcon(m_hIcon, FALSE); // Мелкий значок

// TODO: добавьте дополнительную инициализацию

return TRUE;  // возврат значения TRUE, если фокус не передан элементу управления
}

// При добавлении кнопки свертывания в диалоговое окно нужно воспользоваться приведенным ниже кодом,
//  чтобы нарисовать значок.  Для приложений MFC, использующих модель документов или представлений,
//  это автоматически выполняется рабочей областью.

void CProgramDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // контекст устройства для рисования

SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

// Выравнивание значка по центру клиентского прямоугольника
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;

// Нарисуйте значок
dc.DrawIcon(x, y, m_hIcon);
}
else
{

CClientDC dc(this);
GetClientRect(&rc);
dc.FillSolidRect(&rc, RGB(255, 255, 255));

cf = RGB(255, 255, 255);
ck = 0x00EB3C60;//RGB(50, 70, 120);


hPenOxy = CreatePen(PS_SOLID, 3, ck);
hOldPen = (HPEN)SelectObject(dc, hPenOxy);

int cxClient, cyClient;
cyClient = rc.bottom;//высота
cxClient = rc.right;//ширина

double x, y;//значений функций
double r=200;

int XX[100], YY[100];
int n = 15;

for (k = 0; k <= n; k++)
{
XX[k] = cxClient / 2 + r*sin(PI * 2 / n*k);
YY[k] = cyClient / 2 + r*cos(PI * 2 / n*k);
}

for (k = 0; k <= n; k++)
{
dc.MoveTo(XX[k], YY[k]);
for (int i = 0; i <= n; i++)
{
dc.LineTo(XX[i], YY[i]);
dc.MoveTo(XX[k], YY[k]);
}
}

SelectObject(dc, hOldPen);
DeleteObject(hPenOxy);


CDialog::OnPaint();
}
}

// Система вызывает эту функцию для получения отображения курсора при перемещении
//  свернутого окна.
HCURSOR CProgramDlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}



void CProgramDlg::OnFilePolar1()
{
// TODO: Add your command handler code here
CClientDC dc(this);
GetClientRect(&rc);
hNew = CreateFont(28, 0, 0, 0, FW_NORMAL, 0, 0, 0, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, L"Times New Roman Cyr");
hold = (HFONT)SelectObject(dc, hNew);

dc.FillSolidRect(&rc, RGB(255, 255, 255));

cf = RGB(255, 255, 255);
ck = RGB(50, 70, 120);
SetTextColor(dc, ck);
SetBkColor(dc, cf);
msg.Format(L"Полярная");
TextOutW(dc, rc.left + 50, rc.bottom - 450, msg, msg.GetLength());
msg.Format(L"система");
TextOutW(dc, rc.left + 50, rc.bottom - 420, msg, msg.GetLength());
msg.Format(L"координат");
TextOutW(dc, rc.left + 50, rc.bottom - 390, msg, msg.GetLength());

COLORREF crFunction = RGB(0, 190, 0);//цвет графика
COLORREF crAxes = RGB(89, 89, 250);//цвет осей (линий)
COLORREF crMarks = RGB(0, 0, 160);//цвет отметок на шкале
COLORREF crXYLines = RGB(140, 70, 0);//название осей
COLORREF crDeleniya = RGB(0, 0, 165);//цвет текста


HPEN hPenOxy, hOldPen;
hPenOxy = CreatePen(PS_SOLID, 2, crAxes);//создаем кисть цветом "crOxy"
hOldPen = (HPEN)SelectObject(dc, hPenOxy);

SetTextColor(dc, crAxes);//устанавливаем цвет текста
int cxClient, cyClient;
cyClient = rc.bottom;//высота
cxClient = rc.right;//ширина

//выводим ось OX
MoveToEx(dc, 0, cyClient / 2, NULL);
LineTo(dc, cxClient, cyClient / 2);
//выводим стрелочку
MoveToEx(dc, cxClient, cyClient / 2, NULL);
LineTo(dc, cxClient - cxClient / 100 * 2, cyClient / 2 - cyClient / 100 * 2);
MoveToEx(dc, cxClient, cyClient / 2, NULL);
LineTo(dc, cxClient - cxClient / 100 * 2, cyClient / 2 + cyClient / 100 * 2);
//рисуем ось OY
MoveToEx(dc, cxClient / 2, 00, NULL);
LineTo(dc, cxClient / 2, cyClient);
//выводим стрелочку
MoveToEx(dc, cxClient / 2, 0, NULL);
LineTo(dc, cxClient / 2 - cxClient / 100 * 2, cyClient / 100 * 2);
MoveToEx(dc, cxClient / 2, 0, NULL);
LineTo(dc, cxClient / 2 + cxClient / 100 * 2, cyClient / 100 * 2);
//название осей
SetTextColor(dc, crXYLines);
TextOut(dc, cxClient - cxClient / 100 * 2 - 30, cyClient / 2 + cyClient / 100 * 2, L"OX", 2);
TextOut(dc, cxClient / 2 + cxClient / 100 * 2.5, cyClient / 200, L"OY", 2);
TextOut(dc, cxClient - cxClient / 100 * 2 - 120, cyClient / 200 + 140, L"R=200", 5);


// рисуем график y=sin(x)

double x, y;//значений функций
int width, height;//высота, ширина делений

 //ширину области деленим на колличество делений
width = cxClient / 12;
height = cyClient / 4;

double r, f;
r = 200;
f = 0;
do
{
x = r*cos(f);
y = r*sin(f);
SetPixel(dc, x + cxClient / 2, y + cyClient / 2, crFunction);
f += 0.01;
} while (f <= 360);



SelectObject(dc, hOldPen);
DeleteObject(hPenOxy);
DeleteObject(hNew);
hold = (HFONT)SelectObject(dc, hbk);

}


void CProgramDlg::OnFilePolar2()
{
// TODO: Add your command handler code here
CClientDC dc(this);
GetClientRect(&rc);
hNew = CreateFont(28, 0, 0, 0, FW_NORMAL, 0, 0, 0, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, L"Times New Roman Cyr");
hold = (HFONT)SelectObject(dc, hNew);

dc.FillSolidRect(&rc, RGB(255, 255, 255));

cf = RGB(255, 255, 255);
ck = RGB(50, 70, 120);
SetTextColor(dc, ck);
SetBkColor(dc, cf);
msg.Format(L"Полярная");
TextOutW(dc, rc.left + 50, rc.bottom - 450, msg, msg.GetLength());
msg.Format(L"система");
TextOutW(dc, rc.left + 50, rc.bottom - 420, msg, msg.GetLength());
msg.Format(L"координат");
TextOutW(dc, rc.left + 50, rc.bottom - 390, msg, msg.GetLength());

COLORREF crFunction = RGB(230, 0, 0);//цвет графика
COLORREF crAxes = RGB(89, 89, 250);//цвет осей (линий)
COLORREF crMarks = RGB(0, 0, 160);//цвет отметок на шкале
COLORREF crXYLines = RGB(140, 70, 0);//название осей
COLORREF crDeleniya = RGB(0, 0, 165);//цвет текста


HPEN hPenOxy, hOldPen;
hPenOxy = CreatePen(PS_SOLID, 2, crAxes);//создаем кисть цветом "crOxy"
hOldPen = (HPEN)SelectObject(dc, hPenOxy);

SetTextColor(dc, crAxes);//устанавливаем цвет текста
int cxClient, cyClient;
cyClient = rc.bottom;//высота
cxClient = rc.right;//ширина

//выводим ось OX
MoveToEx(dc, 0, cyClient / 2, NULL);
LineTo(dc, cxClient, cyClient / 2);
//выводим стрелочку
MoveToEx(dc, cxClient, cyClient / 2, NULL);
LineTo(dc, cxClient - cxClient / 100 * 2, cyClient / 2 - cyClient / 100 * 2);
MoveToEx(dc, cxClient, cyClient / 2, NULL);
LineTo(dc, cxClient - cxClient / 100 * 2, cyClient / 2 + cyClient / 100 * 2);
//рисуем ось OY
MoveToEx(dc, cxClient / 2, 00, NULL);
LineTo(dc, cxClient / 2, cyClient);
//выводим стрелочку
MoveToEx(dc, cxClient / 2, 0, NULL);
LineTo(dc, cxClient / 2 - cxClient / 100 * 2, cyClient / 100 * 2);
MoveToEx(dc, cxClient / 2, 0, NULL);
LineTo(dc, cxClient / 2 + cxClient / 100 * 2, cyClient / 100 * 2);
//название осей
SetTextColor(dc, crXYLines);
TextOut(dc, cxClient - cxClient / 100 * 2 - 30, cyClient / 2 + cyClient / 100 * 2, L"OX", 2);
TextOut(dc, cxClient / 2 + cxClient / 100 * 2.5, cyClient / 200, L"OY", 2);
TextOut(dc, cxClient - cxClient / 100 * 2 - 180, cyClient / 200 + 110, L"спираль", 7);
TextOut(dc, cxClient - cxClient / 100 * 2 - 180, cyClient / 200 + 140, L"\"АРХИМЕДА\"", 10);

// рисуем график y=sin(x)

double x, y;//значений функций
int width, height;//высота, ширина делений

 //ширину области деленим на колличество делений
width = cxClient / 12;
height = cyClient / 4;

double r, f;
r = 0;
f = 0.1;
do
{
r += 0.05;
x = r*cos(f);
y = r*sin(f);
SetPixel(dc, x + cxClient / 2, y + cyClient / 2, crFunction);
f += 0.01;
} while (f <= 360);

SelectObject(dc, hOldPen);
DeleteObject(hPenOxy);
DeleteObject(hNew);
hold = (HFONT)SelectObject(dc, hbk);

}


void CProgramDlg::OnFilePolar3()
{
// TODO: Add your command handler code here
CClientDC dc(this);
GetClientRect(&rc);
hNew = CreateFont(28, 0, 0, 0, FW_NORMAL, 0, 0, 0, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, L"Times New Roman Cyr");
hold = (HFONT)SelectObject(dc, hNew);

dc.FillSolidRect(&rc, RGB(255, 255, 255));

cf = RGB(255, 255, 255);
ck = RGB(50, 70, 120);
SetTextColor(dc, ck);
SetBkColor(dc, cf);
msg.Format(L"Полярная");
TextOutW(dc, rc.left + 50, rc.bottom - 450, msg, msg.GetLength());
msg.Format(L"система");
TextOutW(dc, rc.left + 50, rc.bottom - 420, msg, msg.GetLength());
msg.Format(L"координат");
TextOutW(dc, rc.left + 50, rc.bottom - 390, msg, msg.GetLength());

COLORREF crFunction = RGB(250, 100, 50);//цвет графика
COLORREF crAxes = RGB(89, 89, 250);//цвет осей (линий)
COLORREF crMarks = RGB(0, 0, 160);//цвет отметок на шкале
COLORREF crXYLines = RGB(140, 70, 0);//название осей
COLORREF crDeleniya = RGB(0, 0, 165);//цвет текста


HPEN hPenOxy, hOldPen;
hPenOxy = CreatePen(PS_SOLID, 2, crAxes);//создаем кисть цветом "crOxy"
hOldPen = (HPEN)SelectObject(dc, hPenOxy);

SetTextColor(dc, crAxes);//устанавливаем цвет текста
int cxClient, cyClient;
cyClient = rc.bottom;//высота
cxClient = rc.right;//ширина

//выводим ось OX
MoveToEx(dc, 0, cyClient / 2, NULL);
LineTo(dc, cxClient, cyClient / 2);
//выводим стрелочку
MoveToEx(dc, cxClient, cyClient / 2, NULL);
LineTo(dc, cxClient - cxClient / 100 * 2, cyClient / 2 - cyClient / 100 * 2);
MoveToEx(dc, cxClient, cyClient / 2, NULL);
LineTo(dc, cxClient - cxClient / 100 * 2, cyClient / 2 + cyClient / 100 * 2);
//рисуем ось OY
MoveToEx(dc, cxClient / 2, 00, NULL);
LineTo(dc, cxClient / 2, cyClient);
//выводим стрелочку
MoveToEx(dc, cxClient / 2, 0, NULL);
LineTo(dc, cxClient / 2 - cxClient / 100 * 2, cyClient / 100 * 2);
MoveToEx(dc, cxClient / 2, 0, NULL);
LineTo(dc, cxClient / 2 + cxClient / 100 * 2, cyClient / 100 * 2);
//название осей
SetTextColor(dc, crXYLines);
TextOut(dc, cxClient - cxClient / 100 * 2 - 30, cyClient / 2 + cyClient / 100 * 2, L"OX", 2);
TextOut(dc, cxClient / 2 + cxClient / 100 * 2.5, cyClient / 200, L"OY", 2);
TextOut(dc, cxClient - cxClient / 100 * 2 - 120, cyClient / 200 + 140, L"k=7", 3);


// рисуем график y=sin(x)

double x, y;//значений функций
int width, height;//высота, ширина делений

 //ширину области деленим на колличество делений
width = cxClient / 12;
height = cyClient / 4;

double r, f;
int a, k;
a = 200;
k = 7;
r = 200;
f = 0.1;
do
{
r = a*sin(k*f);
x = r*cos(f);
y = r*sin(f);
SetPixel(dc, x + cxClient / 2, y + cyClient / 2, crFunction);
f += 0.01;
} while (f <= 360);



SelectObject(dc, hOldPen);
DeleteObject(hPenOxy);
DeleteObject(hNew);
hold = (HFONT)SelectObject(dc, hbk);

}


void CProgramDlg::OnFilePolar4()
{
// TODO: Add your command handler code here
CClientDC dc(this);
GetClientRect(&rc);
hNew = CreateFont(28, 0, 0, 0, FW_NORMAL, 0, 0, 0, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, L"Times New Roman Cyr");
hold = (HFONT)SelectObject(dc, hNew);

dc.FillSolidRect(&rc, RGB(255, 255, 255));

cf = RGB(255, 255, 255);
ck = RGB(50, 70, 120);
SetTextColor(dc, ck);
SetBkColor(dc, cf);
msg.Format(L"Полярная");
TextOutW(dc, rc.left + 50, rc.bottom - 450, msg, msg.GetLength());
msg.Format(L"система");
TextOutW(dc, rc.left + 50, rc.bottom - 420, msg, msg.GetLength());
msg.Format(L"координат");
TextOutW(dc, rc.left + 50, rc.bottom - 390, msg, msg.GetLength());

COLORREF crFunction = RGB(250, 100, 50);//цвет графика
COLORREF crAxes = RGB(89, 89, 250);//цвет осей (линий)
COLORREF crMarks = RGB(0, 0, 160);//цвет отметок на шкале
COLORREF crXYLines = RGB(140, 70, 0);//название осей
COLORREF crDeleniya = RGB(0, 0, 165);//цвет текста


HPEN hPenOxy, hOldPen;
hPenOxy = CreatePen(PS_SOLID, 2, crAxes);//создаем кисть цветом "crOxy"
hOldPen = (HPEN)SelectObject(dc, hPenOxy);

SetTextColor(dc, crAxes);//устанавливаем цвет текста
int cxClient, cyClient;
cyClient = rc.bottom;//высота
cxClient = rc.right;//ширина

//выводим ось OX
MoveToEx(dc, 0, cyClient / 2, NULL);
LineTo(dc, cxClient, cyClient / 2);
//выводим стрелочку
MoveToEx(dc, cxClient, cyClient / 2, NULL);
LineTo(dc, cxClient - cxClient / 100 * 2, cyClient / 2 - cyClient / 100 * 2);
MoveToEx(dc, cxClient, cyClient / 2, NULL);
LineTo(dc, cxClient - cxClient / 100 * 2, cyClient / 2 + cyClient / 100 * 2);
//рисуем ось OY
MoveToEx(dc, cxClient / 2, 00, NULL);
LineTo(dc, cxClient / 2, cyClient);
//выводим стрелочку
MoveToEx(dc, cxClient / 2, 0, NULL);
LineTo(dc, cxClient / 2 - cxClient / 100 * 2, cyClient / 100 * 2);
MoveToEx(dc, cxClient / 2, 0, NULL);
LineTo(dc, cxClient / 2 + cxClient / 100 * 2, cyClient / 100 * 2);
//название осей
SetTextColor(dc, crXYLines);
TextOut(dc, cxClient - cxClient / 100 * 2 - 30, cyClient / 2 + cyClient / 100 * 2, L"OX", 2);
TextOut(dc, cxClient / 2 + cxClient / 100 * 2.5, cyClient / 200, L"OY", 2);
TextOut(dc, cxClient - cxClient / 100 * 2 - 120, cyClient / 200 + 140, L"k=3", 3);


// рисуем график y=sin(x)

double x, y;//значений функций
int width, height;//высота, ширина делений

 //ширину области деленим на колличество делений
width = cxClient / 12;
height = cyClient / 4;

double r, f;
int a, k;
a = 200;
k = 3;
r = 200;
f = 0.1;
do
{
r = a*sin(k*f);
x = r*cos(f);
y = r*sin(f);
SetPixel(dc, x + cxClient / 2, y + cyClient / 2, crFunction);
f += 0.01;
} while (f <= 360);
SelectObject(dc, hOldPen);
DeleteObject(hPenOxy);
DeleteObject(hNew);
hold = (HFONT)SelectObject(dc, hbk);

}


void CProgramDlg::OnFilePolar5()
{
// TODO: Add your command handler code here
CClientDC dc(this);
GetClientRect(&rc);
hNew = CreateFont(28, 0, 0, 0, FW_NORMAL, 0, 0, 0, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, L"Times New Roman Cyr");
hold = (HFONT)SelectObject(dc, hNew);

dc.FillSolidRect(&rc, RGB(255, 255, 255));

cf = RGB(255, 255, 255);
ck = RGB(50, 70, 120);
SetTextColor(dc, ck);
SetBkColor(dc, cf);
msg.Format(L"Полярная");
TextOutW(dc, rc.left + 50, rc.bottom - 450, msg, msg.GetLength());
msg.Format(L"система");
TextOutW(dc, rc.left + 50, rc.bottom - 420, msg, msg.GetLength());
msg.Format(L"координат");
TextOutW(dc, rc.left + 50, rc.bottom - 390, msg, msg.GetLength());

COLORREF crFunction = RGB(250, 100, 50);//цвет графика
COLORREF crAxes = RGB(89, 89, 250);//цвет осей (линий)
COLORREF crMarks = RGB(0, 0, 160);//цвет отметок на шкале
COLORREF crXYLines = RGB(140, 70, 0);//название осей
COLORREF crDeleniya = RGB(0, 0, 165);//цвет текста


HPEN hPenOxy, hOldPen;
hPenOxy = CreatePen(PS_SOLID, 2, crAxes);//создаем кисть цветом "crOxy"
hOldPen = (HPEN)SelectObject(dc, hPenOxy);

SetTextColor(dc, crAxes);//устанавливаем цвет текста
int cxClient, cyClient;
cyClient = rc.bottom;//высота
cxClient = rc.right;//ширина

//выводим ось OX
MoveToEx(dc, 0, cyClient / 2, NULL);
LineTo(dc, cxClient, cyClient / 2);
//выводим стрелочку
MoveToEx(dc, cxClient, cyClient / 2, NULL);
LineTo(dc, cxClient - cxClient / 100 * 2, cyClient / 2 - cyClient / 100 * 2);
MoveToEx(dc, cxClient, cyClient / 2, NULL);
LineTo(dc, cxClient - cxClient / 100 * 2, cyClient / 2 + cyClient / 100 * 2);
//рисуем ось OY
MoveToEx(dc, cxClient / 2, 00, NULL);
LineTo(dc, cxClient / 2, cyClient);
//выводим стрелочку
MoveToEx(dc, cxClient / 2, 0, NULL);
LineTo(dc, cxClient / 2 - cxClient / 100 * 2, cyClient / 100 * 2);
MoveToEx(dc, cxClient / 2, 0, NULL);
LineTo(dc, cxClient / 2 + cxClient / 100 * 2, cyClient / 100 * 2);
//название осей
SetTextColor(dc, crXYLines);
TextOut(dc, cxClient - cxClient / 100 * 2 - 30, cyClient / 2 + cyClient / 100 * 2, L"OX", 2);
TextOut(dc, cxClient / 2 + cxClient / 100 * 2.5, cyClient / 200, L"OY", 2);
TextOut(dc, cxClient - cxClient / 100 * 2 - 120, cyClient / 200 + 140, L"k=5", 3);


// рисуем график y=sin(x)

double x, y;//значений функций
int width, height;//высота, ширина делений

 //ширину области деленим на колличество делений
width = cxClient / 12;
height = cyClient / 4;

double r, f;
int a, k;
a = 200;
k = 5;
r = 200;
f = 0.1;
do
{
r = a*sin(k*f);
x = r*cos(f);
y = r*sin(f);
SetPixel(dc, x + cxClient / 2, y + cyClient / 2, crFunction);
f += 0.01;
} while (f <= 360);



SelectObject(dc, hOldPen);
DeleteObject(hPenOxy);
DeleteObject(hNew);
hold = (HFONT)SelectObject(dc, hbk);

}


void CProgramDlg::OnFilePolar6()
{
// TODO: Add your command handler code here
CClientDC dc(this);
GetClientRect(&rc);
hNew = CreateFont(28, 0, 0, 0, FW_NORMAL, 0, 0, 0, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, L"Times New Roman Cyr");
hold = (HFONT)SelectObject(dc, hNew);

dc.FillSolidRect(&rc, RGB(255, 255, 255));

cf = RGB(255, 255, 255);
ck = RGB(50, 70, 120);
SetTextColor(dc, ck);
SetBkColor(dc, cf);
msg.Format(L"Полярная");
TextOutW(dc, rc.left + 50, rc.bottom - 450, msg, msg.GetLength());
msg.Format(L"система");
TextOutW(dc, rc.left + 50, rc.bottom - 420, msg, msg.GetLength());
msg.Format(L"координат");
TextOutW(dc, rc.left + 50, rc.bottom - 390, msg, msg.GetLength());

COLORREF crFunction = RGB(250, 100, 50);//цвет графика
COLORREF crAxes = RGB(89, 89, 250);//цвет осей (линий)
COLORREF crMarks = RGB(0, 0, 160);//цвет отметок на шкале
COLORREF crXYLines = RGB(140, 70, 0);//название осей
COLORREF crDeleniya = RGB(0, 0, 165);//цвет текста


HPEN hPenOxy, hOldPen;
hPenOxy = CreatePen(PS_SOLID, 2, crAxes);//создаем кисть цветом "crOxy"
hOldPen = (HPEN)SelectObject(dc, hPenOxy);

SetTextColor(dc, crAxes);//устанавливаем цвет текста
int cxClient, cyClient;
cyClient = rc.bottom;//высота
cxClient = rc.right;//ширина

//выводим ось OX
MoveToEx(dc, 0, cyClient / 2, NULL);
LineTo(dc, cxClient, cyClient / 2);
//выводим стрелочку
MoveToEx(dc, cxClient, cyClient / 2, NULL);
LineTo(dc, cxClient - cxClient / 100 * 2, cyClient / 2 - cyClient / 100 * 2);
MoveToEx(dc, cxClient, cyClient / 2, NULL);
LineTo(dc, cxClient - cxClient / 100 * 2, cyClient / 2 + cyClient / 100 * 2);
//рисуем ось OY
MoveToEx(dc, cxClient / 2, 00, NULL);
LineTo(dc, cxClient / 2, cyClient);
//выводим стрелочку
MoveToEx(dc, cxClient / 2, 0, NULL);
LineTo(dc, cxClient / 2 - cxClient / 100 * 2, cyClient / 100 * 2);
MoveToEx(dc, cxClient / 2, 0, NULL);
LineTo(dc, cxClient / 2 + cxClient / 100 * 2, cyClient / 100 * 2);
//название осей
SetTextColor(dc, crXYLines);
TextOut(dc, cxClient - cxClient / 100 * 2 - 30, cyClient / 2 + cyClient / 100 * 2, L"OX", 2);
TextOut(dc, cxClient / 2 + cxClient / 100 * 2.5, cyClient / 200, L"OY", 2);
TextOut(dc, cxClient - cxClient / 100 * 2 - 120, cyClient / 200 + 140, L"k=128", 5);


// рисуем график y=sin(x)

double x, y;//значений функций
int width, height;//высота, ширина делений

 //ширину области деленим на колличество делений
width = cxClient / 12;
height = cyClient / 4;

double r, f;
int a, k;
a = 200;
k = 128;
r = 200;
f = 0.1;
do
{
r = a*sin(k*f);
x = r*cos(f);
y = r*sin(f);
SetPixel(dc, x + cxClient / 2, y + cyClient / 2, crFunction);
f += 0.01;
} while (f <= 360);



SelectObject(dc, hOldPen);
DeleteObject(hPenOxy);
DeleteObject(hNew);
hold = (HFONT)SelectObject(dc, hbk);

}


void CProgramDlg::OnFilePolar7()
{
// TODO: Add your command handler code here
CClientDC dc(this);
GetClientRect(&rc);
hNew = CreateFont(28, 0, 0, 0, FW_NORMAL, 0, 0, 0, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, L"Times New Roman Cyr");
hold = (HFONT)SelectObject(dc, hNew);

dc.FillSolidRect(&rc, RGB(255, 255, 255));

cf = RGB(255, 255, 255);
ck = RGB(50, 70, 120);
SetTextColor(dc, ck);
SetBkColor(dc, cf);
msg.Format(L"Полярная");
TextOutW(dc, rc.left + 50, rc.bottom - 450, msg, msg.GetLength());
msg.Format(L"система");
TextOutW(dc, rc.left + 50, rc.bottom - 420, msg, msg.GetLength());
msg.Format(L"координат");
TextOutW(dc, rc.left + 50, rc.bottom - 390, msg, msg.GetLength());

COLORREF crFunction = RGB(250, 100, 50);//цвет графика
COLORREF crAxes = RGB(89, 89, 250);//цвет осей (линий)
COLORREF crMarks = RGB(0, 0, 160);//цвет отметок на шкале
COLORREF crXYLines = RGB(140, 70, 0);//название осей
COLORREF crDeleniya = RGB(0, 0, 165);//цвет текста


HPEN hPenOxy, hOldPen;
hPenOxy = CreatePen(PS_SOLID, 2, crAxes);//создаем кисть цветом "crOxy"
hOldPen = (HPEN)SelectObject(dc, hPenOxy);

SetTextColor(dc, crAxes);//устанавливаем цвет текста
int cxClient, cyClient;
cyClient = rc.bottom;//высота
cxClient = rc.right;//ширина

//выводим ось OX
MoveToEx(dc, 0, cyClient / 2, NULL);
LineTo(dc, cxClient, cyClient / 2);
//выводим стрелочку
MoveToEx(dc, cxClient, cyClient / 2, NULL);
LineTo(dc, cxClient - cxClient / 100 * 2, cyClient / 2 - cyClient / 100 * 2);
MoveToEx(dc, cxClient, cyClient / 2, NULL);
LineTo(dc, cxClient - cxClient / 100 * 2, cyClient / 2 + cyClient / 100 * 2);
//рисуем ось OY
MoveToEx(dc, cxClient / 2, 00, NULL);
LineTo(dc, cxClient / 2, cyClient);
//выводим стрелочку
MoveToEx(dc, cxClient / 2, 0, NULL);
LineTo(dc, cxClient / 2 - cxClient / 100 * 2, cyClient / 100 * 2);
MoveToEx(dc, cxClient / 2, 0, NULL);
LineTo(dc, cxClient / 2 + cxClient / 100 * 2, cyClient / 100 * 2);
//название осей
SetTextColor(dc, crXYLines);
TextOut(dc, cxClient - cxClient / 100 * 2 - 30, cyClient / 2 + cyClient / 100 * 2, L"OX", 2);
TextOut(dc, cxClient / 2 + cxClient / 100 * 2.5, cyClient / 200, L"OY", 2);
TextOut(dc, cxClient - cxClient / 100 * 2 - 150, cyClient / 200 + 140, L"КАРДИОИДА", 9);


// рисуем график y=sin(x)

double x, y;//значений функций
int width, height;//высота, ширина делений

 //ширину области деленим на колличество делений
width = cxClient / 12;
height = cyClient / 4;

double e, r, f;
int a, b, k;
a = 90;
b = 70;
k = 82;
e = a / b;
r = 200;
f = 0;
do
{
x = (b + e*b)*cos(e*f) - k*cos(f + e*f);
y = (b + e*b)*sin(e*f) - k*sin(f + e*f);
SetPixel(dc, x + cxClient / 2, y + cyClient / 2, crFunction);
f += 0.01;
} while (f <= 360);



SelectObject(dc, hOldPen);
DeleteObject(hPenOxy);
DeleteObject(hNew);
hold = (HFONT)SelectObject(dc, hbk);

}


void CProgramDlg::OnFileSinx()
{
// TODO: Add your command handler code here
CClientDC dc(this);
GetClientRect(&rc);
hNew = CreateFont(28, 0, 0, 0, FW_NORMAL, 0, 0, 0, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, L"Times New Roman Cyr");
hold = (HFONT)SelectObject(dc, hNew);

dc.FillSolidRect(&rc, RGB(255, 255, 255));
msg.Format(L"График тригонометрической функции");
cf = RGB(255, 255, 255);
ck = RGB(50, 70, 120);
SetTextColor(dc, ck);
SetBkColor(dc, cf);
TextOutW(dc, rc.left + 150, rc.bottom - 450, msg, msg.GetLength());



COLORREF crFunction = RGB(190, 0, 0);//цвет графика
COLORREF crAxes = RGB(89, 89, 250);//цвет осей (линий)
COLORREF crMarks = RGB(0, 0, 160);//цвет отметок на шкале
COLORREF crXYLines = RGB(140, 70, 0);//название осей
COLORREF crDeleniya = RGB(0, 0, 165);//цвет текста


HPEN hPenOxy, hOldPen;
hPenOxy = CreatePen(PS_SOLID, 2, crAxes);//создаем кисть цветом "crOxy"
hOldPen = (HPEN)SelectObject(dc, hPenOxy);

SetTextColor(dc, crAxes);//устанавливаем цвет текста
int cxClient, cyClient;
cyClient = rc.bottom;//высота
cxClient = rc.right;//ширина

//выводим ось OX
MoveToEx(dc, 0, cyClient / 2, NULL);
LineTo(dc, cxClient, cyClient / 2);
//выводим стрелочку
MoveToEx(dc, cxClient, cyClient / 2, NULL);
LineTo(dc, cxClient - cxClient / 100 * 2, cyClient / 2 - cyClient / 100 * 2);
MoveToEx(dc, cxClient, cyClient / 2, NULL);
LineTo(dc, cxClient - cxClient / 100 * 2, cyClient / 2 + cyClient / 100 * 2);
//рисуем ось OY
MoveToEx(dc, cxClient / 2, 50, NULL);
LineTo(dc, cxClient / 2, cyClient);
//выводим стрелочку
MoveToEx(dc, cxClient / 2, 50, NULL);
LineTo(dc, cxClient / 2 - cxClient / 100 * 2, cyClient / 100 * 2 + 50);
MoveToEx(dc, cxClient / 2, 50, NULL);
LineTo(dc, cxClient / 2 + cxClient / 100 * 2, cyClient / 100 * 2 + 50);
//название осей
SetTextColor(dc, crXYLines);
TextOut(dc, cxClient - cxClient / 100 * 2 - 30, cyClient / 2 + cyClient / 100 * 2, L"OX", 2);
TextOut(dc, cxClient / 2 + cxClient / 100 * 2.5, cyClient / 200 + 50, L"OY", 2);
TextOut(dc, cxClient - cxClient / 100 * 2 - 120, cyClient / 200 + 140, L"y=sin(x)", 8);


// рисуем график y=sin(x)
double Xmin;//минимальный Х
double Xmax;//максимальны Х
double x, y;//значений функций
int width, height;//высота, ширина делений

Xmin = -2 * PI;
Xmax = 2 * PI;

//ширину области деленим на колличество делений
width = cxClient / 12;
height = cyClient / 4;

for (x = Xmin; x <= Xmax; x += 0.001)
{
y = -sin(x);//минус так как ось У направлена вниз
SetPixel(dc, width*x + cxClient / 2, height*y + cyClient / 2, crFunction);

//width* - коэф. для оси Х
//height* - коэф. для оси У
}


SelectObject(dc, hOldPen);
DeleteObject(hPenOxy);
DeleteObject(hNew);
hold = (HFONT)SelectObject(dc, hbk);

}


void CProgramDlg::OnFileCosx()
{
// TODO: Add your command handler code here
CClientDC dc(this);
GetClientRect(&rc);
hNew = CreateFont(28, 0, 0, 0, FW_NORMAL, 0, 0, 0, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, L"Times New Roman Cyr");
hold = (HFONT)SelectObject(dc, hNew);

dc.FillSolidRect(&rc, RGB(255, 255, 255));
msg.Format(L"График тригонометрической функции");
cf = RGB(255, 255, 255);
ck = RGB(50, 70, 120);
SetTextColor(dc, ck);
SetBkColor(dc, cf);
TextOutW(dc, rc.left + 150, rc.bottom - 450, msg, msg.GetLength());



COLORREF crFunction = RGB(0, 190, 0);//цвет графика
COLORREF crAxes = RGB(89, 89, 250);//цвет осей (линий)
COLORREF crMarks = RGB(0, 0, 160);//цвет отметок на шкале
COLORREF crXYLines = RGB(140, 70, 0);//название осей
COLORREF crDeleniya = RGB(0, 0, 165);//цвет текста


HPEN hPenOxy, hOldPen;
hPenOxy = CreatePen(PS_SOLID, 2, crAxes);//создаем кисть цветом "crOxy"
hOldPen = (HPEN)SelectObject(dc, hPenOxy);

SetTextColor(dc, crAxes);//устанавливаем цвет текста
int cxClient, cyClient;
cyClient = rc.bottom;//высота
cxClient = rc.right;//ширина

//выводим ось OX
MoveToEx(dc, 0, cyClient / 2, NULL);
LineTo(dc, cxClient, cyClient / 2);
//выводим стрелочку
MoveToEx(dc, cxClient, cyClient / 2, NULL);
LineTo(dc, cxClient - cxClient / 100 * 2, cyClient / 2 - cyClient / 100 * 2);
MoveToEx(dc, cxClient, cyClient / 2, NULL);
LineTo(dc, cxClient - cxClient / 100 * 2, cyClient / 2 + cyClient / 100 * 2);
//рисуем ось OY
MoveToEx(dc, cxClient / 2, 50, NULL);
LineTo(dc, cxClient / 2, cyClient);
//выводим стрелочку
MoveToEx(dc, cxClient / 2, 50, NULL);
LineTo(dc, cxClient / 2 - cxClient / 100 * 2, cyClient / 100 * 2 + 50);
MoveToEx(dc, cxClient / 2, 50, NULL);
LineTo(dc, cxClient / 2 + cxClient / 100 * 2, cyClient / 100 * 2 + 50);
//название осей
SetTextColor(dc, crXYLines);
TextOut(dc, cxClient - cxClient / 100 * 2 - 30, cyClient / 2 + cyClient / 100 * 2, L"OX", 2);
TextOut(dc, cxClient / 2 + cxClient / 100 * 2.5, cyClient / 200 + 50, L"OY", 2);
TextOut(dc, cxClient - cxClient / 100 * 2 - 120, cyClient / 200 + 140, L"y=cos(x)", 8);


// рисуем график y=sin(x)
double Xmin;//минимальный Х
double Xmax;//максимальны Х
double x, y;//значений функций
int width, height;//высота, ширина делений

Xmin = -2 * PI;
Xmax = 2 * PI;

//ширину области деленим на колличество делений
width = cxClient / 12;
height = cyClient / 4;

for (x = Xmin; x <= Xmax; x += 0.001)
{
y = -cos(x);//минус так как ось У направлена вниз
SetPixel(dc, width*x + cxClient / 2, height*y + cyClient / 2, crFunction);

//width* - коэф. для оси Х
//height* - коэф. для оси У
}


SelectObject(dc, hOldPen);
DeleteObject(hPenOxy);
DeleteObject(hNew);
hold = (HFONT)SelectObject(dc, hbk);


}

Зберігаємо програму і запускаємо локальний відладчик








В результаті, у нас виходить ось така програма:


















Дякую за увагу!

Немає коментарів:

Дописати коментар