Автор работы: Пользователь скрыл имя, 27 Февраля 2011 в 18:18, курсовая работа
Разработатка программы для построения изображения фигуры, приведенной на рисунке. Исходные данные (x1,y1,R1,x2,y2,r2,x3,y3,r3) должны быть считаны из выбранного пользователем файла. Осуществлять проверку исходных данных на соответствие варианту (две окружности находятся внутри третьей).
1. Постановка задачи и исходные данные….………………….…………………..…3
2. Математическое обеспечение ……………………………………..…………….…4
3. Описание работы программы и полученные результаты при решении поставленной задачи ….………………………………………...………..……..……..5
4. Разработка алгоритма программы в виде блок-схемы……………………...…….8
5. Краткое описание возможностей среды программирования
Microsoft Visual C++………..………….………………………………...…………….9
6. Выводы………………………………….……………………….…………….……14
7. Список используемой литературы…….…………………………………………..15
8. Приложение А………………….…………………………………………….……..16
{
CDialog::OnSize(
this->RedrawWindow();
}
// функция OnSize вызывается при всяком изменении размера окна
void CMyDlg::OnBtnUpdate()
{
if(k_filePath.
if(!k_Draw.
this->
this->RedrawWindow();
}
Рисование
#include "StdAfx.h"
#include "Draw.h"
#include
<Math.h>
inline
int sqrt(int arg){return (int)sqrt((double) (arg)); }
CDraw::CDraw(void):
isCorrectState(false)
{
}
CDraw::~CDraw(void)
{
}
bool CDraw::LoadParamFromFile(const TCHAR* path)
{
CStdioFile file;
if(!file.Open(path, CStdioFile::modeRead
| CStdioFile::typeText))return false;
CString strs[9];
for(int i = 0; i < 9; i++)
{
if(!file.
{
file.
return false;
}
}
int i = 0;
X1 = _tstoi(strs[i++].GetString());
Y1 = _tstoi(strs[i++].GetString());
R1 = _tstoi(strs[i++].GetString());
x2 = _tstoi(strs[i++].GetString());
y2 = _tstoi(strs[i++].GetString());
r2 = _tstoi(strs[i++].GetString());
x3 = _tstoi(strs[i++].GetString());
y3 = _tstoi(strs[i++].GetString());
r3 = _tstoi(strs[i++].GetString());
//test
isCorrectState =
(R1 > 0) &&
(R1 > 2*r2) && (R1 > 2*r3) &&
((x2 - r2) > x3) &&
sqrt((x2 - X1)*(x2 - X1) + (y2 - Y1)*(y2 - Y1)) + r2 < R1 &&
sqrt((x3 - X1)*(x3 - X1) + (y3 - Y1)*(y3
- Y1)) + r3 < R1 ;
return isCorrectState;
}
bool CDraw::Draw(CPaintDC* pDC)
{
if(!isCorrectState)
RECT cr;
pDC->GetWindow()->
int x0 = (cr.right - cr.left) /2;
int y0 = (cr.bottom - cr.top) / 2;
pDC->Rectangle(&cr);
pDC->MoveTo(x0, cr.top);
pDC->LineTo(x0, cr.bottom);
pDC->MoveTo(cr.left,
pDC->LineTo(cr.right,
CRect r;
r.SetRect(X1 - R1, -(Y1 - R1), X1 + R1, -(Y1 + R1));
r.OffsetRect(x0, y0);
pDC->Arc(&r, CPoint(r.left,
r.top), CPoint(r.left, r.top));
pDC->MoveTo(x2 + x0, r.top + 10);
pDC->LineTo(x2 + x0, r.bottom -
10);
pDC->MoveTo(x3 + x0, r.top + 10);
pDC->LineTo(x3 + x0, r.bottom -
10);
r.SetRect(x2 - r2, -(y2 - r2), x2 + r2, -(y2 + r2));
r.OffsetRect(x0, y0);
pDC->Arc(&r, CPoint(r.left,
r.top), CPoint(r.left, r.top));
r.SetRect(x3 - r3, -(y3 - r3), x3 + r3, -(y3 + r3));
r.OffsetRect(x0, y0);
pDC->Arc(&r, CPoint(r.left,
r.top), CPoint(r.left, r.top));
CPen pen(PS_SOLID, 7, (COLORREF)(0));
CPen* penLast = pDC->SelectObject(&pen);
pDC->MoveTo(X1 + x0, -Y1 + y0);
pDC->LineTo(X1 + x0, -Y1 + y0);
pDC->MoveTo(x2 + x0, -y2 + y0);
pDC->LineTo(x2 + x0, -y2 + y0);
pDC->MoveTo(x3 + x0, -y3 + y0);
pDC->LineTo(x3 + x0, -y3 + y0);
r.SetRect(x2 - r2, -(y2 - r2), x2 + r2, -(y2 + r2));
r.OffsetRect(x0, y0);
pDC->Arc(&r, CPoint(r.CenterPoint().x,
r.bottom), CPoint(r.CenterPoint().x, r.top));
r.SetRect(x3 - r3, -(y3 - r3), x3 + r3, -(y3 + r3));
r.OffsetRect(x0, y0);
pDC->Arc(&r, CPoint(r.CenterPoint().x,
r.bottom), CPoint(r.CenterPoint().x, r.top));
//rb
int lu = Y1 + sqrt(R1*R1 - (X1 - x3)*(X1 - x3));
int ru = Y1 + sqrt(R1*R1 - (x2 - X1)*(x2 - X1));
int rd = Y1 -(ru - Y1);
int ld = Y1 -(lu - Y1);
pDC->MoveTo(x2 + x0, -(y2 - r2) + y0);
pDC->LineTo(x2 + x0, -rd + y0);
pDC->MoveTo(x2 + x0, -(y2 + r2) + y0);
pDC->LineTo(x2 + x0, -ru + y0);
pDC->MoveTo(x3 + x0, -(y3 - r3) + y0);
pDC->LineTo(x3 + x0, -ld + y0);
pDC->MoveTo(x3 + x0, -(y3 + r3) + y0);
pDC->LineTo(x3 + x0, -lu + y0);
r.SetRect(X1 - R1, -(Y1 - R1), X1 + R1, -(Y1 + R1));
r.OffsetRect(x0, y0);
pDC->Arc(&r, CPoint(x3 + x0, -ld + y0), CPoint(x2 + x0, -rd + y0));
pDC->Arc(&r, CPoint(x2 + x0,
-ru + y0), CPoint(x3 + x0, -lu + y0));
pDC->SelectObject(
//CRect rto = cr;
//rto.right -= 10;
//rto.bottom -= 10;
//pDC->SetTextColor(
//pDC->SetBkColor(
//pDC->DrawText(_T("
return true;
}