# Binding energy <!-- MICROSIMGEN:BEGIN v1.7 — generated by g08_place_microsims.py; three.js first (§15); do not hand-edit inside --> ## Microsims — three.js ### Binding energy (three.js) <div class="microsim-player"> <iframe src="https://wikitube-3d-microsims.netlify.app/Binding_energy.html" width="100%" height="620" frameborder="0" loading="lazy" sandbox="allow-scripts allow-same-origin" title="Binding energy — three.js microsim"></iframe> </div> **Open it full-screen:** [Binding_energy.html](https://wikitube-3d-microsims.netlify.app/Binding_energy.html) · library `threejs` · route `microsim/threejs/` ### Related microsims Live sims on neighbouring articles: - [[Entropy]] - [[Kinetic_theory_of_gases]] - [[Second_law_of_thermodynamics]] *Sim hosted off-article; the article owns the reference, not the runtime (WIKI_RULES §10.4). Placed by `g08_place_microsims.py`.* <!-- MICROSIMGEN:END --> ## Microsim ### Live player <div class="microsim-player"> <iframe src="https://editor.p5js.org/sciencenibber/full/qRQ8UgF6G" width="100%" height="620" frameborder="0" sandbox="allow-scripts allow-same-origin"></iframe> </div> <div class="microsim-fallback"> <img src="Microsims/thumbs/Binding_energy.png" alt="Binding_energy microsim poster" style="width:100%;border:1px solid #4445;border-radius:6px;"> <p><em>Live microsim (desktop) · <a href="https://editor.p5js.org/sciencenibber/sketches/qRQ8UgF6G">open sketch in the p5.js editor</a></em></p> </div> **Editor URL:** https://editor.p5js.org/sciencenibber/sketches/qRQ8UgF6G **Description (100 words):** The microsim plots binding energy per nucleon B/A against mass number A from 1 to 260, computed live from the Bethe-Weizsacker semi-empirical mass formula. Five sliders weight the volume, surface, Coulomb, asymmetry, and pairing terms; the curve reshapes in real time as the reader changes them. Green dots mark measured B/A for He-4, C-12, O-16, Fe-56, Sn-120, and U-235, with a magenta line at the 8.79 MeV iron peak. A yellow draggable marker reads off A, Z, total B, and B/A; warm-toned curve segments mark the fusion side, cool-toned the fission side. ```js // ===================================================================== // Binding_energy.js -- Wikitube microsim // Article: Binding_energy en.wikitube.io/wiki/Binding_energy // Room: Helium Pattern: D (parametric curves, // efficiency analysis) // --------------------------------------------------------------------- // Idea: an interactive binding-energy-per-nucleon curve B/A as a // function of mass number A, computed live from the Bethe-Weizsacker // semi-empirical mass formula (SEMF). Five sliders expose the five // SEMF coefficients -- volume, surface, Coulomb, asymmetry, pairing -- // and the reader watches the canonical "iron peak" curve reshape as // the underlying terms are weighted differently. // // The SEMF (MeV): // // B(A, Z) = aV * A // - aS * A^(2/3) // - aC * Z*(Z-1) / A^(1/3) // - aA * (A - 2*Z)^2 / A // + delta(A, Z) // // delta = + aP / sqrt(A) if A even and Z even // 0 if A odd // - aP / sqrt(A) if A even and Z odd // // Z(A) is taken on the line of beta stability, the SEMF minimum: // // Z(A) ~ A / (2 + 0.0155 * A^(2/3)) // // Canonical coefficient set (Kaplan / Krane textbook fit, MeV): // aV = 15.75, aS = 17.80, aC = 0.711, aA = 23.70, aP = 11.18 // // Famous landmarks shown on the curve: // * He-4 (A=4, B/A ~ 7.07 MeV) -- doubly magic alpha particle // * C-12 (A=12, B/A ~ 7.68 MeV) // * O-16 (A=16, B/A ~ 7.98 MeV) -- doubly magic // * Fe-56 (A=56, B/A ~ 8.79 MeV) -- the iron peak // * U-235 (A=235, B/A ~ 7.59 MeV) -- fission fuel // * U-238 (A=238, B/A ~ 7.57 MeV) // // The peak around Fe-56 is the physical reason that fusion releases // energy for A < 56 (going right toward the peak) and fission releases // energy for A > 56 (going left toward the peak). The microsim makes // this geometric: the reader drags a marker along the curve, and any // motion toward the peak is exoergic. // // Visual layout (720 x 520 canvas): // * top-left: HUD title + en.wikitube.io/wiki/Binding_energy // * top-right: control hints (drag marker, sliders rescale curve) // * center: B/A vs A curve, A x-axis 1-260, B/A y-axis 0-10 MeV // * landmark dots labeled inline (He-4, C-12, O-16, Fe-56, U-238) // * the reader's marker is a yellow draggable dot // * bottom-left: 5 sliders for the 5 SEMF coefficients // * bottom-right: live (A, Z, B, B/A) readout + canonical equation // // Conventions (Wikitube Betterfire Standard v0): // * single ARTICLE constant at the top, single quotes // * p5.disableFriendlyErrors = true to keep the editor console clean // * non-ASCII (Greek delta, dots, arrows) lives in COMMENTS ONLY; // every text() string literal is ASCII // * Energy-room palette (P5_JS_EDITOR section 4): dark BG, HOT/COLD // tones, STRUCT grey, TRAJ accent // ===================================================================== const ARTICLE = 'Binding_energy'; const TITLE = ARTICLE.replace(/_/g, ' '); p5.disableFriendlyErrors = true; // ----- Energy room palette (P5_JS_EDITOR section 4) ------------------ const BG = 18; const FG = 240; const DIM = [240, 240, 240, 140]; const HOT = [220, 110, 60]; // fusion side (light nuclei) const COLD = [60, 130, 220]; // fission side (heavy nuclei) const STRUCT = [120, 130, 150]; // axes, grid scaffold const TRAJ = [240, 220, 80]; // reader's draggable marker const SCRATCH = [120, 120, 120, 90]; // light grid lines const ACCENT = [200, 100, 220]; // iron-peak highlight const LANDMK = [120, 220, 140]; // famous-nucleus dots // ----- SEMF canonical coefficients (MeV) ----------------------------- // Kaplan / Krane fit; sliders below let the reader perturb them. const AV_DEF = 15.75; const AS_DEF = 17.80; const AC_DEF = 0.711; const AA_DEF = 23.70; const AP_DEF = 11.18; // ----- Plot rectangle (canvas-space pixels) -------------------------- const PLOT_X0 = 70; const PLOT_X1 = 690; const PLOT_Y0 = 60; const PLOT_Y1 = 360; const A_MIN = 1; const A_MAX = 260; const BA_MIN = 0; // MeV per nucleon const BA_MAX = 10; // MeV per nucleon // ----- Famous-nucleus landmarks: [A, label, measured B/A in MeV] ----- // Measured B/A values from AME2020 atomic mass evaluation. const LANDMARKS = [ [4, 'He-4', 7.074], [12, 'C-12', 7.680], [16, 'O-16', 7.976], [56, 'Fe-56', 8.790], [120, 'Sn-120', 8.504], [235, 'U-235', 7.591], ]; // ----- UI controls --------------------------------------------------- let aVSlider, aSSlider, aCSlider, aASlider, aPSlider; let resetBtn; let markerA = 56; // reader's draggable A (starts at the peak) let draggingMarker = false; // ===================================================================== // setup() // ===================================================================== function setup() { createCanvas(720, 520); pixelDensity(2); textFont('system-ui'); // SEMF coefficient sliders, vertical column bottom-left. // Layout: label-row at y, slider sits directly to the right of the label. const sx = 100; // slider x const sw = 160; // slider width const sy0 = 400; // first slider y const dy = 22; // row spacing aVSlider = createSlider(0, 25, AV_DEF, 0.05).position(sx, sy0 + 0 * dy).size(sw); aSSlider = createSlider(0, 35, AS_DEF, 0.05).position(sx, sy0 + 1 * dy).size(sw); aCSlider = createSlider(0, 1.5, AC_DEF, 0.005).position(sx, sy0 + 2 * dy).size(sw); aASlider = createSlider(0, 50, AA_DEF, 0.05).position(sx, sy0 + 3 * dy).size(sw); aPSlider = createSlider(0, 25, AP_DEF, 0.05).position(sx, sy0 + 4 * dy).size(sw); resetBtn = createButton('reset coefficients').position(sx, sy0 + 5 * dy + 4); resetBtn.mousePressed(() => { aVSlider.value(AV_DEF); aSSlider.value(AS_DEF); aCSlider.value(AC_DEF); aASlider.value(AA_DEF); aPSlider.value(AP_DEF); }); } // ===================================================================== // draw() // ===================================================================== function draw() { background(BG); // Read sliders once at the top, into named locals (Energy convention). const aV = aVSlider.value(); const aS = aSSlider.value(); const aC = aCSlider.value(); const aA = aASlider.value(); const aP = aPSlider.value(); drawAxes(); drawGrid(); drawCurve(aV, aS, aC, aA, aP); drawLandmarks(); drawMarker(aV, aS, aC, aA, aP); drawSliderLabels(aV, aS, aC, aA, aP); drawReadout(aV, aS, aC, aA, aP); drawHUD(); } // ===================================================================== // axis transforms: data <-> canvas pixels // ===================================================================== function aToPx(A) { return map(A, A_MIN, A_MAX, PLOT_X0, PLOT_X1); } function pxToA(px) { return map(px, PLOT_X0, PLOT_X1, A_MIN, A_MAX); } function baToPy(BA) { return map(BA, BA_MIN, BA_MAX, PLOT_Y1, PLOT_Y0); // y inverted } // ===================================================================== // Z on the line of beta-stability (SEMF minimum w.r.t. Z) // ===================================================================== function zOfA(A) { // Standard parabolic-minimum approximation derived from setting // dB/dZ = 0 at fixed A in the SEMF. return A / (2 + 0.0155 * Math.pow(A, 2 / 3)); } // ===================================================================== // SEMF: total binding energy B(A, Z) in MeV // ===================================================================== function bindingEnergy(A, Z, aV, aS, aC, aA, aP) { if (A < 1) return 0; const volume = aV * A; const surface = aS * Math.pow(A, 2 / 3); const coulomb = aC * Z * (Z - 1) / Math.pow(A, 1 / 3); const asymmetry = aA * Math.pow(A - 2 * Z, 2) / A; // Pairing term: even-Z even-N gets bonus, odd-odd a penalty, // odd-A nothing. Here Z is generally fractional (line of stability), // so round to the nearest integer for parity classification. const Zi = Math.round(Z); const Ni = A - Zi; let pairing = 0; if ((A % 2) === 0) { if ((Zi % 2) === 0 && (Ni % 2) === 0) pairing = aP / Math.sqrt(A); else pairing = -aP / Math.sqrt(A); } return volume - surface - coulomb - asymmetry + pairing; } // ===================================================================== // drawAxes() -- plot rect, axis labels // ===================================================================== function drawAxes() { // Plot border noFill(); stroke(STRUCT); strokeWeight(1); rect(PLOT_X0, PLOT_Y0, PLOT_X1 - PLOT_X0, PLOT_Y1 - PLOT_Y0); // X-axis ticks at A = 0, 50, 100, 150, 200, 250 fill(DIM); noStroke(); textSize(11); textAlign(CENTER, TOP); for (let A = 0; A <= 250; A += 50) { const px = aToPx(A); stroke(STRUCT); line(px, PLOT_Y1, px, PLOT_Y1 + 4); noStroke(); fill(DIM); text(A, px, PLOT_Y1 + 6); } textAlign(CENTER, TOP); fill(FG); textSize(12); text('mass number A', (PLOT_X0 + PLOT_X1) / 2, PLOT_Y1 + 22); // Y-axis ticks at B/A = 0, 2, 4, 6, 8, 10 textAlign(RIGHT, CENTER); for (let BA = 0; BA <= 10; BA += 2) { const py = baToPy(BA); stroke(STRUCT); line(PLOT_X0 - 4, py, PLOT_X0, py); noStroke(); fill(DIM); text(BA.toFixed(0), PLOT_X0 - 7, py); } push(); translate(PLOT_X0 - 38, (PLOT_Y0 + PLOT_Y1) / 2); rotate(-HALF_PI); textAlign(CENTER, CENTER); fill(FG); textSize(12); text('binding energy per nucleon B/A (MeV)', 0, 0); pop(); } // ===================================================================== // drawGrid() -- light scratch grid inside the plot rect // ===================================================================== function drawGrid() { stroke(SCRATCH); strokeWeight(1); // Vertical gridlines every 50 in A for (let A = 50; A < 250; A += 50) { const px = aToPx(A); line(px, PLOT_Y0, px, PLOT_Y1); } // Horizontal gridlines every 2 in B/A for (let BA = 2; BA < 10; BA += 2) { const py = baToPy(BA); line(PLOT_X0, py, PLOT_X1, py); } // Highlight the iron-peak horizontal at 8.79 MeV stroke(ACCENT[0], ACCENT[1], ACCENT[2], 100); strokeWeight(1); const peakPy = baToPy(8.79); line(PLOT_X0, peakPy, PLOT_X1, peakPy); } // ===================================================================== // drawCurve() -- SEMF B/A(A) sampled along the integer A axis // ===================================================================== function drawCurve(aV, aS, aC, aA, aP) { // Two-tone curve: HOT (fusion side) for A < 56, COLD (fission side) // for A > 56. Drawn as a single polyline with the segment color // chosen at each step. strokeWeight(2); noFill(); let prevPx = null, prevPy = null; for (let A = 1; A <= A_MAX; A++) { const Z = zOfA(A); const B = bindingEnergy(A, Z, aV, aS, aC, aA, aP); const BA = B / A; const px = aToPx(A); const py = baToPy(constrain(BA, BA_MIN - 2, BA_MAX + 2)); if (prevPx !== null) { if (A < 56) stroke(HOT); else stroke(COLD); line(prevPx, prevPy, px, py); } prevPx = px; prevPy = py; } } // ===================================================================== // drawLandmarks() -- famous nuclei with measured B/A // ===================================================================== function drawLandmarks() { noStroke(); textAlign(LEFT, BOTTOM); textSize(10); for (const [A, label, BA_meas] of LANDMARKS) { const px = aToPx(A); const py = baToPy(BA_meas); fill(LANDMK); circle(px, py, 6); fill(LANDMK[0], LANDMK[1], LANDMK[2], 220); // Stagger labels above-or-below to avoid the SEMF curve. if (A < 60) text(label, px + 6, py - 4); else text(label, px - 4, py + 14); } } // ===================================================================== // drawMarker() -- draggable yellow dot, shows live (A, Z, B, B/A) // ===================================================================== function drawMarker(aV, aS, aC, aA, aP) { const A = markerA; const Z = zOfA(A); const B = bindingEnergy(A, Z, aV, aS, aC, aA, aP); const BA = B / A; const px = aToPx(A); const py = baToPy(constrain(BA, BA_MIN, BA_MAX)); // Vertical drop line. stroke(TRAJ[0], TRAJ[1], TRAJ[2], 90); strokeWeight(1); line(px, py, px, PLOT_Y1); // Marker dot. noStroke(); fill(TRAJ); circle(px, py, 10); // Small label near the dot. fill(FG); textSize(11); textAlign(LEFT, BOTTOM); text('A=' + A + ' B/A=' + BA.toFixed(2) + ' MeV', px + 8, py - 4); } // ===================================================================== // drawSliderLabels() -- coefficient name + live value next to slider // ===================================================================== function drawSliderLabels(aV, aS, aC, aA, aP) { noStroke(); fill(FG); textSize(11); textAlign(RIGHT, CENTER); const lx = 96; const sy0 = 408; const dy = 22; text('aV', lx, sy0 + 0 * dy); text('aS', lx, sy0 + 1 * dy); text('aC', lx, sy0 + 2 * dy); text('aA', lx, sy0 + 3 * dy); text('aP', lx, sy0 + 4 * dy); textAlign(LEFT, CENTER); fill(DIM); const rx = 268; text(aV.toFixed(2) + ' MeV', rx, sy0 + 0 * dy); text(aS.toFixed(2) + ' MeV', rx, sy0 + 1 * dy); text(aC.toFixed(3) + ' MeV', rx, sy0 + 2 * dy); text(aA.toFixed(2) + ' MeV', rx, sy0 + 3 * dy); text(aP.toFixed(2) + ' MeV', rx, sy0 + 4 * dy); } // ===================================================================== // drawReadout() -- bottom-right: marker state + canonical equation // ===================================================================== function drawReadout(aV, aS, aC, aA, aP) { const A = markerA; const Z = zOfA(A); const Zi = Math.round(Z); const B = bindingEnergy(A, Z, aV, aS, aC, aA, aP); const BA = B / A; const bx = 420; const by = 408; const dy = 18; noStroke(); fill(FG); textSize(12); textAlign(LEFT, CENTER); text('marker readout', bx, by); textSize(11); fill(DIM); text('A = ' + A, bx, by + 1 * dy); text('Z ~ ' + Zi + ' (stability line)', bx, by + 2 * dy); text('B = ' + B.toFixed(2) + ' MeV', bx, by + 3 * dy); text('B/A = ' + BA.toFixed(3) + ' MeV/nucleon', bx, by + 4 * dy); // Canonical SEMF equation -- ASCII only inside text(). fill(DIM); textSize(10); text('B = aV*A - aS*A^(2/3) - aC*Z(Z-1)/A^(1/3) - aA*(A-2Z)^2/A + delta', PLOT_X0, 500); } // ===================================================================== // drawHUD() -- top-left title + wikitube URL, top-right control hints // ===================================================================== function drawHUD() { noStroke(); textAlign(LEFT, TOP); fill(FG); textSize(22); text(TITLE, 14, 14); fill(DIM); textSize(12); text('Wikitube microsim . en.wikitube.io/wiki/' + ARTICLE, 14, 40); // Top-right control hints. textAlign(RIGHT, TOP); textSize(11); fill(DIM); text('drag yellow marker . sliders rescale curve', width - 12, 16); text('iron peak at A=56 . fusion left, fission right', width - 12, 32); } // ===================================================================== // input: drag the yellow marker along the A axis // ===================================================================== function mousePressed() { // Begin drag if the click lands inside the plot rect. if (mouseX >= PLOT_X0 && mouseX <= PLOT_X1 && mouseY >= PLOT_Y0 && mouseY <= PLOT_Y1) { draggingMarker = true; markerA = Math.round(constrain(pxToA(mouseX), A_MIN, A_MAX)); } } function mouseDragged() { if (draggingMarker) { markerA = Math.round(constrain(pxToA(mouseX), A_MIN, A_MAX)); } } function mouseReleased() { draggingMarker = false; } function keyPressed() { // Arrow keys nudge the marker one A unit at a time. if (keyCode === LEFT_ARROW) markerA = Math.max(A_MIN, markerA - 1); if (keyCode === RIGHT_ARROW) markerA = Math.min(A_MAX, markerA + 1); } ``` ## Links (Wikipedia order) <!-- injected from _registry/childlinks/Binding_energy.json (2026-07-30T02:09:12Z) --> `Astrophysics` · `Atom` · [[Atomic_mass]] · `Atomic_nucleus` · `Atomic_orbital` · `Atomic_physics` · [[Beta_decay]] · `Biology` · `Bond_energy` · [[Caesium]] · `Chemical_bond` · `Chemical_energy` · [[Chemistry]] · `Condensed_matter_physics` · [[Copper]] · `Deuterium` · [[Earth]] · `Electronvolt` · `Elementary_particle` · [[Energy]] · `Energy_level` · `Fuel` · `Gluon` · `Gravitational_binding_energy` · [[Gravitational_field]] · `Hadron` · [[Helium]] · `Inelastic_collision` · `Internal_conversion` · `Internal_energy` · `International_Union_of_Pure_and_Applied_Chemistry` · `Ionization_energies_of_the_elements_(data_page)` · [[Ionization_energy]] · `Kinetic_energy` · `Lambda_baryon` · `Mass` · `Mass_in_special_relativity` · `Mass_number` · `Mass–energy_equivalence` · `Meson` · `Molecular_physics` · `Molecule` · [[Neutron]] · `Nickel-62` · `Nuclear_binding_energy` · `Nuclear_fission` · `Nuclear_force` · [[Nuclear_fusion]] · `Nuclear_physics` · `Nuclear_reaction` · `Nucleon` · `Particle` · [[Photon]] · [[Physics]] · [[Proton]] · `Prout's_hypothesis` · `Q_value_(nuclear_science)` · `Quantum_chemistry` · `Quantum_chromodynamics_binding_energy` · `Quark` · `Radiation` · `Semi-empirical_mass_formula` · `Separation_energy` · `Strong_interaction` · [[Sun]] · `Virial_mass` · [[Wayback_Machine]] · `Wiley-VCH` ## From the vault media library !Binding energy thumb.png *Binding Energy — from the vault's own media holdings, placed 2026-07-09. MTN / Wikitube.io original · CC BY-SA 4.0.* <!-- LOCAL-MEDIA-PASS:END --> > **Room:** [[Helium]] · **Status:** ✅ shipped ## Overview Binding energy is the [[Energy|energy]] required to disassemble a bound [[System|system]] into its separated constituents, or equivalently, the energy released when those constituents come together to form the bound state. Across [[Physics|physics]] it links to mass through Einstein's relation E = Δm·c², which means the bound system weighs less than the sum of its free parts; the missing mass is the mass defect. Chemical bond energies sit at the electronvolt scale, while nuclear binding energies are roughly a million times larger, measured in mega-electronvolts per nucleon. For atomic nuclei the canonical summary is the binding-energy-per-nucleon curve, which rises sharply for the lightest nuclei, plateaus through the medium-mass range, and reaches a broad maximum near iron-56 at about 8.79 MeV per nucleon before slowly declining. Light nuclei therefore release energy by fusing toward iron; heavy nuclei release energy by splitting toward it. Helium-4 is an outlier, anchored at 7.07 MeV per nucleon by its doubly magic closed-shell [[Structure|structure]] — the reason alpha particles are emitted as a unit in [[Radioactive_decay|radioactive decay]] and why fusion to helium dominates stellar energy budgets. The Bethe–Weizsäcker semi-empirical mass formula approximates the nuclear binding energy as a sum of volume, surface, Coulomb, asymmetry, and pairing terms, reproducing the gross shape of the curve and predicting the valley of stability. Analogous binding-energy concepts govern [[Electron|electron]] orbitals in atoms, chemical bonds in molecules, and the gravitational self-energy of stars and planets. ## See also - Room hub: [[Helium]] - p5.js Editor conventions: P5 JS EDITOR - Wiki root: MAIN --- *Scaffolded by `generative-microsim` from row 51 of the Helium sheet on 2026-05-12T01:40:19Z.* <!-- REAL-GENERATIVE-MEDIA:START --> ## From the Real GENERATIVE library > In physics and chemistry, binding energy is the smallest amount of energy required to remove a particle from a system of particles or to disassemble a system of particles into individual parts.[1] In the former meaning the term is predominantly used in condensed matter physics, atomic physics, and chemistry, whereas in nuclear physics the term separation ene ([Wikipedia](https://en.wikipedia.org/wiki/Binding_energy)) <!-- REAL-GENERATIVE-MEDIA:END --> <!-- LOCAL-MEDIA-PASS:START --> <!-- CRAFT-LINK:START g12 --> *Built to the [[WT!P5_js_Microsim_Master_Class|p5.js Master Class]].* <!-- CRAFT-LINK:END --> ## Wikipedia : Wikitube **Strict pair:** [Wikipedia](https://en.wikipedia.org/wiki/Binding_energy) : [Wikitube](https://en.wikitube.io/wiki/Binding_energy) ## Previous hub tags Tree parent: [[Helium]]. Legacy hubs: none. --- *Sources: 1 legacy note. Minted wave 1, 2026-07-30 (v1.6 order).*