Программа "Фигуры на полярной системе координат"
Сегодня я представляю вам обновленную программу про построение фигур на полярной системе кординат.
Начнем
В этой программе расписаны основные формулы построения фигур в полярной системе координат на С++. Ниже представлены рисунки и формулы.
Более подробно тут.
Открываем VisualStudio и создаем планшутку MFC Application с стандартными настройками и назовем ее Progamm.
Далее заходим в ProgramDlg.h.
Заменяем раздел private: на тот который находится ниже:
private:
HFONT hold,hNew,hbk;
CString msg;
CRect rc;
CRect rt;
int RH,RW;
POINT p;
COLORREF cf,c;
bool f;
Заходим в Resource View далее открываем вкладку Dialog и клацаем по ней ПКМ , вібираем Add Resourse --> Menu --> New , и заполняем меня так, как показано ниже
Далее в свойствах планшетки в трочке меню , выбираем то которое мы создали ( IDR_MENU1)
Клацаем по разделу меню КРУГ и выбираем Add Event Handler
Выбираем CProgrammDlg и нажимаем Add and Edit
После чего вставляем код рисования картинки который находится ниже:
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);
c = RGB(50, 70, 120);
SetTextColor(dc, c);
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);
Тоже самое проделываем с другими пунктами меню и вписываем определенно к каждому названию :
СПИРАЛЬ
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);
c=RGB(50,70,120);
SetTextColor(dc,c);
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);
КАРДИОИДА
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);
c=RGB(50,70,120);
SetTextColor(dc,c);
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);
129 ТОЧЕК
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);
c=RGB(50,70,120);
SetTextColor(dc,c);
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=129",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);
3 ЛЕПЕСТКА
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);
c=RGB(50,70,120);
SetTextColor(dc,c);
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);
5 ЛЕПЕСТКОВ
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);
c=RGB(50,70,120);
SetTextColor(dc,c);
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);
7 ЛЕПЕСТКОВ
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);
c=RGB(50,70,120);
SetTextColor(dc,c);
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);
Добавляем в меню два новых подменю как на картинке и добовляем обработчик событий для них.
Теперь вставим коды рисования для синуса и косинуса!
СИНУС
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);
КОСИНУС
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);
Теперь сделаем что бы при запуске высвечивалась вот такая фигура:
Поднимаемся выше в блок OnPaint --> ветка 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);
Наша программа готова!!!
Скачать программу - скачать!
Все программы - здесь!
Комментариев нет:
Отправить комментарий