#include <graphics.h>
#include <stdio.h>
#include <iostream.h>
#include <conio.h>
#include <dos.h>
#include <math.h>
typedef float (*Otv)(float w);
unsigned char GraphMode(void);
void BackGround(void);
float Formula1(float w);
float Formula2(float w);
void ShowGrafic(void);
void LinePopov(void);
float Xmas=30; // Ìàñøòàá
float Ymas=30;
main()
{
clrscr();
if (GraphMode()==0){ // Èíèöèàëèçàöèÿ ãðàôèêè
BackGround(); // Ïîñòðîåíèå ÑÊÎ
ShowGrafic(); } // Ïîñòðîåíèå ãðàôèêîâ
return 0;
}
unsigned char GraphMode(void)
{
int driver, mode;
unsigned char err;
driver = DETECT;
initgraph(&driver,&mode,"");
err = graphresult();
if (err!=grOk) {cout<<"\n\t"<<grapherrormsg(err);
getch();
return 1;}
return 0;
}
void BackGround(void)
{
int xmax = getmaxx();
int ymax = getmaxy();
setcolor(15);
rectangle(0,0,xmax,ymax);
line((int)(xmax/2),10,(int)(xmax/2),ymax-10);
line(10,(int)(ymax/2),xmax-10,(int)(ymax/2));
line((int)(xmax/2)-3,15,(int)(xmax/2),10);
line((int)(xmax/2),10,(int)(xmax/2)+3,15);
line(xmax-15,(int)(ymax/2)-3,xmax-10,(int)(ymax/2));
line(xmax-15,(int)(ymax/2)+3,xmax-10,(int)(ymax/2));
settextstyle(2,0,5);
outtextxy((int)(xmax/2)+7,10,"jwQ(w)");
outtextxy(xmax-35,(int)(ymax/2)+7,"P(w)");
settextstyle(2,0,4);
outtextxy((int)(xmax/2)-8,(int)(ymax/2)+1,"0");
setcolor(15);
}
void ShowGrafic(void)
{
Otv Re=Formula1;
Otv Im=Formula2;
int xmax = getmaxx();
int ymax = getmaxy();
for(float Step=0; Step<=40; Step=Step+0.0001){ //procedure Grafic
putpixel(xmax/2+Xmas*(*Re)(Step),ymax/2+Ymas*(*Im)(Step),15);
}
setcolor(11);
line((int)xmax/2+Xmas,(int)(ymax/2)+4,(int)(xmax/2)+Xmas,(int)(ymax/2)-4);
line((int)xmax/2-Xmas,(int)(ymax/2)+4,(int)(xmax/2)-Xmas,(int)(ymax/2)-4);
LinePopov();
while(!kbhit()); // Îæèäàíèå íàæàòèÿ
closegraph();
}
float Formula1(float w)
{
return (0.0044*w*w*w*w-0.223*w*w-1)/
(-(0.63*w-0.009*w*w*w)*(0.63*w-0.009*w*w*w)-(1-0.087*w*w)*(1-0.087*w*w));
}
float Formula2(float w)
{
return -w*w*(0.034*w*w+0.14)/
(-(0.63*w-0.009*w*w*w)*(0.63*w-0.009*w*w*w)-(1-0.087*w*w)*(1-0.087*w*w));
}
void LinePopov(void)
{
float PrXo, PXo, QXo, Xo, Yo, h;
float Y;
float pr2= 15;
float kol, time, otv;
Otv Fx1=Formula1;
Otv Fx2=Formula2;
int xmax = getmaxx();
int ymax = getmaxy();
signed char done=0;
h=0.00001; // Ïîãðåøíîñòü ïðîèçâîäíîé
Xo=-0.92; // Çàäàíèå òî÷êè Ïîïîâà
Yo=0; // íà ðåàëüíîé îñè (-1/k)
time=7;
while(!done){ // Íàõîæäåíèå òî÷êè êàñàíèÿ ïðÿìîé Ïîïîâà
// è ìîäèôèöèðîâàííîãî ãîäîãðàôà
time=time+0.0001;
PXo=(*Fx1)(time); // Ïðîåêöèÿ w íà Ð
QXo=(*Fx2)(time); // Ïðîåêöèÿ w íà wQ
PrXo=((*Fx2)(time)-(*Fx2)(time-h))/((*Fx1)(time)-(*Fx1)(time-h));
otv=PrXo*(Xo-PXo)+QXo-Yo;
if ((otv>=-0.001)&&(otv<=0.001)) done=1;
if (time==pr2) done=1;
putpixel(xmax/2+Xmas*(*Fx1)(time),ymax/2+Ymas*(*Fx2)(time),13);
gotoxy(2,2);
printf("PXo %3.4f",PXo);
gotoxy(2,3);
printf("QYo %3.4f",-QXo);
printf("\nOtvet %f",otv);
gotoxy(2,5);
printf("w %2.3f",time);
}
gotoxy(2,6);
printf(" Óãîë ðàâåí %2.2f", -atan(QXo/PXo)*180/3.14);// Óãîë êàñàòåëüíîé
rectangle(0,0,150,90); // ê Ð
for (kol=-1.5; kol<=1.5; kol=kol+0.001){
Y=PrXo*(kol-Xo)+Yo;
putpixel(xmax/2+Xmas*(kol),ymax/2+Ymas*Y,10); // Ïðÿìàÿ Ïîïîâà
}
}
|
|