{"id":44995,"date":"2026-03-27T14:38:21","date_gmt":"2026-03-27T06:38:21","guid":{"rendered":"https:\/\/www.qiusir.com\/?p=44995"},"modified":"2026-04-03T11:40:57","modified_gmt":"2026-04-03T03:40:57","slug":"qiutopia%e6%b0%a2%e5%8e%9f%e5%ad%90%e6%b3%a2%e5%b0%94%e6%a8%a1%e5%9e%8b","status":"publish","type":"post","link":"https:\/\/www.qiusir.com\/?p=44995","title":{"rendered":"qiutopIA\u6c22\u539f\u5b50\u6ce2\u5c14\u6a21\u578b"},"content":{"rendered":"\r\n<div id=\"qiusir-bohr-v8\" style=\"width: 100%; height: 600px; position: relative; background: #ffffff; border: 1px solid #f0f0f0; border-radius: 12px; overflow: hidden; display: flex; flex-direction: column; font-family: 'Fira Code', 'PingFang SC', monospace; user-select: none;\">\r\n    <div style=\"padding: 15px 20px; border-bottom: 1px solid #f0f0f0; display: flex; justify-content: space-between; align-items: center; z-index: 10; background: rgba(255,255,255,0.95);\">\r\n        <div style=\"display: flex; align-items: center; gap: 10px;\">\r\n            <div style=\"width: 10px; height: 10px; background: #3b82f6; border-radius: 50%;\"><\/div>\r\n            <span style=\"font-size: 15px; font-weight: bold; color: #1e3a8a; letter-spacing: 0.5px;\">Bohr model of hydrogen atom<\/span>\r\n        <\/div>\r\n        <div id=\"qiusir-status-v8\" style=\"font-size: 11px; color: #94a3b8; font-weight: bold; text-transform: uppercase;\">\u51c6\u5907\u5c31\u7eea<\/div>\r\n    <\/div>\r\n\r\n    <div style=\"flex: 1; position: relative;\">\r\n        <canvas id=\"bohr-canvas-v8\" style=\"width: 100%; height: 100%; cursor: crosshair;\"><\/canvas>\r\n        <div style=\"position: absolute; top: 15px; left: 15px; text-align: left; font-size: 9px; color: #cbd5e1; pointer-events: none;\">\r\n            * \u7535\u5b50\u6d41\u5149\u8ddf\u8e2a (Electron Motion Trail)<br>\r\n            * \u5df4\u8033\u672b\u7cfb\u8dc3\u8fc1 (Balmer Series n\u21922)<br>\r\n            * r\u2099 = 0.529 \u00b7 n\u00b2 \u00c5\r\n        <\/div>\r\n    <\/div>\r\n\r\n    <div style=\"padding: 20px; background: #fafafa; border-top: 1px solid #f0f0f0; display: flex; justify-content: center; gap: 12px; flex-wrap: wrap;\">\r\n        <button onclick=\"qiusirTriggerV8(6, '#8A2BE2')\" style=\"padding: 10px 16px; border-radius: 30px; border: 1.5px solid #8A2BE2; background: #fff; color: #8A2BE2; font-size: 12px; font-weight: 700; cursor: pointer; outline: none;\">6\u21922 \u7d2b\u8272<\/button>\r\n        <button onclick=\"qiusirTriggerV8(5, '#4169E1')\" style=\"padding: 10px 16px; border-radius: 30px; border: 1.5px solid #4169E1; background: #fff; color: #4169E1; font-size: 12px; font-weight: 700; cursor: pointer; outline: none;\">5\u21922 \u975b\u84dd<\/button>\r\n        <button onclick=\"qiusirTriggerV8(4, '#00D4D4')\" style=\"padding: 10px 16px; border-radius: 30px; border: 1.5px solid #00D4D4; background: #fff; color: #00D4D4; font-size: 12px; font-weight: 700; cursor: pointer; outline: none;\">4\u21922 \u9752\u84dd<\/button>\r\n        <button onclick=\"qiusirTriggerV8(3, '#FF0000')\" style=\"padding: 10px 16px; border-radius: 30px; border: 1.5px solid #FF0000; background: #fff; color: #FF0000; font-size: 12px; font-weight: 700; cursor: pointer; outline: none;\">3\u21922 \u7ea2\u8272<\/button>\r\n    <\/div>\r\n\r\n    <script>\r\n        (function() {\r\n            const canvas = document.getElementById('bohr-canvas-v8');\r\n            const statusText = document.getElementById('qiusir-status-v8');\r\n            const ctx = canvas.getContext('2d');\r\n            \r\n            let width, height;\r\n            const orbitScale = 11;\r\n            let photonPulses = [];\r\n            let activeLeap = null;\r\n\r\n            \/\/ \u521d\u59cb\u5316\u7535\u5b50\u53ca\u5176\u5386\u53f2\u8f68\u8ff9\r\n            const electrons = [];\r\n            for(let i = 1; i <= 6; i++) {\r\n                electrons.push({ \r\n                    n: i, \r\n                    angle: Math.random() * 6.28,\r\n                    history: [] \r\n                });\r\n            }\r\n\r\n            function resize() {\r\n                width = canvas.width = canvas.offsetWidth;\r\n                height = canvas.height = canvas.offsetHeight;\r\n            }\r\n\r\n            \/\/ \u8dc3\u8fc1\u89e6\u53d1\u51fd\u6570\r\n            window.qiusirTriggerV8 = function(fromN, color) {\r\n                const targetR = 4 * orbitScale; \r\n                const startR = fromN * fromN * orbitScale;\r\n                const dE = Math.abs((-13.6\/(fromN*fromN)) - (-13.6\/4)).toFixed(2);\r\n                \r\n                activeLeap = {\r\n                    n: fromN,\r\n                    currentR: startR,\r\n                    targetR: targetR,\r\n                    angle: electrons[fromN-1].angle,\r\n                    color: color,\r\n                    progress: 0\r\n                };\r\n\r\n                statusText.innerText = fromN + \"\u21922 \u8dc3\u8fc1: \u0394E = \" + dE + \" eV\";\r\n                statusText.style.color = color;\r\n            };\r\n\r\n            function draw() {\r\n                ctx.clearRect(0, 0, width, height);\r\n                const cx = width \/ 2;\r\n                const cy = height \/ 2;\r\n                const orbitBaseColor = '#bfdbfe';\r\n\r\n                \/\/ 1. \u7ed8\u5236\u8f68\u9053\r\n                for(let i = 1; i <= 6; i++) {\r\n                    const r = i * i * orbitScale;\r\n                    ctx.beginPath();\r\n                    ctx.arc(cx, cy, r, 0, Math.PI * 2);\r\n                    \r\n                    let isSpecial = false;\r\n                    if (i === 2) { isSpecial = true; }\r\n                    \r\n                    if (isSpecial) {\r\n                        ctx.strokeStyle = '#60a5fa';\r\n                        ctx.lineWidth = 3; \r\n                    } else {\r\n                        ctx.strokeStyle = orbitBaseColor;\r\n                        ctx.lineWidth = 1.5; \r\n                    }\r\n                    ctx.stroke();\r\n\r\n                    \/\/ \u9519\u5f00\u6807\u6ce8\r\n                    const angle_deg = -60 + (i - 1) * 72; \r\n                    const angle_rad = angle_deg * (Math.PI \/ 180);\r\n                    const tx = cx + Math.cos(angle_rad) * r + 10;\r\n                    const ty = cy + Math.sin(angle_rad) * r - 5;\r\n                    \r\n                    ctx.fillStyle = isSpecial ? '#2563eb' : '#94a3b8';\r\n                    ctx.font = 'bold 9px monospace';\r\n                    const energy = (-13.6 \/ (i * i)).toFixed(2);\r\n                    const radius\u00c5 = (0.529 * i * i).toFixed(1);\r\n                    ctx.fillText(\"n=\" + i + \" [r=\" + radius\u00c5 + \"\u00c5, E=\" + energy + \"eV]\", tx, ty);\r\n                }\r\n\r\n                \/\/ 2. \u539f\u5b50\u6838\r\n                ctx.fillStyle = '#ef4444';\r\n                ctx.beginPath();\r\n                ctx.arc(cx, cy, 7, 0, Math.PI * 2);\r\n                ctx.fill();\r\n\r\n                \/\/ 3. \u7ed5\u8f6c\u7535\u5b50\u53ca\u6d41\u5149\u8f68\u8ff9\r\n                electrons.forEach(e => {\r\n                    let isLeaping = false;\r\n                    if (activeLeap !== null) {\r\n                        if (activeLeap.n === e.n) {\r\n                            isLeaping = true;\r\n                        }\r\n                    }\r\n\r\n                    if (isLeaping === false) {\r\n                        e.angle += 0.012 \/ (e.n * 0.4 + 0.6);\r\n                        const r = e.n * e.n * orbitScale;\r\n                        const ex = cx + Math.cos(e.angle) * r;\r\n                        const ey = cy + Math.sin(e.angle) * r;\r\n\r\n                        e.history.push({x: ex, y: ey});\r\n                        if (e.history.length > 12) {\r\n                            e.history.shift();\r\n                        }\r\n\r\n                        \/\/ \u7ed8\u5236\u6d41\u5149\u6b8b\u5f71 (\u5faa\u73af\u4ee3\u66ff\u903b\u8f91\u5224\u65ad)\r\n                        for(let j = 0; j < e.history.length; j++) {\r\n                            const point = e.history[j];\r\n                            const ratio = (j + 1) \/ e.history.length;\r\n                            ctx.beginPath();\r\n                            ctx.fillStyle = 'rgba(37, 99, 235, ' + (ratio * 0.3) + ')';\r\n                            ctx.arc(point.x, point.y, 1 + ratio * 1.5, 0, Math.PI * 2);\r\n                            ctx.fill();\r\n                        }\r\n\r\n                        ctx.fillStyle = 'rgba(37, 99, 235, 0.7)';\r\n                        ctx.beginPath();\r\n                        ctx.arc(ex, ey, 2.5, 0, Math.PI * 2);\r\n                        ctx.fill();\r\n                    }\r\n                });\r\n\r\n                \/\/ 4. \u5904\u7406\u8dc3\u8fc1\r\n                if (activeLeap !== null) {\r\n                    activeLeap.progress += 0.05;\r\n                    \r\n                    if (activeLeap.progress >= 1) {\r\n                        activeLeap.progress = 1;\r\n                        photonPulses.push({ x: cx, y: cy, r: 0, opacity: 1, color: activeLeap.color });\r\n                        activeLeap = null;\r\n                    }\r\n\r\n                    if (activeLeap !== null) {\r\n                        const r = activeLeap.currentR + (activeLeap.targetR - activeLeap.currentR) * activeLeap.progress;\r\n                        activeLeap.angle += 0.03;\r\n                        const lx = cx + Math.cos(activeLeap.angle) * r;\r\n                        const ly = cy + Math.sin(activeLeap.angle) * r;\r\n                        \r\n                        ctx.fillStyle = activeLeap.color;\r\n                        ctx.beginPath();\r\n                        ctx.arc(lx, ly, 4, 0, Math.PI * 2);\r\n                        ctx.fill();\r\n                    }\r\n                }\r\n\r\n                \/\/ 5. \u7ed8\u5236\u5149\u5b50\u8109\u51b2\u8f68\u8ff9\r\n                photonPulses = photonPulses.filter(p => {\r\n                    p.r += 6;\r\n                    p.opacity -= 0.025;\r\n                    \r\n                    for(let layer = 0; layer < 4; layer++) {\r\n                        const layerR = p.r - (layer * 8);\r\n                        const layerOpacity = p.opacity * (1 - layer * 0.25);\r\n                        \r\n                        let canDraw = false;\r\n                        if (layerR > 0) {\r\n                            if (layerOpacity > 0) {\r\n                                canDraw = true;\r\n                            }\r\n                        }\r\n\r\n                        if (canDraw) {\r\n                            ctx.save();\r\n                            ctx.beginPath();\r\n                            ctx.strokeStyle = p.color;\r\n                            ctx.globalAlpha = layerOpacity;\r\n                            ctx.lineWidth = 1;\r\n                            const segments = 50; \r\n                            for(let j = 0; j <= segments; j++) {\r\n                                let a = (j\/segments) * 6.28;\r\n                                let wave = Math.sin(a * 10 + layerR * 0.2) * 2.5;\r\n                                ctx.lineTo(p.x + Math.cos(a)*(layerR+wave), p.y + Math.sin(a)*(layerR+wave));\r\n                            }\r\n                            ctx.stroke();\r\n                            ctx.restore();\r\n                        }\r\n                    }\r\n                    \r\n                    let alive = false;\r\n                    if (p.opacity > 0) { alive = true; }\r\n                    return alive;\r\n                });\r\n\r\n                requestAnimationFrame(draw);\r\n            }\r\n\r\n            window.addEventListener('resize', resize);\r\n            resize();\r\n            draw();\r\n        })();\r\n    <\/script>\r\n<\/div>\r\n","protected":false},"excerpt":{"rendered":"<p>Bohr model of hydrogen atom \u51c6\u5907\u5c31\u7eea * \u7535\u5b50\u6d41\u5149\u8ddf\u8e2a (Electron Mot &#8230; <a title=\"qiutopIA\u6c22\u539f\u5b50\u6ce2\u5c14\u6a21\u578b\" class=\"read-more\" href=\"https:\/\/www.qiusir.com\/?p=44995\" aria-label=\"\u9605\u8bfb qiutopIA\u6c22\u539f\u5b50\u6ce2\u5c14\u6a21\u578b\">\u9605\u8bfb\u66f4\u591a<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[5,7],"tags":[443,247],"class_list":["post-44995","post","type-post","status-publish","format-standard","hentry","category-physics","category-ict","tag-ai","tag-physics"],"_links":{"self":[{"href":"https:\/\/www.qiusir.com\/index.php?rest_route=\/wp\/v2\/posts\/44995","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.qiusir.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.qiusir.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.qiusir.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.qiusir.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=44995"}],"version-history":[{"count":4,"href":"https:\/\/www.qiusir.com\/index.php?rest_route=\/wp\/v2\/posts\/44995\/revisions"}],"predecessor-version":[{"id":45000,"href":"https:\/\/www.qiusir.com\/index.php?rest_route=\/wp\/v2\/posts\/44995\/revisions\/45000"}],"wp:attachment":[{"href":"https:\/\/www.qiusir.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=44995"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.qiusir.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=44995"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.qiusir.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=44995"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}