{
  "schema": "physics-anim-scene",
  "version": 1,
  "pixelsPerMeter": 80,
  "gravityAcceleration": 9.8,
  "coulombK": 8987551792.3,
  "timeScale": 1,
  "canvasBackground": {
    "mode": "coordinate",
    "origin": {
      "x": 0,
      "y": 0
    }
  },
  "view": {
    "x": 25,
    "y": 20,
    "scale": 0.72
  },
  "entities": [
    {
      "id": 90,
      "type": "RichTextEditor",
      "state": {
        "pos": {
          "x": 360,
          "y": 65
        },
        "width": 660,
        "height": 100,
        "text": "## 弹簧振子 · 周期与能量\n水平俯视；m = 0.40 kg，k = 10.0 N/m，A = 0.50 m。",
        "fontSize": 16,
        "fontWeight": 400,
        "backgroundColor": "#ffffff",
        "backgroundOpacity": 0.96,
        "textColor": "#163047",
        "borderColor": "#cbd5e1",
        "borderWidth": 1,
        "cornerRadius": 10,
        "showBorder": true,
        "padding": 18,
        "lineHeight": 1.45,
        "locked": true
      }
    },
    {
      "id": 3,
      "type": "MechanicsHorizontalTabletop",
      "state": {
        "pos": {
          "x": 370,
          "y": 320
        },
        "width": 580,
        "height": 200,
        "friction": 0,
        "frictionMode": "simple",
        "rollingFriction": 0,
        "enabled": true,
        "color": "#f1f5f9",
        "borderColor": "#94a3b8",
        "locked": true
      }
    },
    {
      "id": 1,
      "type": "MechanicsBlock",
      "state": {
        "pos": {
          "x": 430,
          "y": 320
        },
        "vel": {
          "x": 0,
          "y": 0
        },
        "width": 60,
        "height": 40,
        "mass": 0.4,
        "angle": 0,
        "omega": 0,
        "color": "#2563eb",
        "useGravity": false,
        "locked": false,
        "elasticityCoefficient": 0,
        "friction": 0,
        "frictionMode": "simple",
        "showForces": false,
        "showVelocityVector": true,
        "showAccelerationVector": false,
        "showTrail": false,
        "isPointMass": false
      }
    },
    {
      "id": 4,
      "type": "MechanicsPlaneBoundary",
      "state": {
        "pos": {
          "x": 150,
          "y": 320
        },
        "length": 160,
        "angleDeg": 90,
        "thickness": 8,
        "elasticityCoefficient": 0,
        "friction": 0,
        "frictionMode": "simple",
        "rollingFriction": 0,
        "doubleSided": true,
        "flipNormal": false,
        "locked": true
      }
    },
    {
      "id": 2,
      "type": "MechanicsSpring",
      "state": {
        "pos": {
          "x": 290,
          "y": 320
        },
        "length": 280,
        "restLength": 240,
        "stiffness": 10,
        "damping": 0,
        "maxForce": 0,
        "autoAttach": false,
        "endpointA": {
          "local": {
            "x": -140,
            "y": 0
          },
          "entityId": null,
          "support": "fixed",
          "anchor": "center"
        },
        "endpointB": {
          "local": {
            "x": 140,
            "y": 0
          },
          "entityId": 1,
          "support": "hinge",
          "anchor": "center"
        },
        "color": "#0f766e",
        "thickness": 3,
        "showRestLength": true,
        "solidLimitEnabled": false,
        "locked": false
      }
    },
    {
      "id": 5,
      "type": "Ruler",
      "state": {
        "pos": {
          "x": 350,
          "y": 450
        },
        "length": 400,
        "thickness": 24,
        "angleDeg": 0,
        "unit": "m",
        "minorStep": 0.25,
        "majorEvery": 4,
        "showTicks": true,
        "showNumbers": true,
        "showMeasure": true,
        "showEntityMarkers": false,
        "commonGraduation": false,
        "fillColor": "#f8fafc",
        "strokeColor": "#64748b",
        "opacity": 1,
        "locked": true
      }
    },
    {
      "id": 6,
      "type": "Stopwatch",
      "state": {
        "pos": {
          "x": 610,
          "y": 180
        },
        "width": 148,
        "height": 84,
        "displayStyle": "digital",
        "controlMode": "main",
        "enabled": false,
        "timeScale": 1,
        "precisionSec": 0.01,
        "zeroSimTime": 0,
        "heldSec": 0,
        "showDial": false,
        "locked": true
      }
    },
    {
      "id": 91,
      "type": "RichTextEditor",
      "state": {
        "pos": {
          "x": 960,
          "y": 260
        },
        "width": 430,
        "height": 470,
        "text": "### 从形变量读取周期\n右端物块从最大伸长处静止释放。\n\n记录第 1 次与第 6 次同方向通过平衡位置的时刻，T = (t₆ − t₁) / 5。\n\n**平衡位置**：物块中心 x = 4.875 m。\n**基准周期**：约 1.257 s。\n\n上图：弹簧伸长量 Δl 随时间。\n下图：蓝色动能，橙色弹性势能。\n\n质量与 k 分别改变；每次先重置。弹簧原长保持 3.00 m，初始形变量保持 0.50 m。",
        "fontSize": 16,
        "fontWeight": 400,
        "backgroundColor": "#ffffff",
        "backgroundOpacity": 0.96,
        "textColor": "#163047",
        "borderColor": "#cbd5e1",
        "borderWidth": 1,
        "cornerRadius": 10,
        "showBorder": true,
        "padding": 18,
        "lineHeight": 1.45,
        "locked": true
      }
    },
    {
      "id": 7,
      "type": "ObservationVariables",
      "state": {
        "pos": {
          "x": 960,
          "y": 660
        },
        "width": 420,
        "height": 252,
        "title": "振动与能量",
        "fontSize": 13,
        "compactMode": false,
        "accentColor": "#0f766e",
        "locked": true,
        "definitions": [
          {
            "id": "reading_extension",
            "name": "extension",
            "label": "形变量 Δl / m",
            "expression": "ref_2_spring_deformation",
            "visible": true
          },
          {
            "id": "reading_ke",
            "name": "ke",
            "label": "动能 Eₖ / J",
            "expression": "ref_1_block_ke",
            "visible": true
          },
          {
            "id": "reading_elastic",
            "name": "elastic",
            "label": "弹性势能 Eₚ / J",
            "expression": "ref_2_spring_elastic_potential",
            "visible": true
          },
          {
            "id": "reading_total",
            "name": "total",
            "label": "总能量 E / J",
            "expression": "ref_1_block_ke + ref_2_spring_elastic_potential",
            "visible": true
          }
        ]
      }
    },
    {
      "id": 8,
      "type": "CoordinateSystem",
      "state": {
        "pos": {
          "x": 360,
          "y": 610
        },
        "width": 640,
        "height": 190,
        "enabled": true,
        "targetEntityIdX": "",
        "targetEntityIdY": "2",
        "xMode": "time",
        "yMode": "spring_deformation",
        "ySeries": [
          {
            "enabled": true,
            "targetEntityId": "2",
            "yMode": "spring_deformation",
            "color": "#0f766e"
          }
        ],
        "sampleStepSec": 0.008333333333333333,
        "maxPoints": 2400,
        "timeWindowSec": 8,
        "autoY": true,
        "xLabel": "t / s",
        "yLabel": "Δl / m",
        "showExtremaX": false,
        "showExtremaY": false,
        "showIntercepts": false,
        "dataSeries": [
          []
        ],
        "data": [],
        "locked": true
      }
    },
    {
      "id": 9,
      "type": "CoordinateSystem",
      "state": {
        "pos": {
          "x": 360,
          "y": 845
        },
        "width": 640,
        "height": 190,
        "enabled": true,
        "targetEntityIdX": "",
        "targetEntityIdY": "1",
        "xMode": "time",
        "yMode": "block_ke",
        "ySeries": [
          {
            "enabled": true,
            "targetEntityId": "1",
            "yMode": "block_ke",
            "color": "#2563eb"
          },
          {
            "enabled": true,
            "targetEntityId": "2",
            "yMode": "spring_elastic_potential",
            "color": "#d97706"
          }
        ],
        "sampleStepSec": 0.008333333333333333,
        "maxPoints": 2400,
        "timeWindowSec": 8,
        "autoY": true,
        "xLabel": "t / s",
        "yLabel": "E / J",
        "showExtremaX": false,
        "showExtremaY": false,
        "showIntercepts": false,
        "dataSeries": [
          [],
          []
        ],
        "data": [],
        "locked": true
      }
    }
  ]
}
