新的一年又開始了,假期臨近尾聲,不管是上學的上班的,都要開始忙碌起來了。然而,一年一度的情人節(jié)也快要來臨了,大家有沒有準備好送什么禮物呢?(單身汪請無視(━┳━ _ ━┳━))
不管是否單身,準備一份禮物總是錯不了的,就算沒有女朋友,也可以找人一起過,說不定成了呢!按照慣例,情人節(jié)了,鮮花玫瑰是肯定不能少的啦。既然如此,是時候展現(xiàn)真正的技術(shù)了!
今天給大家?guī)淼木褪且欢嗑徛`放的玫瑰花!
話不多說,先看圖:
玫瑰綻放
若隱若現(xiàn)的玫瑰
玫瑰綻放
初具雛形的玫瑰
玫瑰綻放
綻放的玫瑰,送給可愛的XXX(單身的也可以送人表白哦)
看起來是不是聽不錯的呢!
大家是不是覺得就結(jié)束了呢? “當!然!不!是!”
如果只有一朵花怎么能襯托出這中氛圍呢?來首音樂才有情調(diào)嘛!
然后我們再添加一首音樂!(由于圖片看不到,就不上傳了,想要的話可以加QQ群:564950050)
一邊聽著音樂,一邊看著一朵玫瑰的綻放,是不是特有情調(diào)?
也許你就能從此告白成功,脫離單身,走向幸福的兩人世界哦!
(沒成功當我沒說(━┳━ _ ━┳━))
好了下面來看下源碼:
/**********************************************************************************
項目名稱:一朵鮮花
編譯環(huán)境:vs2015 和easyx
項目作者:空城老師 QQ746269529
修改時間:2017年01月29日
***********************************************************************************/
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <graphics.h>
#include <mmsystem.h>
#pragma comment(lib,"winmm.lib")
//定義全局變量
int rosesize=500;
int h=-250;
//定義結(jié)構(gòu)體
struct DOT
{
double x;
double y;
double z;
double r;
double g;
};
bool calc(double a,double b,double c,DOT &d)
{
double j, n, o, w, z;
//花柄
if (c > 60)
{
d.x=sin(a * 7)*(13 + 5 / (0.2 + pow(b * 4, 4))) - sin(b) * 50;
d.y=b*rosesize + 50;
d.z=625 + cos(a * 7)*(13 + 5 / (0.2 + pow(b * 4, 4))) + b * 400;
d.r=a * 1 - b / 2;
d.g=a;
return true;
}
double A=a * 2 - 1;
double B=b * 2 - 1;
if (A*A + B*B < 1)
{
//綠葉
if (c > 37)
{
j=(int(c) & 1);
n=j ? 6 : 4;
o=0.5 / (a + 0.01) + cos(b * 125) * 3 - a * 300;
w=b * h;
d.x=o * cos(n) + w * sin(n) + j * 610 - 390;
d.y=o * sin(n) - w * cos(n) + 550 - j * 350;
d.z=1180 + cos(B + A) * 99 - j * 300;
d.r=0.4 - a * 0.1 + pow(1 - B * B, -h * 6) * 0.15 - a * b * 0.4 + cos(a + b) / 5 +
pow(cos((o * (a + 1) + (B > 0 ? w : -w)) / 25), 30) * 0.1 * (1 - B * B);
d.g=o / 1000 + 0.7 - o * w * 0.000003;
return true;
}
//花萼
if (c > 32)
{
c=c*1.16 - 0.15;
o=a * 45 - 20;
w=b * b * h;
z=o * sin(c) + w * cos(c) + 620;
d.x=o * cos(c) - w * sin(c);
d.y=28 + cos(B * 0.5) * 99 - b * b * b * 60 - z / 2 - h;
d.z=z;
d.r=(b * b * 0.3 + pow((1 - (A * A)), 7)*0.15 + 0.3)*b;
d.g=b * 0.7;
return true;
}
//花朵
o=A*(2 - b)*(80 - c * 2);
w=99 - cos(A) * 120 - cos(b)*(-h - c * 4.9) + cos(pow(1 - b, 7)) * 50 + c * 2;
z=o * sin(c) + w * cos(c) + 700;
d.x=o * cos(c) - w * sin(c);
d.y=B * 99 - cos(pow(b, 7)) * 50 - c / 3 - z / 1.35 + 450;
d.z=z;
d.r=(1 - b / 1.2) * 0.9 + a * 0.1;
d.g=pow((1 - b), 20) / 4 + 0.05;
return true;
}
return false;
}
int main()
{
short *zBuffer;
intx, y, z, zBufferIndex;
DOTdot;
initgraph(640,480);//創(chuàng)建繪圖窗口
mciSendString(L"open ./素材/音樂.mp3 alias BGM",0,0,0);//打開音樂 L 多字節(jié)字符串
mciSendString(L"play BGM repeat",0,0,0);
setbkcolor(YELLOW);
cleardevice();
zBuffer=new short[rosesize * rosesize];
memset(zBuffer, 0, sizeof(short) * rosesize * rosesize);
for (int j=0; j < 2000 && !_kbhit(); j++)
{
for (int i=0; i < 10000; i++)
if (calc(double(rand()) / RAND_MAX, double(rand()) / RAND_MAX, rand() % 46 / 0.74, dot))
{
z=int(dot.z + 0.5);
x=int(dot.x*rosesize / z - h + 0.5);
y=int(dot.y*rosesize / z - h + 0.5);
if (y > rosesize) continue;
zBufferIndex=y*rosesize + x;
if (!zBuffer[zBufferIndex] || zBuffer[zBufferIndex] > z)
{
zBuffer[zBufferIndex]=z;
//畫點
int r=~int((dot.r*h));if (r < 0)r=0;if (r > 255)r=255;
int g=~int((dot.g*h));if (g < 0)g=0;if (g > 255)g=255;
int b=~int((dot.r*dot.r*-80));if (b < 0)b=0;if (b > 255)b=255;
putpixel(x + 50, y - 20, RGB(r, g, b));
}
}
Sleep(10);
}
delete[]zBuffer;
_getch();
closegraph();
return 0;
}
這就是程序的全部代碼啦!如果想更換音樂只要改下你想要替換的音樂名字該為"音樂"就好了,當然了格式必須是MP3格式的。
注:如果沒有安裝easyx圖形庫是不能運行代碼的!大家只要安裝完就好了!安裝包可以在群里下載,或者從easyx官網(wǎng)下載!
大家想要學習交流可以申請加群哦!群號:564950050
同時也可以關(guān)注我們的微信公眾號:輕松學C語言
下期再見!
馬上到520了,很多人都說我們IT人不懂浪漫,今天小猿圈就給大家分享一個通過使用go語言來做一個表白圖,讓女神刮目相看,也祝福我們所有的IT人都能找到自己心儀的姑娘!
直接上碼,說明都在代碼中
/*先定義一個函數(shù)
參數(shù):
imgPath: 圖片路徑
size: 生成文本后的尺寸(這個不是真實的尺寸,1代表1個像素,1個像素會被替換成1個字符,所以是字符的個數(shù),高度是自動換算的,所以這里的size指的是“寬度”被壓縮成多少像素)
txts: 將像素處理成的字符列表
rowend: 換行字符(因為windows和linux不同)
output: 生成文本文件保存路徑
*/
func img2txt(imgPath string, size uint, txts []string, rowend string, output string) {
//獲取圖片文件
file, err :=os.Open(imgPath)
if err !=nil {
fmt.Println(err.Error())
return
}
defer file.Close()
//用圖片文件獲取圖片對象
img, err :=png.Decode(file)
if err !=nil {
fmt.Println(err.Error())
return
}
//用將寬度設(shè)置為size,然后換算出等比例的高度
var width=size
var height=(size * uint(img.Bounds().Dy())) / (uint(img.Bounds().Dx()))
height=height * 6 / 10 //這里6/10是大致字符的寬高比
newimg :=resize.Resize(width, height, img, resize.Lanczos3) //根據(jù)高寬resize圖片,并得到新圖片的像素值
dx :=newimg.Bounds().Dx()
dy :=newimg.Bounds().Dy()
//創(chuàng)建一個字節(jié)buffer,一會用來保存字符
textBuffer :=bytes.Buffer{}
//遍歷圖片每一行每一列像素
for y :=0; y < dy; y++ {
for x :=0; x < dx; x++ {
colorRgb :=newimg.At(x, y)
r, g, b, _ :=colorRgb.RGBA()
//獲得三原色的值,算一個平均數(shù)出來
avg :=uint8((r + g + b) / 3 >> 8)
//有多少個用來替換的字符就將256分為多少個等分,然后計算這個像素的平均值趨緊與哪個字符,最后,將這個字符添加到字符buffer里
num :=avg / uint8(256/len(txts))
textBuffer.WriteString(txts[num])
fmt.Print(txts[num]) //打印出來
}
textBuffer.WriteString(rowend) //一行結(jié)束,換行
fmt.Print(rowend)
}
//將字符buffer的數(shù)據(jù)寫入到文本文件里,結(jié)束。
f, err :=os.Create(output + ".txt")
if err !=nil {
fmt.Println(err.Error())
return
}
defer f.Close()
f.WriteString(textBuffer.String())
}
然后,在main函數(shù)里
func main() {
img2txt("你的圖片.png", 200, []string{"@", "#", "*", "%", "+", ",", ".", " "}, "\n", "./保存的文本.txt")
}
搞定!!!
go run main.go
試試看,打開剛才保存的文件看看效果
本次分享就到這,快去用代碼給心儀的妹子表白吧,讓她們知道我們程序員的浪漫,加油!