亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C語言實(shí)現(xiàn)動(dòng)態(tài)愛心代碼

 更新時(shí)間:2022年11月10日 11:24:53   作者:Kk.巴扎嘿  
這篇文章主要為大家詳細(xì)介紹了如何通過C語言實(shí)現(xiàn)動(dòng)態(tài)愛心的效果,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,還不快跟隨小編一起get李峋同款愛心代碼

代碼如下:

#include <stdio.h>
#include <math.h>
#include <windows.h>
#include <tchar.h>
 
float f(float x, float y, float z) {
float a = x * x + 9.0f / 4.0f * y * y + z * z - 1;
return a * a * a - x * x * z * z * z - 9.0f / 80.0f * y * y * z * z * z;
}
 
float h(float x, float z) {
  for (float y = 1.0f; y >= 0.0f; y -= 0.001f)
if (f(x, y, z) <= 0.0f)
return y;
return 0.0f;
}
 
int main() {
HANDLE o = GetStdHandle(STD_OUTPUT_HANDLE);
_TCHAR buffer[25][80] = { _T(' ') };
_TCHAR ramp[] = _T(".:-=+*#%@");
 
for (float t = 0.0f;; t += 0.1f) {
	int sy = 0;
	float s = sinf(t);
	float a = s * s * s * s * 0.2f;
	for (float z = 1.3f; z > -1.2f; z -= 0.1f) {
	_TCHAR* p = &buffer[sy++][0];
	float tz = z * (1.2f - a);
	for (float x = -1.5f; x < 1.5f; x += 0.05f) {
	float tx = x * (1.2f + a);
	float v = f(tx, 0.0f, tz);
	if (v <= 0.0f) {
	float y0 = h(tx, tz);
	float ny = 0.01f;
	float nx = h(tx + ny, tz) - y0;
	float nz = h(tx, tz + ny) - y0;
	float nd = 1.0f / sqrtf(nx * nx + ny * ny + nz * nz);
	float d = (nx + ny - nz) * nd * 0.5f + 0.5f;
	*p++ = ramp[(int)(d * 5.0f)];
}
else
	*p++ = ' ';
}
}
 
	for (sy = 0; sy < 25; sy++) {
	COORD coord = { 0, sy };
	SetConsoleCursorPosition(o, coord);
	WriteConsole(o, buffer[sy], 79, NULL, 0);
}
Sleep(33);
}
}

運(yùn)行截圖(動(dòng)態(tài)效果下愛心形狀會(huì)像呼吸一樣起伏變化):

補(bǔ)充

當(dāng)然除了C語言,還可以通過Python或者JavaScript實(shí)現(xiàn)一些動(dòng)態(tài)愛心效果,下面是小編為大家整理的一些示例代碼,希望對大家有所幫助

python

import random
from math import sin, cos, pi, log
from tkinter import *

CANVAS_WIDTH = 1960  # 畫布的寬
CANVAS_HEIGHT =  1000 # 畫布的高
CANVAS_CENTER_X = CANVAS_WIDTH / 2  # 畫布中心的X軸坐標(biāo)
CANVAS_CENTER_Y = CANVAS_HEIGHT / 2  # 畫布中心的Y軸坐標(biāo)
IMAGE_ENLARGE = 11  # 放大比例
HEART_COLOR = "#ff2121"  # 心的顏色,這個(gè)是中國紅


def heart_function(t, shrink_ratio: float = IMAGE_ENLARGE):
    """
    “愛心函數(shù)生成器”
    :param shrink_ratio: 放大比例
    :param t: 參數(shù)
    :return: 坐標(biāo)
    """
    # 基礎(chǔ)函數(shù)
    x = 16 * (sin(t) ** 3)
    y = -(13 * cos(t) - 5 * cos(2 * t) - 2 * cos(3 * t) - cos(4 * t))

    # 放大
    x *= shrink_ratio
    y *= shrink_ratio

    # 移到畫布中央
    x += CANVAS_CENTER_X
    y += CANVAS_CENTER_Y

    return int(x), int(y)


def scatter_inside(x, y, beta=0.15):
    """
    隨機(jī)內(nèi)部擴(kuò)散
    :param x: 原x
    :param y: 原y
    :param beta: 強(qiáng)度
    :return: 新坐標(biāo)
    """
    ratio_x = - beta * log(random.random())
    ratio_y = - beta * log(random.random())

    dx = ratio_x * (x - CANVAS_CENTER_X)
    dy = ratio_y * (y - CANVAS_CENTER_Y)

    return x - dx, y - dy


def shrink(x, y, ratio):
    """
    抖動(dòng)
    :param x: 原x
    :param y: 原y
    :param ratio: 比例
    :return: 新坐標(biāo)
    """
    force = -1 / (((x - CANVAS_CENTER_X) ** 2 + (y - CANVAS_CENTER_Y) ** 2) ** 0.6)  # 這個(gè)參數(shù)...
    dx = ratio * force * (x - CANVAS_CENTER_X)
    dy = ratio * force * (y - CANVAS_CENTER_Y)
    return x - dx, y - dy


def curve(p):
    """
    自定義曲線函數(shù),調(diào)整跳動(dòng)周期
    :param p: 參數(shù)
    :return: 正弦
    """
    # 可以嘗試換其他的動(dòng)態(tài)函數(shù),達(dá)到更有力量的效果(貝塞爾?)
    return 2 * (2 * sin(4 * p)) / (2 * pi)


class Heart:
    """
    愛心類
    """

    def __init__(self, generate_frame=20):
        self._points = set()  # 原始愛心坐標(biāo)集合
        self._edge_diffusion_points = set()  # 邊緣擴(kuò)散效果點(diǎn)坐標(biāo)集合
        self._center_diffusion_points = set()  # 中心擴(kuò)散效果點(diǎn)坐標(biāo)集合
        self.all_points = {}  # 每幀動(dòng)態(tài)點(diǎn)坐標(biāo)
        self.build(2000)

        self.random_halo = 1000

        self.generate_frame = generate_frame
        for frame in range(generate_frame):
            self.calc(frame)

    def build(self, number):
        # 愛心
        for _ in range(number):
            t = random.uniform(0, 2 * pi)  # 隨機(jī)不到的地方造成愛心有缺口
            x, y = heart_function(t)
            self._points.add((x, y))

        # 愛心內(nèi)擴(kuò)散
        for _x, _y in list(self._points):
            for _ in range(3):
                x, y = scatter_inside(_x, _y, 0.05)
                self._edge_diffusion_points.add((x, y))

        # 愛心內(nèi)再次擴(kuò)散
        point_list = list(self._points)
        for _ in range(4000):
            x, y = random.choice(point_list)
            x, y = scatter_inside(x, y, 0.17)
            self._center_diffusion_points.add((x, y))

    @staticmethod
    def calc_position(x, y, ratio):
        # 調(diào)整縮放比例
        force = 1 / (((x - CANVAS_CENTER_X) ** 2 + (y - CANVAS_CENTER_Y) ** 2) ** 0.520)  # 魔法參數(shù)

        dx = ratio * force * (x - CANVAS_CENTER_X) + random.randint(-1, 1)
        dy = ratio * force * (y - CANVAS_CENTER_Y) + random.randint(-1, 1)

        return x - dx, y - dy

    def calc(self, generate_frame):
        ratio = 10 * curve(generate_frame / 10 * pi)  # 圓滑的周期的縮放比例

        halo_radius = int(4 + 6 * (1 + curve(generate_frame / 10 * pi)))
        halo_number = int(3000 + 4000 * abs(curve(generate_frame / 10 * pi) ** 2))

        all_points = []

        # 光環(huán)
        heart_halo_point = set()  # 光環(huán)的點(diǎn)坐標(biāo)集合
        for _ in range(halo_number):
            t = random.uniform(0, 2 * pi)  # 隨機(jī)不到的地方造成愛心有缺口
            x, y = heart_function(t, shrink_ratio=11.6)  # 魔法參數(shù)
            x, y = shrink(x, y, halo_radius)
            if (x, y) not in heart_halo_point:
                # 處理新的點(diǎn)
                heart_halo_point.add((x, y))
                x += random.randint(-14, 14)
                y += random.randint(-14, 14)
                size = random.choice((1, 2, 2))
                all_points.append((x, y, size))

        # 輪廓
        for x, y in self._points:
            x, y = self.calc_position(x, y, ratio)
            size = random.randint(1, 3)
            all_points.append((x, y, size))

        # 內(nèi)容
        for x, y in self._edge_diffusion_points:
            x, y = self.calc_position(x, y, ratio)
            size = random.randint(1, 2)
            all_points.append((x, y, size))

        for x, y in self._center_diffusion_points:
            x, y = self.calc_position(x, y, ratio)
            size = random.randint(1, 2)
            all_points.append((x, y, size))

        self.all_points[generate_frame] = all_points

    def render(self, render_canvas, render_frame):
        for x, y, size in self.all_points[render_frame % self.generate_frame]:
            render_canvas.create_rectangle(x, y, x + size, y + size, width=0, fill=HEART_COLOR)


def draw(main: Tk, render_canvas: Canvas, render_heart: Heart, render_frame=0):
    render_canvas.delete('all')
    render_heart.render(render_canvas, render_frame)
    main.after(160, draw, main, render_canvas, render_heart, render_frame + 1)


if __name__ == '__main__':
    root = Tk()  # 一個(gè)Tk
    canvas = Canvas(root, bg='black', height=CANVAS_HEIGHT, width=CANVAS_WIDTH)
    canvas.pack()
    heart = Heart()  # 心
    draw(root, canvas, heart)  # 開始畫畫~
    root.mainloop()

效果展示

JavaScript

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>hearts</title>
    <style type="text/css">
    * {
        padding: 0;
        margin: 0;
    }

    body {
        background: #3498db;
        overflow: hidden;
    }

    /**
 	 * 主容器
 	 */
    div#main {
        width: 100vw;
        height: 100vh;
    }

    /**
 	 * 顯示文字
 	 */
    h1#text {
        color: #FFF;
        text-align: center;
    }

    /**
     * heart標(biāo)簽的樣式,一個(gè)紅色的正方形,
     * 將最終圖像旋轉(zhuǎn)45度,并置于縮小一半、半透明狀態(tài),
     * 設(shè)置無限的動(dòng)效
     * 單次動(dòng)效時(shí)間3s
     */
    heart {
        position: absolute;
        width: 20px;
        height: 20px;
        background: #e74c3c;
        transform: rotate(45deg) scale(.5);
        opacity: .5;
        animation-name: scale, opacity;
        animation-duration: 3s;
        animation-iteration-count: infinite;
    }

    /**
     * 用偽類在heart之前畫個(gè)圓并左移十像素
     */
    heart::before {
        position: absolute;
        content: '';
        width: 20px;
        height: 20px;
        background: #e74c3c;
        border-radius: 50%;
        transform: translateX(-10px);
    }

    /**
     *用偽類在heart之后畫個(gè)圓并上移十像素
     */

    heart::after {
        position: absolute;
        content: '';
        width: 20px;
        height: 20px;
        background: #e74c3c;
        border-radius: 50%;
        transform: translateY(-10px);
    }

    /**
     * 跳動(dòng)動(dòng)效
     */
    @keyframes scale {

        25%,
        75% {
            transform: rotate(45deg) scale(1);
        }

        50%,
        100% {
            transform: rotate(45deg) scale(.5);
        }
    }

    /**
     * 改變透明度
     */
    @keyframes opacity {

        25%,
        75% {
            opacity: 1;
        }

        50%,
        100% {
            opacity: .5;
        }
    }
    </style>
</head>

<body>
    <div id="main">
        <h1 id="text"></h1>
    </div>
</body>
<script type="text/javascript">
//獲取父容器
var mainObj = document.getElementById('main')
//獲取文本容器
var textObj = document.getElementById('text')
//獲取瀏覽器的高度
var innerWidth = document.body.clientWidth
var innerHeight = document.body.clientHeight

//計(jì)數(shù)器
var number = 0

/**
 * 持續(xù)出心,直到數(shù)量為521,位置隨機(jī)生成
 */
var interval = setInterval(function() {
    var heart = document.createElement('heart')
    heart.style.left = Math.floor(Math.random() * innerWidth) + 'px'
    heart.style.top = Math.floor(Math.random() * innerHeight) + 'px'
    mainObj.appendChild(heart)
    number++
    textObj.innerHTML = '送你' + number + '個(gè)愛心,請查收!'
    //當(dāng)心的數(shù)量達(dá)到521時(shí)結(jié)束
    if (number >= 521) {
        clearInterval(interval)
    }
}, 50)
</script>

</html>

效果展示

到此這篇關(guān)于C語言實(shí)現(xiàn)動(dòng)態(tài)愛心代碼的文章就介紹到這了,更多相關(guān)C語言動(dòng)態(tài)愛心內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++實(shí)現(xiàn)簡易的彈球小游戲

    C++實(shí)現(xiàn)簡易的彈球小游戲

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)簡易的彈球小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • C++?MiniZip實(shí)現(xiàn)目錄壓縮與解壓的示例詳解

    C++?MiniZip實(shí)現(xiàn)目錄壓縮與解壓的示例詳解

    Zlib是一個(gè)開源的數(shù)據(jù)壓縮庫,提供了一種通用的數(shù)據(jù)壓縮和解壓縮算法,本文主要為大家詳細(xì)介紹了如何利用Zlib實(shí)現(xiàn)目錄壓縮與解壓,需要的小伙伴可以參考下
    2023-11-11
  • Qt5.9畫五角星的方法

    Qt5.9畫五角星的方法

    這篇文章主要為大家詳細(xì)介紹了Qt5.9畫五角星的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • C++解析Json的方法詳解【jsoncpp】

    C++解析Json的方法詳解【jsoncpp】

    這篇文章主要介紹了C++解析Json的方法,結(jié)合實(shí)例形式分析了C++操作json格式數(shù)據(jù)的相關(guān)實(shí)現(xiàn)技巧與注意事項(xiàng),需要的朋友可以參考下
    2017-06-06
  • 字符串的組合算法問題的C語言實(shí)現(xiàn)攻略

    字符串的組合算法問題的C語言實(shí)現(xiàn)攻略

    這篇文章主要介紹了字符串的組合算法問題的C語言實(shí)現(xiàn)攻略,是根據(jù)ACM總結(jié)的經(jīng)典算法問題,需要的朋友可以參考下
    2015-08-08
  • c++選擇排序詳解

    c++選擇排序詳解

    選擇排序(Selection sort)是一種簡單直觀的排序算法。它的工作原理是每一次從無序組的數(shù)據(jù)元素中選出最小(或最大)的一個(gè)元素,存放在無序組的起始位置,無序組元素減少,有序組元素增加,直到全部待排序的數(shù)據(jù)元素排完。
    2017-05-05
  • 淺談C++ 設(shè)計(jì)模式的基本原則

    淺談C++ 設(shè)計(jì)模式的基本原則

    這篇文章主要介紹了++ 設(shè)計(jì)模式的基本原則,主要的目標(biāo)是實(shí)現(xiàn)最終目的,高內(nèi)聚,低耦合,開放封閉原則類的改動(dòng)是通過增加代碼進(jìn)行的,感興趣的小伙伴可參考下面文章的具體內(nèi)容
    2021-09-09
  • 從匯編看c++中多態(tài)的應(yīng)用

    從匯編看c++中多態(tài)的應(yīng)用

    本篇文章是對c++中多態(tài)的應(yīng)用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • 帶你了解如何用C++合并兩個(gè)有序鏈表

    帶你了解如何用C++合并兩個(gè)有序鏈表

    這篇文章主要介紹了c++ 如何合并兩個(gè)有序鏈表,小編感覺這篇文章還不錯(cuò),希望能幫助大家更好的理解和學(xué)習(xí)C++,感興趣的朋友可以了解下
    2021-08-08
  • C++中unique函數(shù)的用法示例

    C++中unique函數(shù)的用法示例

    nique()是C++標(biāo)準(zhǔn)庫函數(shù)里面的函數(shù),下面這篇文章主要給大家介紹了關(guān)于C++中unique函數(shù)用法的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來一起看看吧
    2019-02-02

最新評論