Построить множество точек на плоскости

Автор: Пользователь скрыл имя, 09 Ноября 2011 в 00:39, курсовая работа

Описание работы

Первоначальное понятие о геометрической симметрии как о гармонии пропорций, как о «соразмерности», что и означает в переводе с греческого слово «симметрия», с течением времени приобрело универсальный характер и было осознано как всеобщая идея инвариантности (т. е. неизменности) относительно некоторых преобразований. Таким образом, геометрический объект или физическое явление считаются симметричными, если с ними можно сделать что-то такое, после чего они останутся неизменными

Содержание

Введение…………………………………………………………………..6
1.Теоретическая часть……………………………………………………7
2.Практическая часть…………………………………………………….11
Заключение……………………………………………………………….13
Список литературы………

Работа содержит 1 файл

Пояснительня записка.doc

— 272.00 Кб (Скачать)

{

      a=pnt[2].y-pnt[1].y;

      b=pnt[1].x-pnt[2].x;

      c=pnt[1].y*pnt[2].x-pnt[1].x*pnt[2].y;

      a1=-b; b1=a;  alfa=atan2(a,b);

      for(int k=0;k<i;k++)

      {

            c1=b*p[k].x-a*p[k].y;

            d=a*p[k].x+b*p[k].y+c;

            if(int(alfa)>2||int(alfa)<-2)

            {

                  ps[k].y=((c1*a/a1)-c-d)/(b-a*b1/a1);//vertical

                  ps[k].x=(-b1*ps[k].y-c1)/a1;

            }

            else

            {

                  ps[k].x=((c1*b/b1)-c-d)/(a-a1*b/b1);//horiz

                  ps[k].y=(-a1*ps[k].x-c1)/b1;

            }

      }

      CPen pen1(PS_SOLID,3,RGB(90,255,90));

      CPen pen2(PS_SOLID,3,RGB(225,0,255));

      CPen pen3(PS_SOLID,3,RGB(0,10,10));

      pDC->SelectObject(&pen1);

      if(!count)

      {

            pDC->TextOut(65,10,"Программа строит множество точек, симметричных");

            pDC->TextOut(30,30," заданному множеству относительно прямой  ax+by+c=0");

            pDC->TextOut(150,90,"Задайте прямую двумя щелчками ЛКМ!");

      }

      if(count==1) 

            pDC->Ellipse(pnt[1].x-1.5,pnt[1].y-1.5,pnt[1].x+1.5,pnt[1].y+1.5);

      if(count>1)

      {

            pDC->TextOut(30,10,"Задайте  точки щелчком ЛКМ!");

            if(int(b)!=0)

            {

                  if(int(a)!=0)

                  {

                        pDC -> MoveTo(-c/a,0);

                        pDC -> LineTo(1000,(-c-a*1000)/b);

                        pDC -> LineTo(-1000,(-c+a*1000)/b);

                  }

            

                  if(a==0)

                  {

                pDC -> MoveTo(pnt[1].x, pnt[1].y);

                        pDC -> LineTo(pnt[1].x-1000, pnt[1].y);

                        pDC -> MoveTo(pnt[1].x, pnt[1].y);

                        pDC -> LineTo(pnt[2].x, pnt[2].y);

                        pDC -> MoveTo(pnt[2].x, pnt[2].y);

                        pDC -> LineTo(pnt[2].x+1000, pnt[2].y);

                  }

                  if(b==0)

                  {

                  pDC -> MoveTo(pnt[1].x, pnt[1].y);

                        pDC -> LineTo(pnt[1].x, pnt[1].y-1000);

                        pDC -> MoveTo(pnt[1].x, pnt[1].y);

                        pDC -> LineTo(pnt[2].x, pnt[2].y);

                        pDC -> MoveTo(pnt[2].x, pnt[2].y);

                        pDC -> LineTo(pnt[2].x, pnt[2].y+1000);

                  }

      }

      if(count>2)

      {

            if(dlg.m_radio==0)OnFiguraFreehand();

            if(dlg.m_radio==1)OnFiguraCircle();

            if(dlg.m_radio==2)OnFiguraTreeangle();

            if(dlg.m_radio==3)Randomi();

            if(dlg.m_radio==4) Chet();

      }

}

2.void CXYView::OnLButtonDown(UINT nFlags, CPoint point)

{

      count++;

      CClientDC *pDC = new CClientDC(this);

      CPen pen(PS_SOLID,2,RGB(0,0,127));

      pDC->SelectObject(&pen);

      if(count==1) 

            pnt[1]=pnt[2]=point;pDC->SelectObject(&pen);

      if(count==2)

      {

            pnt[2] = point;

            if((pnt[2].x<=pnt[1].x+1 && pnt[2].x>=pnt[1].x-1)&&((pnt[2].y<=pnt[1].y+1 && pnt[2].y>=pnt[1].y-1)))

            {count--;MessageBox("Задайте точку, не совпадающую с данной","Совпадение точек",MB_ICONQUESTION);}

      }

      if(count==2)

      {

            OnDraw(pDC);  dlg.DoModal();

      }

      if(count>1)  p[i++]=point;

      Invalidate();

}

3. void CXYView::OnFileNew()

{

      for(int k=0;k<500;k++)

      {

            pnt[k]=CPoint(0,0);

            p[k]=CPoint(0,0);

            ps[k]=CPoint(0,0);

      }

      a=b=c=0; a1=b1=c1=0;

      count=i=0; d=0;

      Invalidate();

}

4. void CXYView::OnFiguraFreehand()

{

            CClientDC *pDC = new CClientDC(this);

            CPen pen2(PS_SOLID,3,RGB(225,0,255));

            CPen pen3(PS_SOLID,3,RGB(0,10,10));

      for(int k=1;k<i;k++)

            {

                  pDC->SelectObject(&pen2);

                  pDC->Ellipse(p[k].x-2,p[k].y-2,p[k].x+2,p[k].y+2);

                  pDC->SelectObject(&pen3);

                  pDC->Ellipse(ps[k].x-2,ps[k].y-2,ps[k].x+2,ps[k].y+2);

            }

}

5. void CXYView::OnFiguraCircle()

{

      CClientDC *pDC = new CClientDC(this);

      pDC->SelectStockObject(NULL_BRUSH);

            CPen pen2(PS_SOLID,3,RGB(225,0,255));

            CPen pen3(PS_SOLID,3,RGB(0,10,10));

      double R=0;

      pDC->SelectObject(&pen3);

      for(int k=2;k<i;k+=2)

            {

                  R=sqrt((p[k].x-p[k-1].x)*(p[k].x-p[k-1].x)+(p[k].y-p[k-1].y)*(p[k].y-p[k-1].y));

                  pDC->Ellipse(ps[k-1].x-R,ps[k-1].y-R,ps[k-1].x+R,ps[k-1].y+R);

            }

      for(k=1;k<i;k++)

            pDC->Ellipse(ps[k].x-1.5,ps[k].y-1.5,ps[k].x+1.5,ps[k].y+1.5);

      pDC->SelectObject(&pen2);

      for(k=1;k<i;k++)

            pDC->Ellipse(p[k].x-1.5,p[k].y-1.5,p[k].x+1.5,p[k].y+1.5);

      for( k=2;k<i;k+=2)

      {

            R=sqrt((p[k].x-p[k-1].x)*(p[k].x-p[k-1].x)+(p[k].y-p[k-1].y)*(p[k].y-p[k-1].y));

            pDC->Ellipse(p[k-1].x-R,p[k-1].y-R,p[k-1].x+R,p[k-1].y+R);

      }

}

6.

void CXYView::OnFiguraTreeangle()

{

      CClientDC *pDC = new CClientDC(this);

            CPen pen2(PS_SOLID,3,RGB(225,0,255));

            CPen pen3(PS_SOLID,3,RGB(0,10,10));

      pDC->SelectObject(&pen3);

            for(int k=1;k<=i;k+=3)

            {

                  if(k>3)

                  {

                        pDC->MoveTo(ps[k-1]);

                        pDC->LineTo(ps[k-2]);

                        pDC->LineTo(ps[k-3]);

                        pDC->LineTo(ps[k-1]);

                  }

            }pDC->SelectObject(&pen2);

            for( k=1;k<=i-1;k++)

                  pDC->Ellipse(p[k].x-2,p[k].y-2,p[k].x+2,p[k].y+2);

      for( k=1;k<=i;k+=3)

            {

                  if(k>3)

                  {

                        pDC->MoveTo(p[k-1]);

                        pDC->LineTo(p[k-2]);

                        pDC->LineTo(p[k-3]);

                        pDC->LineTo(p[k-1]);

                  }

            }

}

7. void CXYView::Randomi()

{

      CClientDC *pDC = new CClientDC(this);

      CPen pen2(PS_SOLID,3,RGB(225,0,255));

      CPen pen3(PS_SOLID,3,RGB(0,10,10));

      srand( (unsigned)time( NULL ) );

            for (int ii=i-1; ii<i+20; ii++)

            {

                  if(ii!=0)

                  {

                        p[ii].x = rand()%500+100;

                        p[ii].y = rand()%400;

                  }

            }

            for(int k=i;k<i+20;k++)

            {

                  c1=b*p[k].x-a*p[k].y;

                  d=a*p[k].x+b*p[k].y+c;

                  if(int(alfa)>2||int(alfa)<-2)

                  {

                        ps[k].y=((c1*a/a1)-c-d)/(b-a*b1/a1);//vertical

                        ps[k].x=(-b1*ps[k].y-c1)/a1;

                  }

                  else

                  {

                        ps[k].x=((c1*b/b1)-c-d)/(a-a1*b/b1);//horiz

                        ps[k].y=(-a1*ps[k].x-c1)/b1;

                  }

            }

      for(int k=i;k<i+20;k++)

            {

                  pDC->SelectObject(&pen2);

                  pDC->Ellipse(p[k].x-2,p[k].y-2,p[k].x+2,p[k].y+2);

Информация о работе Построить множество точек на плоскости