'use client'; import React, { useMemo, useEffect, useState } from 'react'; const VIEW_WIDTH = 800; const VIEW_HEIGHT = 600; const CENTER_X = VIEW_WIDTH / 2; const CENTER_Y = VIEW_HEIGHT / 2; export const BlackHoleAnimation = () => { // 生成背景星空 const stars = useMemo(() => { return Array.from({ length: 150 }).map((_, i) => ({ id: i, x: Math.random() * VIEW_WIDTH, y: Math.random() * VIEW_HEIGHT, r: Math.random() * 1.5 + 0.5, opacity: Math.random() * 0.7 + 0.3, blinkDuration: Math.random() * 3 + 2, delay: Math.random() * 2, })); }, []); // 生成吸积盘的粒子流纹理 const accretionLayers = useMemo(() => { return Array.from({ length: 6 }).map((_, i) => ({ id: i, rx: 240 - i * 25, // X轴半径 ry: 60 - i * 6, // Y轴半径 (扁平化以模拟透视) strokeWidth: 15 - i, opacity: 0.8 - i * 0.1, dashArray: `${Math.random() * 100 + 50} ${Math.random() * 50 + 20}`, duration: 15 + i * 2, // 不同层旋转速度不同 direction: i % 2 === 0 ? 1 : -1, // 稍微错乱一点的视觉效果 })); }, []); return ( {/* 核心光晕滤镜 */} {/* 强烈的核心模糊 */} {/* 吸积盘渐变 - 模拟多普勒效应(左侧亮蓝/白,右侧红/暗)虽然这里为了美观使用金橙色系 */} {/* 左侧移动向观测者,更亮 */} {/* 右侧远离观测者,更暗红 */} {/* 光子环渐变 */} {/* 1. 背景星空 */} {stars.map((star) => ( ))} {/* 2. 吸积盘 - 后半部分 (在黑洞后面) */} {accretionLayers.map((layer, i) => ( {/* 模拟物质流动的旋转动画 */} ))} {/* 3. 引力透镜效应产生的光晕 (模拟Interstellar效果,黑洞上方的光拱) */} {/* 4. 光子环 (Photon Ring) - 紧贴视界的亮圈 */} {/* 5. 视界 (Event Horizon) - 纯黑核心 */} {/* 6. 吸积盘 - 前半部分 (在黑洞前面) */} {accretionLayers.map((layer, i) => ( ))} {/* 7. 文字标注系统 */} {/* 标注:视界 */} 视界 (Event Horizon) 光线无法逃逸的边界 {/* 标注:吸积盘 */} 吸积盘 (Accretion Disk) 高温旋转的物质流 {/* 标题 */} 超大质量黑洞模拟 ); };