Advertisement
Guest User

Untitled

a guest
Oct 20th, 2011
188
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.93 KB | None | 0 0
  1. #include "qpaintwidget.h"
  2. #include <QPainter>
  3. #include "math.h"
  4.  
  5. QPaintWidget::QPaintWidget(QWidget *parent) :
  6.     QWidget(parent)
  7.     {
  8.         sitka=0;mash=2;
  9.         _scale=50;m1_x=0;m1_y=0;m1_k=0;metod=1;flag_move=0;
  10.     }
  11.  
  12. void QPaintWidget::paintEvent(QPaintEvent *)
  13.     {
  14.         double x1,y1,x2,y2;
  15.         QPainter pa(this);
  16.         int w = this->width();
  17.         int h = this->height();
  18.         int hw = w/2.;
  19.         int hh = h/2.;
  20.         double scale = _scale*mash;
  21.         int xx,yy;xx=hw/mash;yy=hh/mash;
  22.         if(metod==3)
  23.             {hw=200;hh=2*hh-100;}
  24.         if (sitka==1)
  25.             {
  26.                 flag_move=1;
  27.                 pa.setPen(Qt::green);
  28.                 for(long int i=hw % (int)scale-scale*150;i<20*w;i+=scale)
  29.                     {
  30.                         x1=(i-hw)/mash;x2=x1;y1=-8*hh;y2=8*h;Met(&x1,&y1);Met(&x2,&y2);
  31.                         pa.drawLine(hw+x1*mash,hh-y1*mash,hw+x2*mash,hh-y2*mash);
  32.                     }
  33.  
  34.                 for(int i=hh % (int)scale-scale*150;i<40*h;i+=scale)
  35.                     {
  36.                         x1=-xx-8*hw/mash;x2=+xx+8*hw/mash+500;y1=(hh-i)/mash;y2=y1;
  37.                         Met(&x1,&y1);Met(&x2,&y2);
  38.                         pa.drawLine(hw+x1*mash,hh-y1*mash,hw+x2*mash,hh-y2*mash);
  39.                     }
  40.                 flag_move=0;
  41.             }
  42.  
  43.         flag_move=1;
  44.         pa.setPen(Qt::red);
  45.         for(int i=hw % (int)scale;i<w;i+=scale)
  46.             {
  47.                 x1=(i-hw)/mash;y1=-yy-3+hh/mash;x2=x1;y2=-yy+3+hh/mash;Met(&x1,&y1);Met(&x2,&y2);
  48.                 pa.drawLine(hw+x1*mash,hh-y1*mash,hw+x2*mash,hh-y2*mash);//метки по Х
  49.             }
  50.         for(int i=hh % (int)scale;i<h;i+=scale)
  51.             {
  52.                 x1=-xx+hw/mash-5;x2=-xx+hw/mash+5;y1=(hh-i)/mash;y2=y1;Met(&x1,&y1);Met(&x2,&y2);
  53.                 pa.drawLine(hw+x1*mash,hh-y1*mash,hw+x2*mash,hh-y2*mash);//метки по Х
  54.             }
  55.         flag_move=0;
  56.  
  57.         pa.setPen(Qt::black);
  58.         //osi
  59.         flag_move=1;
  60.         x1=-20*xx;y1=-0;x2=xx*20;y2=-0;Met(&x1,&y1);Met(&x2,&y2);
  61.         pa.drawLine(hw+x1*mash,hh-y1*mash,hw+x2*mash,hh-y2*mash);
  62.  
  63.         x1=-0;y1=-20*yy;x2=0;y2=20*yy;Met(&x1,&y1);Met(&x2,&y2);
  64.         pa.drawLine(hw+x1*mash,hh-y1*mash,hw+x2*mash,hh-y2*mash);
  65.         flag_move=0;
  66.         if (metod==4)
  67.             {
  68.                 //tochka vidnosno yakoyi povorot
  69.                 int _t=5;
  70.                 pa.drawLine(hw+m1_x*mash-_t,hh-m1_y*mash-_t,hw+m1_x*mash+_t,hh-m1_y*mash+_t);
  71.                 pa.drawLine(hw+m1_x*mash+_t,hh-m1_y*mash-_t,hw+m1_x*mash-_t,hh-m1_y*mash+_t);
  72.             }
  73.  
  74.         //kvadrat
  75.         x1=-100;y1=100;x2=-100;y2=-100;Met(&x1,&y1);Met(&x2,&y2);
  76.         pa.drawLine(hw+x1*mash,hh-y1*mash,hw+x2*mash,hh-y2*mash);
  77.         x1=100;y1=100;x2=100;y2=-100;Met(&x1,&y1);Met(&x2,&y2);
  78.         pa.drawLine(hw+x1*mash,hh-y1*mash,hw+x2*mash,hh-y2*mash);
  79.         x1=100;y1=100;x2=-100;y2=100;Met(&x1,&y1);Met(&x2,&y2);
  80.         pa.drawLine(hw+x1*mash,hh-y1*mash,hw+x2*mash,hh-y2*mash);
  81.         x1=100;y1=-100;x2=-100;y2=-100;Met(&x1,&y1);Met(&x2,&y2);
  82.         pa.drawLine(hw+x1*mash,hh-y1*mash,hw+x2*mash,hh-y2*mash);
  83.         //diagonali
  84.         pa.setPen(Qt::yellow);
  85.         x1=100;y1=-100;x2=-100;y2=100;Met(&x1,&y1);Met(&x2,&y2);
  86.         pa.drawLine(hw+x1*mash,hh-y1*mash,hw+x2*mash,hh-y2*mash);
  87.         x1=100;y1=100;x2=-100;y2=-100;Met(&x1,&y1);Met(&x2,&y2);
  88.         pa.drawLine(hw+x1*mash,hh-y1*mash,hw+x2*mash,hh-y2*mash);
  89.     }
  90.  
  91.  
  92.  
  93. void QPaintWidget::Met(double *_x, double *_y)
  94.     {
  95.         double _X,_Y,x,y;
  96.         x=*_x;    y=*_y;
  97.         if (metod==1)
  98.             {
  99.                 //x=x-m1_x;   y=y-m1_y;
  100.                 _X=x;    _Y=y;
  101.                 x=_X*cos(m1_k)-_Y*sin(m1_k);
  102.                 y=_X*sin(m1_k)+_Y*cos(m1_k);//*/
  103.                 x=x+m1_x;   y=y+m1_y;
  104.                 *_x=x;*_y=y;
  105.             }
  106.         if (metod==2)
  107.             {
  108.           //afinni
  109.                 _X=m2_x1*x+m2_y1*y;
  110.                 _Y=m2_x2*x+m2_y2*y;
  111.                 if (flag_move==0){_X+=X0;_Y+=Y0;}
  112.                 *_x=_X;*_y=_Y;
  113.             }
  114.         if (metod==3)
  115.             {
  116.           //proektivniy
  117.                 //////////////////////////////////////////////////////////////////////////////////////////////////////
  118.                 //error maybe where
  119.                 _X=(m3_X0*m3_W0*0+m3_Xx*m3_Wx*x+m3_Xy*m3_Wy*y)/(m3_Wx*x+m3_Wy*y+m3_W0);
  120.                 _Y=(m3_Y0*m3_W0*0+m3_Yx*m3_Wx*x+m3_Yy*m3_Wy*y)/(m3_Wx*x+m3_Wy*y+m3_W0);
  121.                 *_x=_X;*_y=_Y;
  122.             }
  123.         if (metod==4)
  124.             {
  125.                 if (flag_move==0)
  126.                     {
  127.               //ruh navkolo tochki
  128.                         //x=x-m1_x;   y=y-m1_y;
  129.                         _X=x-m1_x;    _Y=y-m1_y;
  130.                         x=_X*cos(m1_k)-_Y*sin(m1_k);
  131.                         y=_X*sin(m1_k)+_Y*cos(m1_k);//*/
  132.                         x=x+m1_x;   y=y+m1_y;
  133.                         *_x=x;*_y=y;
  134.                     }
  135.             }
  136.     }
  137.  
  138. void QPaintWidget::set_Sit(int _s)
  139.     {
  140.         sitka=_s;
  141.         this->update();
  142.     }
  143.  
  144. void QPaintWidget::set_Met_1(double _k, double _x, double _y)
  145.     {
  146.         m1_k=_k;m1_x=_x;m1_y=_y;metod=1;
  147.     }
  148.  
  149. void QPaintWidget::set_Met_1A(double _k, double _x, double _y)
  150.     {
  151.         set_Met_1(_k,_x,_y);metod=4;
  152.     }
  153.  
  154. void QPaintWidget::set_Met_2(double _x1, double _y1, double _x2, double _y2, double _x0, double _y0)
  155.     {
  156.         m2_x1=_x1;m2_y1=_y1;m2_x2=_x2;m2_y2=_y2;X0=_x0;Y0=_y0;metod=2;
  157.     }
  158.  
  159. void QPaintWidget::set_Met_3(double _m3_xx, double _m3_xy, double _m3_yx, double _m3_yy, double _m3_wx, double _m3_wy, double _m3_x0, double _m3_y0, double _m3_w0)
  160.     {
  161.         m3_Xx=_m3_xx;m3_Xy=_m3_xy;
  162.         m3_Yx=_m3_yx;m3_Yy=_m3_yy;
  163.         m3_Wx=_m3_wx;m3_Wy=_m3_wy;
  164.         m3_X0=_m3_x0;m3_Y0=_m3_y0;
  165.         m3_W0=_m3_w0;
  166.         metod=3;
  167.     }
  168.  
  169. void QPaintWidget::set_Mash(int _m)
  170.     {
  171.         mash=_m;
  172.     }
  173.  
  174.  
  175.  
  176.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement