МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
/
ЗВІТ
До лабораторної роботи №2
З курсу :”Комп’ютерна графіка”
На тему:
“ ПОБУДОВА ГРАФІКІВ ФУНКЦІЙ ”
Львів 2014
Мета роботи - набути практичних навиків в складанні програм для побудови графіків.
ЗАВДАННЯ
Написати програму, яка будує в середині екрану систему координат XY і на ній графік функції Y=F(X), якщо аргумент або параметр змінюється на проміжку [а;Ь] з кроком h.
/
Блок-схема:
СПИСОК ФУНКЦІЙ ВИКОРИСТАНИХ В ПРОГРАМІ
for()-цикл.
MovcTo(int x, int у) - переміщує поточну вершину, jc, у визначають координати нової поточної вершини. Повертає х- та y-координати попередньої поточної вершини як CPoint об’єкт.
LineTo(int x, int y )- малює лінію з поточної вершини до вершини з координатами лс, у. Поточна вершина переміщується у вершину з координатами jc, у.
CreatePen(int nPenStyle, int пWidth, COLORREF crColor) - ініціалізує перо заданими атрибутами.
TextOutW(int х, int у, const CString& str) - виводить стрічку на екран. х,у задають координати початкової вершини виведення тексту, str об’єкт типу CString, який містить текст для виведення.
kx, ky – змінні коефіціентів перетворення;
dXmash,dYmash- різниця мінімальних і максимальних координат;
Xmash, Ymash – машинні координати;
dXreal, dYreal - реальні координати;
t – інтервал;
xmax, xmin, ymax, ymin, xmin, xmax, ymin, ymax – мінімальні і максимальні значення функції;
xc, yc – координати центру екрану;
ТЕКСТ ПРОГРАМИ:
#include "stdafx.h"
#include "PKG lab_2.h"
#include "ChildView.h"
#include"math.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
CChildView::CChildView()
{
}
CChildView::~CChildView()
{
}
BEGIN_MESSAGE_MAP(CChildView, CWnd)
ON_WM_PAINT()
END_MESSAGE_MAP()
BOOL CChildView::PreCreateWindow(CREATESTRUCT& cs)
{
if (!CWnd::PreCreateWindow(cs))
return FALSE;
cs.dwExStyle |= WS_EX_CLIENTEDGE;
cs.style &= ~WS_BORDER;
cs.lpszClass = AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS,
::LoadCursor(NULL, IDC_ARROW), reinterpret_cast<HBRUSH>(COLOR_WINDOW+1),
return TRUE;
}
void CChildView::OnPaint()
{
CPaintDC dc(this); // контекст устройства для рисования
double i, t, dXreal, dYreal, Kx, Ky, Xmash, Ymash, dXmash=900, dYmash=500, X0mash=640, Y0mash=400, Xmax=-10000, Xmin=10000, Ymax=-10000, Ymin=10000, h=0.5, X, Y;
for (t=-100; t<=100; t=t+h)
{
X=90*cos(t)*sqrt(abs(cos(2*t)));
Y=90*sin(t)*sqrt(abs(cos(2*t)));
if (Xmax<X)
Xmax=X;
if (Xmin>X)
Xmin=X;
if (Ymax<Y)
Ymax=Y;
if (Ymin>Y)
Ymin=Y;
}
dXreal=Xmax-Xmin;
dYreal=Ymax-Ymin;
Kx=dXmash/dXreal;
Ky=dYmash/dYreal;
Xmash=X0mash+X*Kx;
Ymash=Y0mash-Y*Ky;
dc.MoveTo (X0mash-720, Y0mash);
dc.LineTo (X0mash+720, Y0mash);
dc.MoveTo (X0mash+720, Y0mash);
dc.LineTo (X0mash+715, Y0mash-5);
dc.MoveTo (X0mash+720, Y0mash);
dc.LineTo (X0mash+715, Y0mash+5);
dc.MoveTo (X0mash, Y0mash-400);
dc.LineTo (X0mash, Y0mash+400);
dc.MoveTo (X0mash, Y0mash-400);
dc.LineTo (X0mash-5, Y0mash-395);
dc.MoveTo (X0mash, Y0mash-400);
dc.LineTo (X0mash+5, Y0mash-395);
t=-100;
X=90*cos(t)*sqrt(abs(cos(2*t)));
Y=90*sin(t)*sqrt(abs(cos(2*t)));
Xmash=X0mash+X*Kx;
Ymash=Y0mash-Y*Ky;
dc.MoveTo (Xmash, Ymash);
CPen red_pen;
red_pen.CreatePen (PS_SOLID, 2, RGB (255, 0, 0));
dc.SelectObject(&red_pen);
for (t=-100; t<=100; t=t+h)
{
X=90*cos(t)*sqrt(abs(cos(2*t)));
Y=90*sin(t)*sqrt(abs(cos(2*t)));
Xmash=X0mash+X*Kx;
Ymash=Y0mash-Y*Ky;
dc.LineTo (Xmash, Ymash);
}
CPen black;
black.CreatePen (PS_SOLID, 1, RGB (0, 0, 0));
dc.SelectObject(&black);
for (i=-120; i<=120; i=i+20)
{
dc.MoveTo (X0mash+i*Kx, Y0mash-3);
dc.LineTo (X0mash+i*Kx, Y0mash+3);
}
for (i=-120; i<=120; i=i+20)
{
dc.MoveTo (X0mash-3, Y0mash+i*Ky);
dc.LineTo (X0mash+3, Y0mash+i*Ky);
}
const CString X0("0");
dc.TextOutW(X0mash-10,Y0mash+10, X0);
const CString X1("-160");
dc.TextOutW(X0mash-165*Kx,Y0mash+10, X1);
const CString X2("-140");
dc.TextOutW(X0mash-145*Kx,Y0mash+10, X2);
const CString X3("-120");
dc.TextOutW(X0mash-125*Kx,Y0mash+10, X3);
const CString X4("-100");
dc.TextOutW(X0mash-105*Kx,Y0mash+10, X4);
const CString X5("-80");
dc.TextOutW(X0mash-85*Kx,Y0mash+10, X5);
const CString X6("-60");
dc.TextOutW(X0mash-65*Kx,Y0mash+10, X6);
const CString X7("-40");
dc.TextOutW(X0mash-45*Kx,Y0mash+10, X7);
const CString X8("-20");
dc.TextOutW(X0mash-25*Kx,Y0mash+10, X8);
const CString X9("20");
dc.TextOutW(X0mash+15*Kx,Y0mash+10, X9);
const CString X10("40");
dc.TextOutW(X0mash+35*Kx,Y0mash+10, X10);
const CString X11("60");
dc.TextOutW(X0mash+55*Kx,Y0mash+10, X11);
const CString X12("80");
dc.TextOutW(X0mash+75*Kx,Y0mash+10, X12);
const CString X13("100");
dc.TextOutW(X0mash+95*Kx,Y0mash+10, X13);
const CString X14("120");
dc.TextOutW(X0mash+115*Kx,Y0mash+10, X14);
const CString X15("140");
dc.TextOutW(X0mash+135*Kx,Y0mash+10, X15);
const CString X16("160");
dc.TextOutW(X0mash+155*Kx,Y0mash+10, X16);
const CString Xx("X");
dc.TextOutW(X0mash+700,Y0mash+10, Xx);
const CString Yy("Y");
dc.TextOutW(X0mash-20,Y0mash-400, Yy);
const CString Y1("140");
dc.TextOutW(X0mash+10,Y0mash-145*Ky, Y1);
const CString Y2("120");
dc.TextOutW(X0mash+10,Y0mash-125*Ky, Y2);
const CString Y3("100");
dc.TextOutW(X0mash+10,Y0mash-105*Ky, Y3);
const CString Y4("80");
dc.TextOutW(X0mash+10,Y0mash-85*Ky, Y4);
const CString Y5("60");
dc.TextOutW(X0mash+10,Y0mash-65*Ky, Y5);
const CString Y6("40");
dc.TextOutW(X0mash+10,Y0mash-45*Ky, Y6);
const CString Y7("20");
dc.TextOutW(X0mash+10,Y0mash-25*Ky, Y7);
const CString Y8("-20");
dc.TextOutW(X0mash+10,Y0mash+15*Ky, Y8);
const CString Y9("-40");
dc.TextOutW(X0mash+10,Y0mash+35*Ky, Y9);
const CString Y10("-60");
dc.TextOutW(X0mash+10,Y0mash+55*Ky, Y10);
const CString Y11("-80");
dc.TextOutW(X0mash+10,Y0mash+75*Ky, Y11);
}
Результат програми
/
Висновок: під час лабораторної роботи я набув практичних навиків в складанні програм для побудови графіків.