double AlgMultiplieVect(double x1,double y1,double x2, double y2) { double rez; rez = x1*x2+y1*y2; return rez; } double VectLength(double x, double y) { double rez; rez = sqrt(x*x + y*y); return rez; } void drawVect(Complex a, double mb_e, double mb_cx, double mb_cy,QString text) { double k; k = 50/mb_e; double x1,x2,y1,y2; double betacos,beta; double strx1,stry1; strx1 = 10; // направляющий вектор оси оХ stry1 = 0; x1 = mb_cx; // точка начала вектора y1 = mb_cy; x2 = mb_cx + a.re*k; //точка конца вектора y2 = mb_cy - a.im*k; //cos угла между вектором и направлением оси ох betacos = (AlgMultiplieVect(x2,y2,strx1,stry1))/(VectLength(x2,y2)*VectLength(strx1,stry1)); // сам угол beta = acos(betacos); //рисуем основание вектора paint.drawLine(x1,y1,x2,y2); //подписываем вектор paint.drawText((x1+x2)/2 + 15,(y1+y2)/2,text); // сохраняю текущее положение координатной оси paint.save(); paint.translate(x2,y2); paint.rotate(-(beta*57.295)); //умножаю на 57.295 чтобы получить градусы paint.drawLine(-10,-5,0,0); paint.drawLine(-10,5,0,0); //возвращаю координатную ость в нормальное положение paint.restore(); }
testx1 = 4; testy1 = 4; testcos = (AlgMultiplieVect(testx1,testy1,strx1,stry1))/(VectLength(testx1,testy1)*VectLength(strx1,stry1)); testangle = acos(testcos)*180 / 3.14159265 ; qDebug() << testangle;
double step2 (Complex a) { double rez; rez = sqrt(a.im*a.im+a.re*a.re); return rez; } double AlgMultiplieVect(double x1,double y1,double x2, double y2) { double rez; rez = x1*x2+y1*y2; return rez; } double VectLength(double x, double y) { double rez; rez = sqrt(x*x + y*y); return rez; } void drawVect(Complex a, double mb_e, double mb_cx, double mb_cy,QString text) { double k; k = 50/mb_e; double x1,x2,y1,y2; double betacos,beta; double strx1,stry1,testx1,testy1,testcos,testangle; strx1 = 1; // направляющий вектор оси оХ stry1 = 0; testx1 = 4; testy1 = 4; x1 = mb_cx; // точка начала вектора y1 = mb_cy; x2 = mb_cx + a.re*k; //точка конца вектора y2 = mb_cy - a.im*k; //cos угла между вектором и направлением оси ох betacos = (AlgMultiplieVect(x2,y2,strx1,stry1))/(VectLength(x2,y2)*VectLength(strx1,stry1)); // сам угол beta = acos(betacos); //рисуем основание вектора paint.drawLine(x1,y1,x2,y2); //подписываем вектор paint.drawText((x1+x2)/2 + 15,(y1+y2)/2,text); // сохраняю текущее положение координатной оси paint.save(); paint.translate(x2,y2); paint.rotate(-(beta*180 / 3.14159265)); //умножаю на 57.295 чтобы получить градусы paint.drawLine(-10,-7,0,0); paint.drawLine(-10,7,0,0); //возвращаю координатную ось в нормальное положение paint.restore(); testx1 = 4; testy1 = 4; testcos = (AlgMultiplieVect(testx1,testy1,strx1,stry1))/(VectLength(testx1,testy1)*VectLength(strx1,stry1)); testangle = acos(testcos)*180 / 3.14159265 ; qDebug() << testangle; }//--------------------------------------------------------------------------- //построение графика; void drawCoordinateSystem(Complex mb_a1,Complex mb_a2,Complex mb_a3,QString s_a1,QString s_a2,QString s_a3) { int c_x = 525; int c_y = 525; double max; double e; QString a[11];paint.drawLine(25,525,1025,525); paint.drawLine(1015,520,1025,525); paint.drawLine(1015,530,1025,525); //ось Xpaint.drawLine(525,25,525,1025); paint.drawLine(520,35,525,25); paint.drawLine(530,35,525,25); //ось Ypaint.drawText(1025,550,"+"); paint.drawText(25,550,"-");paint.drawText(535,25,"+j"); paint.drawText(535,1025,"-j");max = MaxOfI(step2(mb_a1),step2(mb_a2),step2(mb_a3)); //нахожу самый длинный из векторовe = max/8; //относительно самого длинного вектора нахожу ед. отрезокfor (int i =1; i<=10;i++){ a[i] = a[i].setNum(e*i,'g',2);paint.drawLine(c_x+i*50,c_y+5,c_x+i*50,c_y-5); // тут я наношу значения на координатные осиpaint.drawText(c_x+i*50,c_y+20,a[i]);}drawVect(mb_a2,e,c_x,c_y,"I6");drawVect(mb_a3,e,c_x,c_y,"I3");drawVect(mb_a1,e, c_x + (mb_a3.re*50)/e, c_y - (mb_a3.im*50)/e, "I4"); }