写在前面:
前段时间,临近期末,我们物理老师要求我们在本学期的知识范围内任意选定一个方向完成一个小的论文报告。我一寻思,好像我就会点PHP,刚好老师说可以选择程序作为自己的研究方向。好嘛!那就开始动手吧,上网一找关于电场线的程序绘制全是matlab写的,我的心里那叫一个愁啊。没办法啊,眼看时间就快到了,只好硬着头皮顶上去!还好写完感觉并不是特别难,就决定写一下,就当是一个记录吧!
下面进入正题,画电场线的话主要掌握求解电场线的方法,那么摆在我们面前的最大问题就解决了,关于如何详细的求解网上一定有许多的教程,在此我不进行细讲大概就是下面的思路:
当我们有了大致的思路后就可以开始动手写我们的程序了,下面我就直接展示我的代码:
<?php
$image = imagecreate(480, 300);//生成一个承载图片内容的图像载体
$white = imagecolorallocate($image, 255, 255, 255);
$color = imagecolorallocate($image, 0, 0, 0);//定义颜色为黑色
//定义空数组主要是为了之后,但两个变量在一起的时候更加方便的进行赋值
$x0 = array();//定义一个空数组
$x0[1] = 120;
$x0[2] = 360;
$y0 = array();//定义一个空数组
$y0[1] = 150;
$y0[2] = 150;
$x = array();//定义一个空数组
$y = array();//定义一个空数组
$e = array();//定义一个空数组
$r1 = array();
$r2 = array();
$E1 = array();
$E1x = array();
$E1y = array();
$E2 = array();
$E2x = array();
$E2y = array();
$E = array();
$Ex = array();
$Ey = array();
$q = array();//定义一个空数组
$q[1] = 1;
$q[2] = 1;
$k = 9*10^9;
$dl = 5;
$a0 = M_PI/12;
for($t = 1; $t <=2; $t++ ){
for($m = 1; $m <= 12*abs($q[$t]); $m++){
$sm = $a0 + ($m - 1)*M_PI/(6*$q[$t]);
$e[$t] = $q[$t]/abs($q[$t]);
$x[1] = $x0[$t] + $e[$t]*$dl*cos($sm);
$y[1] = $y0[$t] + $e[$t]*$dl*sin($sm);
$r1[1] = sqrt((pow(($x[1] - $x0[1]), 2)) + (pow(($y[1] - $y0[1]), 2)));
$r2[1] = sqrt((pow(($x[1] - $x0[2]), 2)) + (pow(($y[1] - $y0[2]), 2)));
$E1[1] = $k*$q[1]/(pow($r1[1], 2));
$E1x[1] = $E1[1]*($x[1] - $x0[1])/$r1[1];
$E1y[1] = $E1[1]*($y[1] - $y0[1])/$r1[1];
$E2[1] = $k*$q[2]/(pow($r2[1], 2));
$E2x[1] = $E2[1]*($x[1] - $x0[2])/$r2[1];
$E2y[1] = $E2[1]*($y[1] - $y0[2])/$r2[1];
$Ex[1] = $E1x[1] + $E2x[1];
$Ey[1] = $E1y[1] + $E2y[1];
$E[1] = sqrt((pow($Ex[1], 2)) + (pow($Ey[1], 2)));
for($n = 2; $n < 2000; $n++){
$x[$n] = $x[$n-1] + $e[$t]*$dl*$Ex[$n-1]/$E[$n-1];
$y[$n] = $y[$n-1] + $e[$t]*$dl*$Ey[$n-1]/$E[$n-1];
$r1[$n] = sqrt((pow(($x[$n] - $x0[1]), 2)) + (pow(($y[$n] - $y0[1]), 2)));
$r2[$n] = sqrt((pow(($x[$n] - $x0[2]), 2)) + (pow(($y[$n] - $y0[2]), 2)));
$E1[$n] = $k*$q[1]/(pow($r1[$n], 2));
$E1x[$n] = $E1[$n]*($x[$n-1] - $x0[1])/$r1[$n-1];
$E1y[$n] = $E1[$n]*($y[$n-1] - $y0[1])/$r1[$n-1];
$E2[$n] = $k*$q[2]/(pow($r2[$n], 2));
$E2x[$n] = $E2[$n]*($x[$n-1] - $x0[2])/$r2[$n-1];
$E2y[$n] = $E2[$n]*($y[$n-1] - $y0[2])/$r2[$n-1];
$Ex[$n]=$E1x[$n]+$E2x[$n];
$Ey[$n]=$E1y[$n]+$E2y[$n];
$E[$n]=sqrt((pow($Ex[$n], 2)) + (pow($Ey[$n], 2)));
imageline($image , (int)$x[$n] , (int)$y[$n] , (int)$x[$n-1] , (int)$y[$n-1] , $color);
}
}
}
header("Content-type: image/png");//使得生成的图片可以正确的输出
imagepng($image);
大概程序就是这样,运行结果如下: