如何用程序画一个心形
方程看着复杂,我们不管这是怎么推导出来的,让我们使用拿来主义,直接使用吧!我们回忆一下圆的方程,比如:x^2+y^2=1
,那么所有的点(x,y)
,若使得x^2+y^2==1
,则这个点在这个圆的边界线上;若使得x^2+y^2<1
,则这个点在圆内;若使得x^2+y^2>1
,则这个点在圆外。
好了,同理,对于这个方程,若点(x,y)
让方程左边等于0,则这个点在这个心形曲线上;若让方程左边小于0,则这个点在这个心形线内;若让方程左边大于0,则这个点在这个心形线外。
我们要做的就是写一个双重循环,遍历x和y的值,将心形线以内的地方,涂上某一个字符,比如‘*’。
那么我们首先要确定我们双重循环的边界。我们打印输出,肯定是要逐行输出,从上到下。所以我们的第一层循环要对y值做循环。观察一下,可以看到y的上界大概是1.3;下界大概是-1.1;所以,我们可以从1.3逐渐减少到-1.1,初始我们可以选取步长为0.1。同理,对于x,可以看出他的左右边界大概为-1.2和+1.2,我们就从-1.2遍历到1.2,步长也选择0.1。
php的实现代码如下
$str = /*join("", range('a', 'z'))*/"Oo";
$index = 0;
for($y = 1.3; $y>=-1.1;$y-=0.1) {
for($x=-1.8;$x<=1.8;$x+=0.1) {
//if(pow($x*$x+$y*$y-1.0, 3) - $x*$x*$y*$y*$y <= 0.0) {
if($x*$x + pow(5.0*$y/4.0-sqrt(abs($x)), 2) - 1 <= 0.0) {
//$randstr = str_shuffle($str);
//echo substr($randstr, 0, 2);
//保持str原字符串的输出顺序
/*if($index < strlen($str) - 1) {
echo $str[$index].$str[$index+1];
$index += 2;
}else if($index < strlen($str)) {
echo $str[$index].$str[0];
$index = 1;
}else {
$index = 0;
echo $str[$index].$str[$index+1];
$index += 2;
}*/
echo "Oo";
}else {
echo " ";
$index = 0;
}
}
echo "\n";
$index = 0;
}
上述分别有两种算法的实现,还有一种的算法方程是如下图
文章内容参考自:http://www.imooc.com/article/16359
如果您觉得本文对您有用,欢迎捐赠或留言~
- 本博客所有文章除特别声明外,均可转载和分享,转载请注明出处!
- 本文地址:https://www.leevii.com/?p=596