找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3147|回复: 1
收起左侧

利用物理知识,用C语言绘制电场线和磁感线源程序

[复制链接]
ID:612762 发表于 2020-3-3 19:39 | 显示全部楼层 |阅读模式
  1. // 直线静电场.cpp : 定义控制台应用程序的入口点。
  2. //

  3. #include "stdafx.h"
  4. #include <graphics.h>
  5. #include <math.h>
  6. #define PI 3.1415926535
  7. #define L 200
  8. #define R 100
  9. #define N 1000
  10. #define M 50000
  11. #define LINE 12

  12. double Bx(double O,double x,double y)
  13. {
  14.         double r1,r2;
  15.         r1=sqrt(pow(x,2)+pow(y,2)+R*R-2*y*R*cos(O));
  16.         r2=sqrt(pow(L-x,2)+y*y+R*R-2*y*R*cos(O));
  17.         return((R*R-y*R*cos(O))/pow(r1,3)+(R*R-y*R*cos(O))/pow(r2,3));
  18. }

  19. double By(double O,double x,double y)
  20. {
  21.         double r1,r2;
  22.         r1=sqrt(pow(x,2)+pow(y,2)+R*R-2*y*R*cos(O));
  23.         r2=sqrt(pow(L-x,2)+y*y+R*R-2*y*R*cos(O));
  24.         return(x*R*cos(O)/pow(r1,3)+(x-L)*R*cos(O)/pow(r2,3));
  25. }

  26. int main()
  27. {
  28.         initgraph(800,800,SHOWCONSOLE);
  29.         setbkcolor(WHITE);
  30.         cleardevice();
  31.         setorigin(400,400);
  32.         setlinestyle(PS_DASH|PS_ENDCAP_SQUARE,2);
  33.         setlinecolor(RED);
  34.         line(0,-400,0,400);
  35.         ellipse(-30,R,30,-R);
  36.         ellipse(170,R,230,-R);
  37.         setlinestyle(PS_SOLID|PS_ENDCAP_SQUARE,2);
  38.         setlinecolor(BLACK);
  39.         line(-400,0,400,0);

  40.         double r,x,y,O,dO,bx,by,BBx,BBy,B,x0,y0,a[LINE-1];
  41.         dO=2*PI/N;
  42.         for(int i=1;i<LINE;i++)
  43.         {
  44.                 a[i-1]=R-i*2*R/LINE;
  45.         }
  46.         for(int i=0;i<LINE;i++)
  47.         {
  48.                 x=0;
  49.                 y=a[i];
  50.                 if(y==0)
  51.                 {
  52.                         continue;
  53.                 }
  54.                 for(int j=0;j<M;j++)
  55.                 {
  56.                         bx=(Bx(0,x,y)+Bx(2*PI,x,y))/2;
  57.                         by=(By(0,x,y)+By(2*PI,x,y))/2;
  58.                         for(int k=1;k<=N-1;k++)
  59.                         {
  60.                                 O=k*dO;
  61.                                 bx=bx+Bx(O,x,y);
  62.                                 by=by+By(O,x,y);
  63.                         }
  64.                         BBx=bx*dO;
  65.                         BBy=by*dO;
  66.                         B=sqrt(pow(BBx,2)+pow(BBy,2));
  67.                         x0=x+BBx/B;
  68.                         y0=y+BBy/B;
  69.                         line(x,y,x0,y0);
  70.                         if(pow(x0+1,2)<=1&&pow(y0-a[i],2)<=4)
  71.                         {
  72.                                 break;
  73.                         }
  74.                         x=x0;
  75.                         y=y0;
  76.                 }
  77.         }
  78.         system("pause");
  79. }
复制代码

全部资料51hei下载地址:
line.rar (4.2 KB, 下载次数: 14)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表