独立渲染引擎就绪引擎就绪
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>双传感器差分比较法动画</title>
<style>
html, body {
margin: 0;
padding: 0;
width: 100%;
height: 100%;
background-color: #050810;
display: flex;
align-items: center;
justify-content: center;
overflow: hidden;
font-family: 'Consolas', 'Courier New', monospace;
font-variant-numeric: tabular-nums;
color: #E2E8F0;
}
.container {
width: 100%;
max-width: 1400px;
aspect-ratio: 16 / 9;
position: relative;
box-shadow: 0 0 40px rgba(0, 229, 255, 0.05);
}
svg {
width: 100%;
height: 100%;
display: block;
}
.btn {
cursor: pointer;
transition: opacity 0.2s;
}
.btn:hover {
opacity: 0.8;
}
.unselectable {
user-select: none;
pointer-events: none;
}
/* 进气口流动动画 */
@keyframes flow {
from { stroke-dashoffset: 10; }
to { stroke-dashoffset: 0; }
}
.flow-line {
animation: flow 0.5s linear infinite;
}
</style>
</head>
<body>
<div class="container">
<svg viewBox="0 0 1200 675">
<!-- 滤镜和定义区 -->
<defs>
<filter id="glow-cyan" x="-20%" y="-20%" width="140%" height="140%">
<feGaussianBlur stdDeviation="4" result="blur" />
<feMerge>
<feMergeNode in="blur" />
<feMergeNode in="SourceGraphic" />
</feMerge>
</filter>
<filter id="glow-orange" x="-20%" y="-20%" width="140%" height="140%">
<feGaussianBlur stdDeviation="4" result="blur" />
<feMerge>
<feMergeNode in="blur" />
<feMergeNode in="SourceGraphic" />
</feMerge>
</filter>
<filter id="glow-purple" x="-20%" y="-20%" width="140%" height="140%">
<feGaussianBlur stdDeviation="5" result="blur" />
<feMerge>
<feMergeNode in="blur" />
<feMergeNode in="SourceGraphic" />
</feMerge>
</filter>
<pattern id="grid" width="40" height="40" patternUnits="userSpaceOnUse">
<path d="M 40 0 L 0 0 0 40" fill="none" stroke="rgba(255,255,255,0.03)" stroke-width="1"/>
</pattern>
<linearGradient id="chamber-gradient" x1="0%" y1="0%" x2="0%" y2="100%">
<stop offset="0%" stop-color="#00E5FF" stop-opacity="0.6"/>
<stop offset="100%" stop-color="#00E5FF" stop-opacity="0.1"/>
</linearGradient>
</defs>
<!-- 背景网格 -->
<rect width="1200" height="675" fill="#0A0F1D" />
<rect width="1200" height="675" fill="url(#grid)" />
<!-- 标题区 -->
<text x="30" y="45" fill="#FFF" font-size="24" font-weight="bold" letter-spacing="1">双传感器差分比较法诊断系统</text>
<text x="30" y="75" fill="#A0AEC0" font-size="14">【TRIZ IFR】引入波动的公共场作为共同参考背景,将绝对标定转化为相对一致度比较,彻底消除高精度气源依赖</text>
<!-- =================左侧:物理系统原理图================= -->
<g id="physical-system" transform="translate(0, 20)">
<!-- 进气管道与波动气源提示 -->
<path d="M180 550 L180 470 L220 470 L220 550 Z" fill="#111827" stroke="#4A5568" stroke-width="2"/>
<path d="M200 550 L200 480" stroke="#00E5FF" stroke-width="2" stroke-dasharray="5,5" fill="none" class="flow-line"/>
<text x="200" y="575" fill="#00E5FF" font-size="12" text-anchor="middle">普通气压源 (伴随波动干扰)</text>
<!-- 双腔分流块与内部气室 -->
<path d="M100 390 L300 390 L280 470 L120 470 Z" fill="#0F172A" stroke="#4A5568" stroke-width="2"/>
<path id="gasChamber" d="M110 400 L290 400 L272 460 L128 460 Z" fill="url(#chamber-gradient)" opacity="0.2"/>
<!-- 关键概念强调 -->
<text x="200" y="375" fill="#FFD700" font-size="12" text-anchor="middle" font-weight="bold" style="filter:url(#glow-orange)">↑ 共同承受波动的密闭压力场 ↑</text>
<!-- 传感器 -->
<!-- 参考传感器 -->
<rect x="130" y="300" width="30" height="90" fill="#00E5FF" rx="3" opacity="0.9" style="filter:url(#glow-cyan)"/>
<text x="145" y="350" fill="#000" font-size="12" font-weight="bold" text-anchor="middle" transform="rotate(-90 145,350)">REF</text>
<text x="145" y="290" fill="#00E5FF" font-size="10" text-anchor="middle">标准参考</text>
<!-- 过渡接头与被测传感器 -->
<rect x="235" y="390" width="20" height="10" fill="#CBD5E0" rx="1"/> <!-- 过渡接头 -->
<text x="310" y="398" fill="#A0AEC0" font-size="10">兼容过渡接头</text>
<path d="M255 395 L305 395" stroke="#CBD5E0" stroke-width="1" stroke-dasharray="2" fill="none"/>
<rect x="230" y="290" width="30" height="100" fill="#FF9100" rx="3" opacity="0.9" style="filter:url(#glow-orange)"/>
<text x="245" y="345" fill="#000" font-size="12" font-weight="bold" text-anchor="middle" transform="rotate(-90 245,345)">TEST</text>
<text x="245" y="280" fill="#FF9100" font-size="10" text-anchor="middle">被测样件</text>
<!-- 数据线缆 -->
<path d="M145 300 L145 220 L160 220 L160 170" fill="none" stroke="#00E5FF" stroke-width="2"/>
<path d="M245 290 L245 220 L230 220 L230 170" fill="none" stroke="#FF9100" stroke-width="2"/>
<!-- 同步 ADC 模块 -->
<rect x="100" y="110" width="190" height="60" fill="#111827" stroke="#B388FF" stroke-width="2" rx="6" style="filter:url(#glow-purple)"/>
<text x="195" y="135" fill="#B388FF" font-size="13" font-weight="bold" text-anchor="middle">双路同步采样 ADC</text>
<text x="195" y="155" fill="#A0AEC0" font-size="10" text-anchor="middle">同步误差 < 0.1ms / 自动温度补偿</text>
<!-- 连接到图表区的数据流线 -->
<path d="M290 140 L450 140" fill="none" stroke="#B388FF" stroke-width="2" stroke-dasharray="6,4">
<animate attributeName="stroke-dashoffset" from="20" to="0" dur="0.5s" repeatCount="indefinite"/>
</path>
</g>
<!-- 气源波动控制交互按钮 -->
<g id="btnFluctuation" class="btn" transform="translate(30, 600)">
<rect width="220" height="40" rx="6" fill="#151A2A" stroke="#00E5FF" stroke-width="1.5" style="filter:url(#glow-cyan)"/>
<text x="110" y="25" fill="#00E5FF" text-anchor="middle" font-size="14" font-weight="bold" id="txtFluctuation" class="unselectable">模拟气源波动: [开启]</text>
</g>
<!-- =================右侧:波形及数据分析区================= -->
<!-- 状态面板 -->
<g id="dataPanel" transform="translate(480, 100)">
<rect width="650" height="40" fill="#111827" stroke="#2D3748" rx="4"/>
<text x="15" y="25" fill="#FFF" font-size="14">腔内绝对压 (波动干扰背景):</text>
<text x="235" y="25" fill="#00E5FF" font-size="16" font-weight="bold" id="txtPtotal">0.00 kPaA</text>
<text x="360" y="25" fill="#A0AEC0" font-size="14" id="txtState">状态: 初始化...</text>
</g>
<!-- 主波形图 (对比) -->
<g transform="translate(0, 0)">
<!-- 图表背景及刻度线 -->
<rect x="480" y="160" width="650" height="340" fill="rgba(10, 15, 29, 0.8)" stroke="#2D3748" stroke-width="1"/>
<line x1="480" y1="210" x2="1130" y2="210" stroke="rgba(255,255,255,0.15)" stroke-dasharray="4"/>
<text x="430" y="214" fill="#A0AEC0" font-size="11">300 kPa</text>
<line x1="480" y1="363" x2="1130" y2="363" stroke="rgba(255,255,255,0.15)" stroke-dasharray="4"/>
<text x="430" y="367" fill="#A0AEC0" font-size="11">120 kPa</text>
<text x="440" y="495" fill="#A0AEC0" font-size="11">0 kPa</text>
<!-- 波形路径 -->
<path id="pathRef" fill="none" stroke="#00E5FF" stroke-width="2" style="filter: url(#glow-cyan);"/>
<path id="pathTest" fill="none" stroke="#FF9100" stroke-width="2" style="filter: url(#glow-orange);"/>
<!-- 领航点 -->
<circle id="dotRef" r="4" fill="#00E5FF" style="filter: url(#glow-cyan);" cx="480" cy="500"/>
<circle id="dotTest" r="4" fill="#FF9100" style="filter: url(#glow-orange);" cx="480" cy="500"/>
</g>
<!-- 差分分析小图表 -->
<g transform="translate(0, 0)">
<rect x="480" y="520" width="650" height="90" fill="#0A0F1D" stroke="#4A5568" stroke-width="1"/>
<text x="490" y="540" fill="#B388FF" font-size="12" font-weight="bold">ΔV = TEST - REF (核心:极差波形平稳,原始波动干扰已被完全抵消)</text>
<!-- 0 基准线 -->
<line x1="480" y1="580" x2="1130" y2="580" stroke="rgba(255,255,255,0.2)" stroke-dasharray="4"/>
<text x="440" y="583" fill="#B388FF" font-size="11">0 ΔV</text>
<!-- 差分路径 -->
<path id="pathDiff" fill="none" stroke="#B388FF" stroke-width="2" style="filter: url(#glow-purple);"/>
<circle id="dotDiff" r="4" fill="#B388FF" style="filter: url(#glow-purple);" cx="480" cy="580"/>
</g>
<!-- 最终诊断结论弹窗 -->
<g id="finalResultPanel" opacity="0" transform="translate(900, 180)">
<rect width="210" height="150" fill="rgba(11, 25, 44, 0.95)" stroke="#B388FF" stroke-width="2" rx="6" style="filter:url(#glow-purple)"/>
<text x="105" y="30" fill="#FFF" text-anchor="middle" font-size="16" font-weight="bold">差分诊断结论</text>
<line x1="15" y1="42" x2="195" y2="42" stroke="#B388FF" stroke-dasharray="2,2"/>
<text x="20" y="65" fill="#A0AEC0" font-size="13">比例系数差: <tspan fill="#FFF">2.01 %</tspan></text>
<text x="20" y="90" fill="#A0AEC0" font-size="13">绝对零点偏: <tspan fill="#FFF">1.52 kPa</tspan></text>
<text x="20" y="115" fill="#A0AEC0" font-size="13">相位迟滞差: <tspan fill="#FFF">< 0.1 ms</tspan></text>
<text x="105" y="140" fill="#00E5FF" text-anchor="middle" font-size="15" font-weight="bold">一致性校验: 合格</text>
</g>
</svg>
</div>
<script>
// === 动画与业务逻辑控制 ===
let frame = 0;
const MAX_FRAME = 1200; // 一轮约 20 秒 (按 60fps 计)
let fluctuationEnabled = true;
const pathElRef = document.getElementById('pathRef');
const pathElTest = document.getElementById('pathTest');
const pathElDiff = document.getElementById('pathDiff');
const dotRef = document.getElementById('dotRef');
const dotTest = document.getElementById('dotTest');
const dotDiff = document.getElementById('dotDiff');
const txtPtotal = document.getElementById('txtPtotal');
const txtState = document.getElementById('txtState');
const gasChamber = document.getElementById('gasChamber');
const finalResultPanel = document.getElementById('finalResultPanel');
let pathDataRef = [];
let pathDataTest = [];
let pathDataDiff = [];
// 缓动函数
function lerp(a, b, t) { return a + (b - a) * t; }
function easeInOutCubic(t) {
return t < 0.5 ? 4 * t * t * t : 1 - Math.pow(-2 * t + 2, 3) / 2;
}
// 根据时序计算基础理想压力 P (0 ~ 350)
function getBasePressure(f) {
let p = 100; // 默认大气压 100 kPaA
if (f < 50) p = 100;
else if (f < 100) p = lerp(100, 130, easeInOutCubic((f - 50)/50)); // 气密微升
else if (f < 150) p = lerp(130, 100, easeInOutCubic((f - 100)/50)); // 气密回落
else if (f < 200) p = 100; // 准备升压
else if (f < 400) p = lerp(100, 300, easeInOutCubic((f - 200)/200)); // 升压到 300
else if (f < 550) p = 300; // 保压 300
else if (f < 750) p = lerp(300, 100, easeInOutCubic((f - 550)/200)); // 缓慢降压
else if (f < 850) p = lerp(100, 120, easeInOutCubic((f - 750)/100)); // 微升压校验 120
else p = 120; // 稳定 120
return p;
}
// 模拟普通气源的波动及干扰
function getNoise(f) {
if (!fluctuationEnabled || f > 950) return 0; // 最终展示结果时关闭随机以便清晰阅读
// 低频慢波 + 中频振荡 + 高频小毛刺
let slowWave = Math.sin(f * 0.05) * 8;
let midWave = Math.sin(f * 0.17) * 4;
let highFreq = (Math.random() - 0.5) * 3;
return slowWave + midWave + highFreq;
}
// 决定状态文字
function getStateText(f) {
if (f < 150) return "时序动作: [步骤1] 装入样件与气密自检";
if (f < 400) return "时序动作: [步骤2] 大范围加压 (目标300 kPaA)";
if (f < 550) return "时序动作: [步骤3] 高压阈值保压校验";
if (f < 750) return "时序动作: [步骤4] 缓慢泄压,捕捉动态迟滞";
if (f < 900) return "时序动作: [步骤5] 终段微升交叉比对 (120 kPaA)";
return "时序动作: [分析完毕] 执行差分逻辑并输出一致性矩阵";
}
function update() {
let p_base = getBasePressure(frame);
let p_noise = getNoise(frame);
let p_total = p_base + p_noise;
if (p_total < 0) p_total = 0;
// 传感器模拟特性:
// 标准参考传感器 REF (理想线性追踪总压)
let v_ref = p_total;
// 被测传感器 TEST (包含 1.5 的绝对零偏和 2% 的比例偏差,这就是我们需要算出的指标)
let v_test = p_total * 1.02 + 1.5;
// 计算差分
let v_diff = v_test - v_ref;
// --- 视觉坐标映射 ---
// 图表宽 650,X 范围 480 ~ 1130
let curX = 480 + (frame / MAX_FRAME) * 650;
// 主图表高度范围:160 ~ 500 (范围 340)。量程设为 400 kPa。
let yRef = 500 - (v_ref / 400) * 340;
let yTest = 500 - (v_test / 400) * 340;
// 差分图表高度范围:520 ~ 610。中心基准线 580 (对应 diff = 0)。
// 比例缩放:每 1 kPa 偏差占用 3 像素。
let yDiff = 580 - (v_diff * 3);
// 记录轨迹
pathDataRef.push(`${curX},${yRef}`);
pathDataTest.push(`${curX},${yTest}`);
pathDataDiff.push(`${curX},${yDiff}`);
// 渲染 DOM
pathElRef.setAttribute('d', 'M ' + pathDataRef.join(' L '));
pathElTest.setAttribute('d', 'M ' + pathDataTest.join(' L '));
pathElDiff.setAttribute('d', 'M ' + pathDataDiff.join(' L '));
dotRef.setAttribute('cx', curX); dotRef.setAttribute('cy', yRef);
dotTest.setAttribute('cx', curX); dotTest.setAttribute('cy', yTest);
dotDiff.setAttribute('cx', curX); dotDiff.setAttribute('cy', yDiff);
// 更新文本与气室透明度
txtPtotal.textContent = p_total.toFixed(2) + " kPaA";
txtState.textContent = getStateText(frame);
// 腔体光晕脉动效果
let chamberOpacity = Math.max(0.05, Math.min(0.8, p_total / 350));
gasChamber.setAttribute('opacity', chamberOpacity);
// 最终结果弹窗控制
if (frame > 950) {
finalResultPanel.setAttribute('opacity', '1');
} else {
finalResultPanel.setAttribute('opacity', '0');
}
frame++;
if (frame > MAX_FRAME) {
// 循环重置
frame = 0;
pathDataRef = [];
pathDataTest = [];
pathDataDiff = [];
pathElRef.setAttribute('d', '');
pathElTest.setAttribute('d', '');
pathElDiff.setAttribute('d', '');
}
requestAnimationFrame(update);
}
// 按钮交互绑定
document.getElementById('btnFluctuation').addEventListener('click', () => {
fluctuationEnabled = !fluctuationEnabled;
const txt = document.getElementById('txtFluctuation');
const rect = document.querySelector('#btnFluctuation rect');
if (fluctuationEnabled) {
txt.textContent = "模拟气源波动: [开启]";
txt.setAttribute('fill', '#00E5FF');
rect.setAttribute('stroke', '#00E5FF');
rect.style.filter = "url(#glow-cyan)";
} else {
txt.textContent = "模拟气源波动: [关闭]";
txt.setAttribute('fill', '#4A5568');
rect.setAttribute('stroke', '#4A5568');
rect.style.filter = "none";
}
});
// 页面加载完成后自动启动连续播放
window.addEventListener('DOMContentLoaded', () => {
requestAnimationFrame(update);
});
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>双传感器差分比较系统 - 理想最终解(IFR)</title>
<style>
:root {
--bg-color: #0b0c10;
--panel-bg: #1f2833;
--std-color: #00f2fe; /* Cyan/Blue for Standard */
--test-color: #f8b500; /* Amber for Test */
--text-main: #c5c6c7;
--text-muted: #6b778d;
--grid-color: rgba(69, 162, 158, 0.15);
--accent: #45a29e;
}
body, html {
margin: 0;
padding: 0;
width: 100%;
height: 100%;
background-color: var(--bg-color);
font-family: 'SF Pro Display', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
display: flex;
justify-content: center;
align-items: center;
overflow: hidden;
color: var(--text-main);
}
#animation-container {
width: 95vw;
height: 90vh;
max-width: 1600px;
max-height: 900px;
background: radial-gradient(circle at 50% 50%, #151a22 0%, #0b0c10 100%);
border: 1px solid rgba(69, 162, 158, 0.2);
border-radius: 12px;
box-shadow: 0 20px 50px rgba(0,0,0,0.8), inset 0 0 0 1px rgba(255,255,255,0.05);
position: relative;
display: flex;
flex-direction: column;
}
/* 顶部极简信息栏 */
.top-bar {
position: absolute;
top: 16px;
left: 24px;
right: 24px;
display: flex;
justify-content: space-between;
align-items: center;
z-index: 10;
pointer-events: none;
}
.title-group h1 {
margin: 0;
font-size: 16px;
font-weight: 600;
letter-spacing: 1px;
color: #fff;
text-transform: uppercase;
display: flex;
align-items: center;
gap: 8px;
}
.title-group h1::before {
content: '';
display: block;
width: 6px;
height: 6px;
background-color: var(--std-color);
border-radius: 50%;
box-shadow: 0 0 8px var(--std-color);
}
.subtitle {
font-size: 12px;
color: var(--text-muted);
margin-top: 4px;
}
.status-indicators {
display: flex;
gap: 16px;
font-family: 'JetBrains Mono', 'Fira Code', monospace;
font-size: 11px;
}
.status-item {
display: flex;
align-items: center;
gap: 6px;
background: rgba(31, 40, 51, 0.6);
padding: 4px 10px;
border-radius: 4px;
border: 1px solid rgba(255,255,255,0.05);
}
.blink {
animation: pulse 1.5s infinite;
}
@keyframes pulse {
0% { opacity: 0.4; }
50% { opacity: 1; }
100% { opacity: 0.4; }
}
svg {
width: 100%;
height: 100%;
display: block;
}
/* 绝对定位的小提示文本,不遮挡主体 */
.info-panel {
position: absolute;
bottom: 24px;
left: 24px;
width: 280px;
font-size: 12px;
line-height: 1.5;
color: var(--text-muted);
background: rgba(11, 12, 16, 0.8);
backdrop-filter: blur(10px);
padding: 12px;
border-left: 2px solid var(--accent);
pointer-events: none;
}
.info-panel strong {
color: #fff;
}
</style>
</head>
<body>
<div id="animation-container">
<div class="top-bar">
<div class="title-group">
<h1>双传感器差分比对系统</h1>
<div class="subtitle">TRIZ 最终理想解: 利用同源波动消除绝对误差</div>
</div>
<div class="status-indicators">
<div class="status-item"><span style="color: var(--std-color)">■</span> 标准件: 已标定</div>
<div class="status-item"><span style="color: var(--test-color)">■</span> 被测件: 检测中</div>
<div class="status-item"><span style="color: #ff3366" class="blink">●</span> 气源波动: 活跃</div>
<div class="status-item">同步误差: <0.1ms</div>
</div>
</div>
<!-- SVG 核心动画区 -->
<svg viewBox="0 0 1200 700" preserveAspectRatio="xMidYMid meet" id="main-svg">
<defs>
<!-- 发光滤镜 -->
<filter id="glow-std" x="-20%" y="-20%" width="140%" height="140%">
<feGaussianBlur stdDeviation="4" result="blur" />
<feComposite in="SourceGraphic" in2="blur" operator="over" />
</filter>
<filter id="glow-test" x="-20%" y="-20%" width="140%" height="140%">
<feGaussianBlur stdDeviation="4" result="blur" />
<feComposite in="SourceGraphic" in2="blur" operator="over" />
</filter>
<filter id="glow-diff" x="-20%" y="-20%" width="140%" height="140%">
<feGaussianBlur stdDeviation="3" result="blur" />
<feComposite in="SourceGraphic" in2="blur" operator="over" />
</filter>
<!-- 渐变定义 -->
<linearGradient id="chamber-grad" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" stop-color="#2a3642" />
<stop offset="100%" stop-color="#141a20" />
</linearGradient>
<radialGradient id="pressure-glow" cx="50%" cy="50%" r="50%">
<stop offset="0%" stop-color="#ff3366" stop-opacity="0.3" id="pg-stop1"/>
<stop offset="100%" stop-color="#ff3366" stop-opacity="0" id="pg-stop2"/>
</radialGradient>
<linearGradient id="pipe-grad" x1="0%" y1="0%" x2="100%" y2="0%">
<stop offset="0%" stop-color="#1a1a24" />
<stop offset="50%" stop-color="#3a4a5a" />
<stop offset="100%" stop-color="#1a1a24" />
</linearGradient>
<!-- 网格模式 -->
<pattern id="grid" width="40" height="40" patternUnits="userSpaceOnUse">
<path d="M 40 0 L 0 0 0 40" fill="none" stroke="var(--grid-color)" stroke-width="0.5"/>
</pattern>
<pattern id="fine-grid" width="10" height="10" patternUnits="userSpaceOnUse">
<path d="M 10 0 L 0 0 0 10" fill="none" stroke="var(--grid-color)" stroke-width="0.2"/>
</pattern>
</defs>
<!-- 背景网格 (仅在图表区) -->
<rect x="550" y="100" width="600" height="400" fill="url(#grid)" />
<rect x="550" y="100" width="600" height="400" fill="url(#fine-grid)" />
<!-- ================= 左侧:物理结构 ================= -->
<g transform="translate(100, 250)">
<!-- 进气管道 -->
<rect x="140" y="180" width="20" height="150" fill="url(#pipe-grad)" />
<path d="M120 330 L180 330 L160 360 L140 360 Z" fill="#2a3642" />
<text x="150" y="380" font-size="12" fill="var(--text-muted)" text-anchor="middle">非高精度波动气源</text>
<!-- 气流波动指示器 (动画) -->
<g id="gas-flow" stroke="#ff3366" stroke-width="2" stroke-linecap="round" opacity="0.7">
<path d="M150 200 Q145 220 150 240 T150 280 T150 320" fill="none" />
</g>
<!-- 双腔分流块 (密封腔) -->
<path d="M50,80 L250,80 L280,180 L20,180 Z" fill="url(#chamber-grad)" stroke="#45a29e" stroke-width="2"/>
<path d="M60,90 L240,90 L265,170 L35,170 Z" fill="url(#pressure-glow)" />
<text x="150" y="140" font-size="14" fill="#fff" text-anchor="middle" font-weight="bold" opacity="0.8">同源密闭压力腔</text>
<text x="150" y="160" font-size="10" fill="var(--text-muted)" text-anchor="middle">两级锥面快装结构</text>
<!-- 标准传感器 (左) -->
<g transform="translate(80, 20)">
<rect x="-25" y="0" width="50" height="60" fill="#1f2833" stroke="var(--std-color)" stroke-width="2" rx="4"/>
<rect x="-15" y="60" width="30" height="20" fill="#3a4a5a" />
<circle cx="0" cy="30" r="10" fill="var(--std-color)" filter="url(#glow-std)"/>
<text x="0" y="-15" font-size="12" fill="var(--std-color)" text-anchor="middle">参考传感器</text>
<text x="0" y="-3" font-size="10
积分规则:每轮对话扣10分
等待动画代码生成...
