C语言,画吃豆人剖析
接上一篇文章,很多人還是搞不清楚ptr1[-1]是怎么回事,可以看看這篇文章,看完的同學(xué)還是多轉(zhuǎn)發(fā)的,讓更多的人看到。
一道90%都會做錯的指針題
偶然的一次機(jī)會在知乎上看到這個代碼,里面涉及的C語言點(diǎn)我覺得很酷,拿出來分享給大家,我認(rèn)為技術(shù)的話,只要是跟嵌入式有關(guān),跟C語言有關(guān)的,我都喜歡寫,大家有想了解的東西,也可以評論留言給我,希望給大家分享更多優(yōu)質(zhì)的內(nèi)容,優(yōu)質(zhì)的閱讀體驗。
我們看一下吃豆人的圖片
看起來非常酷,如果我們就用幾行代碼就能畫出吃豆人,這樣會不會更酷,好吧,我們不吹牛,先從第一步開始。
第一步就是先畫一個長方形,類似這樣的
#include <math.h> #include <stdio.h>int main(){double x,y;/*在 -1 和 1 的區(qū)間內(nèi)畫出一個矩陣*/for(y =1;y>=-1;y-=0.05,putchar('\n'))for(x = -1;x<=1;x+=0.025)putchar('.);getchar(); } 輸出圖片如下:這個代碼應(yīng)該不難吧,畫出了這個之后,下面就是比較困難的了,就是在這個長方形里面勾勒出那個圓形。
畫圓形的代碼應(yīng)該也是不難的,畫圓形的代碼如下
輸出圖片如下:
完整代碼
#include <math.h> #include <stdio.h>int main(){double x,y;for(y =0.9;y>=-0.9;y-=0.05,putchar('\n'))for(x = -1;x<=1;x+=0.025)putchar(" ."[x*x + y*y < 1&& /*確定圓形的位置*/fabs(atan2(y,x)) > 0.5 &&/*fabs 求絕對值 畫吃豆人的嘴巴*/x*x + pow(y-0.5,2) > 0.02]);/*pow(x,y) x的y 字冪 畫吃豆人的眼睛*/getchar(); }分析一
putchar(" ."[])這個代碼我剛開起來有點(diǎn)拗眼,不知道寫的是什么,但是既然用到[],那就肯定是跟數(shù)組有關(guān)系的。
我寫了小代碼
#include <math.h> #include <stdio.h>int main(){putchar(" y"[1]);getchar(); }這個輸出如下
y其實我們這樣看還不很明朗的話,我們可以這樣看
#include <math.h> #include <stdio.h>int main(){char *pos = "xy";putchar(pos[1]);getchar(); }這個代碼輸出結(jié)果跟上面是一樣的,pos 也就是那個字符串的別名。
這樣我們就知道了
putchar(" ."[
這句是通過后面的值來輸出空格「 」 還是「 . 」。
分析二
繼續(xù)分析上面的三句關(guān)鍵代碼
x*x + y*y < 1&& /*確定圓形的位置*/ fabs(atan2(y,x)) > 0.5 &&/*fabs 求絕對值 畫吃豆人的嘴巴*/ x*x + pow(y-0.5,2) > 0.02]);/*pow(x,y) x的y 字冪 畫吃豆人的眼睛*/第一行是確定這個圓形。
第二行是用來確定吃豆人的嘴巴的,這個要有點(diǎn)數(shù)學(xué)功底才行,寫這個的時候,我的數(shù)學(xué)基本已經(jīng)送給老師了。
第三行是用來畫吃豆人的眼睛的。
吃豆人的眼睛可以用下面這個代碼來演示下
#include <math.h> #include <stdio.h>int main(){double x,y;for(y =1;y>=-1;y-=0.05,putchar('\n'))for(x = -1;x<=1;x+=0.025)putchar(" ."[x*x + y*y < 1&& /*確定圓形的位置*/fabs(atan2(y,x)) > 0.5 &&/*fabs 求絕對值 畫吃豆人的嘴巴*/x*x+(y-0.5)*(y-0.5) > 0.02]);/*pow(x,y) x的y 字冪 畫吃豆人的眼睛*/getchar(); } x*x+(y-0.5)*(y-0.5)這行代碼決定小圓,大于號決定小圓的大小,邊界。
分析三
atan2這個函數(shù)很強(qiáng)大,我們學(xué)習(xí)三角函數(shù)的時候用的是tan,但是這個atan2用的是兩個參數(shù),看我上面的圖片,atan2(0,1) = 0,atan2(y,x) ?第一個參數(shù)是 y ,第二個參數(shù)是 x。
最后運(yùn)行如下圖
上文源代碼轉(zhuǎn)自:
https://www.zhihu.com/people/miloyip/activities
掃碼或長按關(guān)注
回復(fù)「?籃球的大肚子?」進(jìn)入技術(shù)群聊
總結(jié)
以上是生活随笔為你收集整理的C语言,画吃豆人剖析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Html + Java登录验证码实现代码
- 下一篇: 【activiti6】设计器的前后端集成