欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報邀請碼778899分享:C/C++跳動的愛心

智利外貿綜合2025-05-07140

柚子快報邀請碼778899分享:C/C++跳動的愛心

http://yzkb.51969.com/

系列文章

序號直達鏈接1C/C++李峋同款跳動的愛心2C/C++跳動的愛心3C/C++經(jīng)典愛心4C/C++滿屏飄字5C/C++大雪紛飛6C/C++炫酷煙花7C/C++黑客帝國同款字母雨8C/C++櫻花樹9C/C++奧特曼10C/C++精美圣誕樹11C/C++俄羅斯方塊小游戲12C/C++貪吃蛇小游戲13C/C++孤單又燦爛的神14C/C++閃爍的愛心15C/C++哆啦A夢16C/C++簡單圣誕樹17C/C++小宇宙18C/C++冰墩墩19C/C++七彩花朵20C/C++玫瑰花21C/C++小豬佩奇22C/C++簡易愛心23C/C++流星雨24C/C++2048小游戲25C/C++愛心圣誕樹26C/C++文字跑馬燈27C/C++教師工作量管理系統(tǒng)28C/C++滿天繁星29C/C++漂浮愛心30C/C++五子棋小游戲31C/C++球球大作戰(zhàn)小游戲32C/C++走迷宮小游戲33C/C++粉色愛心34C/C++跨年煙花35C/C++棕色小熊36C/C++粉色動態(tài)愛心37C/C++新春煙花敬請期待……

寫在前面

C/C++語言實現(xiàn)李峋同款跳動的愛心完整代碼。

首先,我們需要知道C++作為一種高級編程語言,擁有強大的功能和靈活的語法,非常適合用來制作各種有趣的動畫效果。而跳動的愛心,正是一種既簡單又富有創(chuàng)意的動畫效果,非常適合用來作為編程初學者的練習項目。要實現(xiàn)這個效果,我們需要用到C++的圖形庫和定時器功能。圖形庫可以幫助我們在控制臺或窗口中繪制出愛心的形狀,而定時器則可以讓愛心以一定的頻率跳動起來。

技術需求

圖形庫(Graphics Library):使用 graphics.h 提供的圖形功能來繪制點、圓形、文字等圖形元素。通過 setfillcolor、solidcircle、outtextxy 等函數(shù)來控制圖形的顏色、形狀和位置。 數(shù)學運算與公式:代碼使用了數(shù)學公式生成心形曲線的點坐標。特別是通過 sin 和 cos 函數(shù),結合參數(shù)方程繪制心形曲線。同時使用了距離計算公式 sqrt(pow(x, 2) + pow(y, 2)) 來處理點之間的關系。 隨機數(shù)生成:通過 rand() 函數(shù)生成隨機數(shù),用于隨機化圖形的顏色、大小、位置等,使得動畫效果更具動感和變化性。隨機數(shù)還被用來控制每個點是否生成。 動畫生成:通過逐幀生成圖像,利用 saveimage 和 loadimage 函數(shù)保存并加載每一幀圖像,實現(xiàn)動畫效果。每幀的點位置隨著時間變化,形成動態(tài)效果。 圖像處理:利用 setorigin、setaspectratio 等函數(shù)調整圖形坐標系,使得圖形能適應不同的屏幕分辨率和顯示效果。 文本繪制:使用 outtextxy 函數(shù)將文本繪制到圖形上,這里用來顯示"我愛你"等信息,增強圖形的表現(xiàn)力。 內存與性能管理:通過存儲每一幀的圖像,使用 images[frame] 數(shù)組來管理圖像數(shù)據(jù),確保每一幀能夠被獨立處理和保存。

環(huán)境搭建

環(huán)境:C/C++

軟件:Visual Studio 2022

安裝教程:C語言環(huán)境搭建教程(Visual Studio)

1. EasyX是什么

EasyX是一個專為C++初學者和愛好者設計的圖形庫。該庫以簡潔易用、功能實用為宗旨,通過封裝Windows GDI接口,極大降低了C++編程中圖形界面設計的復雜度,使得用戶能夠快速上手并實現(xiàn)各類圖形圖像處理任務。

EasyX提供了一系列豐富的API函數(shù),涵蓋了繪制基本圖形(如線段、圓形、矩形等)、填充圖形、顯示文本、加載與保存圖片、顏色設置以及鼠標鍵盤事件處理等功能。通過簡單的函數(shù)調用,開發(fā)者可以高效地進行2D圖形繪制和交互式程序設計。

總的來說,EasyX以其友好的學習曲線和高效的圖形處理能力,極大地激發(fā)了C++初學者對計算機圖形學的興趣,是廣大編程入門者和教育領域廣泛采用的一款圖形庫工具。

2. 下載安裝EasyX

?

1.進入EasyX官網(wǎng),點擊下載按鈕開始下載

2.下載完成后進入下載目錄,雙擊.exe文件無腦安裝即可

接下來,讓我們一步步來實現(xiàn)這個跳動的愛心。首先,我們需要通過一系列的數(shù)學公式來定義愛心的形狀,比如使用參數(shù)方程來描述愛心的輪廓。然后,我們可以使用C++的圖形庫來繪制出這個形狀。當繪制好愛心后,就要想辦法讓它跳動起來了,這里我們可以使用C++的定時器功能,設置一個合適的時間間隔,讓愛心在每個時間間隔內改變位置或大小,從而產生跳動的效果。

完整代碼

#include

#include

#include

#include

#include

struct Point {

double x, y;

COLORREF color;

};

const int MAX_POINTS = 256;

const COLORREF colors[MAX_POINTS] = {

RGB(255, 192, 203), // 淺粉色 (Light Pink)

RGB(255, 182, 193), // 淡粉紅 (LightPink)

RGB(255, 105, 180), // 熱粉紅 (HotPink)

RGB(255, 20, 147), // 深粉色 (DeepPink)

RGB(219, 112, 147), // 濃粉紅 (PaleVioletRed)

RGB(255, 174, 185), // 淺玫瑰紅 (LightPink)

RGB(255, 0, 144) // 紫紅色 (Crimson)

};

const int xScreen = GetSystemMetrics(SM_CXSCREEN);

const int yScreen = GetSystemMetrics(SM_CYSCREEN) - 100;

const double PI = 3.14159265359;

const double E = 2.71828;

const double AVG_DISTANCE = 0.162;

const int NUM_ORIGIN_POINTS = 506;

const int NUM_CIRCLES = 210;

const int NUM_FRAMES = 20;

const int COLOR_RANGE = 6;

Point origin_points[NUM_ORIGIN_POINTS];

Point points[NUM_CIRCLES * NUM_ORIGIN_POINTS];

IMAGE images[NUM_FRAMES];

int create_random(int min, int max) {

return rand() % (max - min + 1) + min;

}

void create_data() {

int index = 0;

double x1 = 0, y1 = 0, x2 = 0, y2 = 0;

// Generate origin points

for (double radian = 0.1; radian <= 2 * PI; radian += 0.005) {

x2 = 16 * pow(sin(radian), 3);

y2 = 13 * cos(radian) - 5 * cos(2 * radian) - 2 * cos(3 * radian) - cos(4 * radian);

double distance = sqrt(pow(x2 - x1, 2) + pow(y2 - y1, 2));

if (distance > AVG_DISTANCE) {

x1 = x2, y1 = y2;

origin_points[index].x = x2;

origin_points[index++].y = y2;

}

}

// Generate points

index = 0;

for (double size = 0.1, lightness = 1.5; size <= 20; size += 0.1) {

double success_p = 1 / (1 + pow(E, 8 - size / 2));

if (lightness > 1) lightness -= 0.0025;

for (int i = 0; i < NUM_ORIGIN_POINTS; ++i) {

if (success_p > create_random(0, 100) / 100.0) {

COLORREF color = colors[create_random(0, COLOR_RANGE)];

points[index].color = RGB(GetRValue(color) / lightness, GetGValue(color) / lightness, GetBValue(color) / lightness);

points[index].x = size * origin_points[i].x + create_random(-4, 4);

points[index++].y = size * origin_points[i].y + create_random(-4, 4);

}

}

}

int points_size = index;

// Generate images

for (int frame = 0; frame < NUM_FRAMES; ++frame) {

images[frame] = IMAGE(xScreen, yScreen);

SetWorkingImage(&images[frame]);

setorigin(xScreen / 2, yScreen / 2);

setaspectratio(1, -1);

for (index = 0; index < points_size; ++index) {

double x = points[index].x, y = points[index].y;

double distance = sqrt(pow(x, 2) + pow(y, 2));

double distance_increase = -0.0009 * distance * distance + 0.35714 * distance + 5;

double x_increase = distance_increase * x / distance / NUM_FRAMES;

double y_increase = distance_increase * y / distance / NUM_FRAMES;

points[index].x += x_increase;

points[index].y += y_increase;

setfillcolor(points[index].color);

solidcircle(points[index].x, points[index].y, 1);

}

……

代碼分析

這段代碼使用了 C++ 中的圖形庫來生成一系列動畫圖像,并展示一個基于愛心形狀的圖案。下面將詳細分析該代碼的各個部分,包括結構體定義、常量聲明、函數(shù)實現(xiàn)和程序的執(zhí)行流程。

1. 引用的頭文件

#include

#include

#include

#include

#include

graphics.h:是 C++ 中的圖形處理庫,提供了用于繪制圖形和圖像的函數(shù)。conio.h:用于控制臺輸入輸出,包括 _kbhit()(檢測是否有按鍵輸入)等功能。ctime:用于獲取系統(tǒng)時間,主要用于生成隨機數(shù)。cmath:提供數(shù)學運算函數(shù),如 pow、sqrt 等。cstdlib:用于生成隨機數(shù)等操作。

2. 數(shù)據(jù)結構

struct Point {

double x, y;

COLORREF color;

};

定義了一個 Point 結構體,用來存儲二維坐標點的 x 和 y 值,以及一個 color 屬性,代表該點的顏色。COLORREF 是一個顏色的結構,通常包含 RGB 顏色值。

3. 常量聲明

const int MAX_POINTS = 256;

const COLORREF colors[MAX_POINTS] = {

RGB(255, 192, 203), RGB(255, 182, 193), RGB(255, 105, 180),

RGB(255, 20, 147), RGB(219, 112, 147), RGB(255, 174, 185), RGB(255, 0, 144)

};

const int xScreen = GetSystemMetrics(SM_CXSCREEN);

const int yScreen = GetSystemMetrics(SM_CYSCREEN) - 100;

const double PI = 3.14159265359;

const double E = 2.71828;

const double AVG_DISTANCE = 0.162;

const int NUM_ORIGIN_POINTS = 506;

const int NUM_CIRCLES = 210;

const int NUM_FRAMES = 20;

const int COLOR_RANGE = 6;

MAX_POINTS:最大點數(shù),表示圖像中最多可以包含 256 個點。colors:存儲了 7 種顏色的 RGB 值,表示動畫中使用的顏色范圍。xScreen, yScreen:獲取屏幕的寬度和高度,并為繪制圖像留出一些空間。PI 和 E:圓周率和自然常數(shù)。AVG_DISTANCE:用于計算點之間的平均距離。NUM_ORIGIN_POINTS:原始數(shù)據(jù)點的數(shù)量。NUM_CIRCLES:生成的圓形點的數(shù)量。NUM_FRAMES:動畫幀的數(shù)量。COLOR_RANGE:顏色范圍,用于選擇顏色的隨機數(shù)范圍。

4. 全局變量

Point origin_points[NUM_ORIGIN_POINTS];

Point points[NUM_CIRCLES * NUM_ORIGIN_POINTS];

IMAGE images[NUM_FRAMES];

origin_points:存儲原始的點數(shù)據(jù),用于計算圖案。points:存儲圖形中每個點的數(shù)據(jù),包括坐標和顏色。images:存儲每一幀生成的圖像。

5. 創(chuàng)建隨機數(shù)的輔助函數(shù)

int create_random(int min, int max) {

return rand() % (max - min + 1) + min;

}

這個函數(shù)用來生成一個指定范圍內的隨機整數(shù)。通過 rand() 函數(shù)生成一個隨機數(shù),然后通過模運算限制其在給定的區(qū)間內。

6. create_data() 函數(shù)

該函數(shù)是整個程序的核心,負責生成原始點數(shù)據(jù)、計算點的位置,并生成動畫的幀。

6.1 生成原始數(shù)據(jù)點

for (double radian = 0.1; radian <= 2 * PI; radian += 0.005) {

x2 = 16 * pow(sin(radian), 3);

y2 = 13 * cos(radian) - 5 * cos(2 * radian) - 2 * cos(3 * radian) - cos(4 * radian);

double distance = sqrt(pow(x2 - x1, 2) + pow(y2 - y1, 2));

if (distance > AVG_DISTANCE) {

x1 = x2, y1 = y2;

origin_points[index].x = x2;

origin_points[index++].y = y2;

}

}

這段代碼生成了一個心形曲線的原始數(shù)據(jù)點,使用了 parametric equations 來繪制心形。通過遍歷角度 radian,計算 x2 和 y2 的坐標,并根據(jù)距離過濾掉過于接近的點。

6.2 生成圓形點數(shù)據(jù)

這一部分通過變化 size 和 lightness,生成了不同大小、不同亮度的點。通過 success_p 來決定點是否應當被生成,最終生成的點被隨機設置顏色,并加入到 points 數(shù)組中。

6.3 生成動畫幀

這一段代碼是核心部分,負責繪制和動畫生成。

通過計算每個點的位置,繪制心形的各個點,并生成動態(tài)的效果。

7. 總結

這段代碼實現(xiàn)了一個基于心形圖案的動態(tài)生成動畫,涉及到數(shù)學公式、圖形繪制、隨機數(shù)生成等多個方面的知識。它通過逐幀繪制來創(chuàng)建動畫效果,并通過修改顏色、位置、大小等參數(shù)來實現(xiàn)動態(tài)展示。

寫在后面

我是一只有趣的兔子,感謝你的喜歡!

柚子快報邀請碼778899分享:C/C++跳動的愛心

http://yzkb.51969.com/

本文內容根據(jù)網(wǎng)絡資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。

轉載請注明,如有侵權,聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/2027355113.html

發(fā)布評論

您暫未設置收款碼

請在主題配置——文章設置里上傳

掃描二維碼手機訪問

文章目錄