{"version":3,"file":"rotating3d.cjs","sources":["../../../../../src/elements/oscilloscope/renderers/rotating3d.js"],"sourcesContent":["import paper from '@chnak/paper';\n\n/**\n * 3D旋转样式默认配置\n */\nexport const defaultConfig = {\n  rotationSpeed: 1.0, // 旋转速度\n  particleColors: [ // 颜色数组\n    '#ff0080', '#ff4080', '#ff8000', '#ffc000',\n    '#ffff00', '#80ff00', '#00ff80', '#00ffff',\n    '#0080ff', '#8000ff', '#ff00ff', '#ff0080',\n  ],\n};\n\n/**\n * 3D旋转波形渲染器（透视旋转效果）\n * @param {Object} element - 元素实例\n * @param {Array} data - 波形数据\n * @param {number} x - X坐标\n * @param {number} y - Y坐标\n * @param {number} width - 宽度\n * @param {number} height - 高度\n * @param {number} time - 当前时间\n * @param {Object} config - 配置对象（合并了默认配置和用户配置）\n */\nexport default function renderRotating3D(element, data, x, y, width, height, time, config = {}) {\n  // 合并默认配置\n  const cfg = { ...defaultConfig, ...config };\n  \n  if (!data || data.length === 0) return;\n  \n  const centerX = x + width / 2;\n  const centerY = y + height / 2;\n  const maxRadius = Math.min(width, height) / 2 - 20;\n  \n  // 3D旋转角度（随时间旋转）\n  const rotationY = (time * cfg.rotationSpeed) % (Math.PI * 2);\n  const rotationX = Math.sin(time * 0.5) * 0.3; // 轻微的X轴摆动\n  \n  // 计算平均振幅\n  let avgAmplitude = 0;\n  for (let i = 0; i < data.length; i++) {\n    avgAmplitude += Math.abs(data[i]);\n  }\n  avgAmplitude = (avgAmplitude / data.length) * element.sensitivity;\n  \n  // 创建3D波形点\n  const points3D = [];\n  const pointCount = Math.min(data.length, 200);\n  const step = data.length / pointCount;\n  \n  for (let i = 0; i < pointCount; i++) {\n    const dataIndex = Math.floor(i * step);\n    const amplitude = Math.abs(data[dataIndex]) * element.sensitivity;\n    \n    // 3D坐标（在XZ平面上）\n    const angle = (i / pointCount) * Math.PI * 2;\n    const radius = maxRadius * 0.6 + amplitude * maxRadius * 0.4;\n    const x3d = Math.cos(angle) * radius;\n    const z3d = Math.sin(angle) * radius;\n    const y3d = (data[dataIndex] * element.sensitivity) * maxRadius * 0.3;\n    \n    // 应用Y轴旋转\n    const cosY = Math.cos(rotationY);\n    const sinY = Math.sin(rotationY);\n    const xRotated = x3d * cosY - z3d * sinY;\n    const zRotated = x3d * sinY + z3d * cosY;\n    \n    // 应用X轴旋转\n    const cosX = Math.cos(rotationX);\n    const sinX = Math.sin(rotationX);\n    const yRotated = y3d * cosX - zRotated * sinX;\n    const zFinal = y3d * sinX + zRotated * cosX;\n    \n    // 透视投影\n    const perspective = 500;\n    const scale = perspective / (perspective + zFinal);\n    const px = centerX + xRotated * scale;\n    const py = centerY + yRotated * scale;\n    \n    points3D.push({\n      point: new paper.Point(px, py),\n      z: zFinal,\n      amplitude: amplitude,\n      originalIndex: i\n    });\n  }\n  \n  // 按Z深度排序（从远到近）\n  points3D.sort((a, b) => b.z - a.z);\n  \n  // 绘制波形路径\n  const path = new paper.Path();\n  path.strokeColor = element.waveColor;\n  path.strokeWidth = element.lineWidth;\n  \n  for (let i = 0; i < points3D.length; i++) {\n    const p = points3D[i];\n    const alpha = 0.3 + (p.z + maxRadius) / (maxRadius * 2) * 0.7; // 根据深度调整透明度\n    \n    if (i === 0) {\n      path.moveTo(p.point);\n    } else {\n      path.lineTo(p.point);\n    }\n  }\n  \n  // 根据深度调整颜色\n  if (cfg.particleColors && cfg.particleColors.length > 0) {\n    const colorIndex = Math.floor((rotationY / (Math.PI * 2)) * cfg.particleColors.length) % cfg.particleColors.length;\n    path.strokeColor = cfg.particleColors[colorIndex];\n  }\n  \n  // 绘制高亮点（前面的点更亮）\n  for (let i = 0; i < Math.min(20, points3D.length); i++) {\n    const p = points3D[i];\n    const alpha = 0.5 + (p.z + maxRadius) / (maxRadius * 2) * 0.5;\n    const size = 2 + p.amplitude * 5;\n    \n    const circle = new paper.Path.Circle({\n      center: p.point,\n      radius: size\n    });\n    \n      if (cfg.particleColors && cfg.particleColors.length > 0) {\n        const colorIndex = Math.floor((p.originalIndex / pointCount) * cfg.particleColors.length) % cfg.particleColors.length;\n        circle.fillColor = cfg.particleColors[colorIndex];\n      } else {\n      circle.fillColor = element.waveColor;\n    }\n    circle.fillColor.alpha = alpha;\n  }\n}\n\nrenderRotating3D.style = 'rotating3d';\n\n"],"names":[],"mappings":"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"}