数字海洋生命可视化系统(代码邂逅深蓝)

四段数学方程正演绎着一场跨越代码与生命的奇妙共生。这组“数字海洋生命可视化系统”以Python为浪,用算法作礁,让小水母、蚰蜒、虫子与大水母在黑色幕布上绽放出超越自然的流光。 指尖轻点“小水母”,10000个数据点便化作剔透的伞状体,触须随π/20的时间步长摇曳,5倍余弦函数编织的波纹在彩虹色与深海蓝间切换——当q值驱动的光点跃动时,仿佛真有月光穿透海面,让每个像素都成为发光水母的神经突触。而“蚰蜒”则以20000个坐标点模拟多足生物的诡谲步态,tan函数勾勒的关节在火焰色主题下泛着金属光泽,9倍余弦的躯干如液态银般蜿蜒,在400×400的坐标系里复刻着深海节肢动物的神秘韵律。 最令人称奇的是“大水母”的40000点矩阵——当(k²+e²)/169的计算结果化作伞盖,5倍余弦生成的光斑便如深海热泉般明灭。用户滑动速度滑块时,π/120的时间常数被重新定义,原本缓慢舒展的触手突然加速,在冰川色与森林绿的渐变中,演绎出代码世界里的生命竞速。每个生命体的信息面板都藏着诗意注解:“触须随水流摆动”的背后,是sin与cos函数的千万次迭代;“周期性发光”的视觉盛宴,源自矩阵运算与色彩映射的精密耦合。 这不是简单的动画演示,而是数学方程在画布上的生命宣言。当指尖点击“开始”按钮,那些冰冷的代码突然有了呼吸——4种生命体在5种颜色主题中穿梭,将0与1的海洋幻化成会思考的数字珊瑚。

数字海洋生命可视化系统

部分代码:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
import matplotlib
from matplotlib.widgets import Button

# 设置中文字体支持
plt.rcParams["font.family"] = ["SimHei", "WenQuanYi Micro Hei", "Heiti TC"]

# 创建图形窗口
fig = plt.figure(figsize=(10, 10))
fig.patch.set_facecolor('k')

# 主绘图区域
ax = fig.add_axes([0.1, 0.2, 0.8, 0.7])
ax.set_facecolor('k')
ax.set_xlim(0, 400)
ax.set_ylim(0, 400)
ax.axis('off')

# 按钮区域
ax_play = fig.add_axes([0.2, 0.05, 0.1, 0.075])
ax_pause = fig.add_axes([0.4, 0.05, 0.1, 0.075])
ax_reset = fig.add_axes([0.6, 0.05, 0.1, 0.075])

# 创建按钮
btn_play = Button(ax_play, '播放')
btn_pause = Button(ax_pause, '暂停')
btn_reset = Button(ax_reset, '重置')


class AnimatedPattern:
    def __init__(self, ax):
        self.ax = ax
        self.t = 0
        self.animation = None
        self.paused = False

        # 初始化数据
        self.num_points = 10000
        self.i = np.arange(self.num_points)
        self.x = np.mod(self.i, 200)
        self.y = self.i / 43
        self.k = 5 * np.cos(self.x / 14) * np.cos(self.y / 30)
        self.e = self.y / 8 - 13
        self.d = (self.k ** 2 + self.e ** 2) / 59 + 4
        self.a = np.arctan2(self.k, self.e)

        # 初始位置数据(避免颜色与数据点数量不匹配的问题)
        q = 60 - 3 * np.sin(self.a * self.e) + self.k * (3 + 4 / self.d * np.sin(self.d ** 2 - self.t * 2))
        c = self.d / 2 + self.e / 99 - self.t / 18
        x_data = q * np.sin(c) + 200
        y_data = (q + self.d * 9) * np.cos(c) + 200

        # 创建散点图,添加颜色映射
        self.colors = np.random.rand(self.num_points)
        self.scatter = ax.scatter(x_data, y_data, s=1, c=self.colors,
                                  cmap='rainbow', edgecolors='none', alpha=0.4)

    def update(self, frame):
        if self.paused:
            return self.scatter,

        self.t += np.pi / 20

        # 参数调整
        q = 60 - 3 * np.sin(self.a * self.e) + self.k * (3 + 4 / self.d * np.sin(self.d ** 2 - self.t * 2))
        c = self.d / 2 + self.e / 99 - self.t / 18

        # 计算位置
        x_data = q * np.sin(c) + 200
        y_data = (q + self.d * 9) * np.cos(c) + 200

        # 更新散点位置
        self.scatter.set_offsets(np.column_stack((x_data, y_data)))

        # 动态更新颜色
        colors = (self.colors + 0.01) % 1
        self.scatter.set_array(colors)

        return self.scatter,

    def start_animation(self):
        self.animation = FuncAnimation(fig, self.update, interval=10, blit=True)
        return self.animation

    def toggle_pause(self, event):
        self.paused = not self.paused

    def reset(self, event):
        self.t = 0
        self.paused = False


# 创建动画实例
pattern = AnimatedPattern(ax)

# 连接按钮事件
btn_play.on_clicked(lambda event: setattr(pattern, 'paused', False))
btn_pause.on_clicked(pattern.toggle_pause)
btn_reset.on_clicked(pattern.reset)

# 添加标题
fig.suptitle('动态数学图案生成器', color='white', fontsize=16)

# 启动动画
ani = pattern.start_animation()

# 显示图形
plt.tight_layout()
plt.subplots_adjust(bottom=0.15)
plt.show()

你可能感兴趣的:(数字海洋生命可视化系统(代码邂逅深蓝))