两正点电荷产生电场线

我的网站http://www.tigerion.cn
 /* 两异号电荷产生电场线 */
#include "stdio.h"
#include "graphics.h"
#include "math.h"

#define K 300.0
#define PI 3.141592653
typedef struct  /*点元素*/
   {
         double x;
         double y;
   }dotxy;    
void main()
  {
     dotxy p1,p2;
     int gd=DETECT,gm;
     char c=0;
     void drel(dotxy p1,dotxy p2);
     void dreball(dotxy p1,dotxy p2);
     void message();
       registerbgidriver(EGAVGA_driver);
        initgraph(&gd,&gm,"");
        p1.x=170;p2.x=470;
        p1.y=p2.y=240;
        do
           {  
                 cleardevice();
                 message();
                 switch (c)
                    {
                       case 'u':
                         case 'U': p2.y-=2;break;
                       case 'd':
                       case 'D': p2.y+=2;break;
                       case 'l':
                       case 'L': p2.x-=2;break;
                       case 'r':
                       case 'R': p2.x+=2;break;
                    }
                 dreball(p1,p2);
              drel(p1,p2);
              drel(p2,p1);
           }
        while((c=getch())!='e'&&c!='E');
        getch();
        closegraph();
     
  }
void dreball(dotxy p1,dotxy p2)   /*画‘p2’一侧的电场线 */
  {
          setcolor(15);
          circle(p1.x,p1.y,10);
        circle(p2.x,p2.y,10);
        line(p1.x-5,p1.y,p1.x+5,p1.y);
        line(p2.x-5,p2.y,p2.x+5,p2.y);
       /* line(p1.x,p1.y-5,p1.x,p1.y+5);*/
       line(p2.x,p2.y-5,p2.x,p2.y+5);
  }
void drel(dotxy p1,dotxy p2)
  {
       int i;
       dotxy p3;
       double b,r1,r2,fx,fy,dx,dy;/*r1,r2为平面内一点到两电荷距离的立方*/
                                  /*fx,fy分别是X方向和Y方向受力*/
        setcolor(4);
          for(b=0.1;b<=2*PI;b+=PI/6)
             {
                   p3.x=p2.x+12*cos(b);
                   p3.y=p2.y+12*sin(b);
                   for(i=0;i<500;i++)
                      {
                          putpixel(p3.x,p3.y,1+i/20%15);
                          r1=pow((p3.x-p1.x)*(p3.x-p1.x)+(p3.y-p1.y)*(p3.y-p1.y),1.5);
                          r2=pow((p3.x-p2.x)*(p3.x-p2.x)+(p3.y-p2.y)*(p3.y-p2.y),1.5);
                          fx=-K/r1*(p3.x-p1.x)+K/r2*(p3.x-p2.x);
                          fy=-K/r1*(p3.y-p1.y)+K/r2*(p3.y-p2.y);
                          dx=fx/sqrt(fx*fx+fy*fy);/*由fx,fy算出切线方向的单位向量*/
                          dy=fy/sqrt(fx*fx+fy*fy);
                          p3.x+=dx;
                          p3.y+=dy;
                      }
             }
  }  
void message()
  {  
       setcolor(15);
       outtextxy(40,40,"U->up");
       outtextxy(240,40,"D->down");
       outtextxy(40,100,"L->left");
       outtextxy(240,100,"R->right");
       outtextxy(140,70,"E->exit");
  }



我的网站http://www.tigerion.cn


你可能感兴趣的:(C语言)