{
  "schema": "physics-anim-scene",
  "version": 1,
  "annotations": {
    "version": 2,
    "strokes": []
  },
  "physicsEnvironment": {
    "schema": "physics-anim-environment",
    "version": 1,
    "constants": {
      "pixelsPerMeter": 160,
      "gravityAcceleration": 9.8,
      "coulombK": 8987551792.3
    }
  },
  "pixelsPerMeter": 160,
  "gravityAcceleration": 9.8,
  "coulombK": 8987551792.3,
  "timeScale": 0.5,
  "view": {
    "x": 289.2706511443084,
    "y": 25.917104910085868,
    "scale": 0.7255255255255255
  },
  "canvasBackground": {
    "mode": "coordinate",
    "origin": {
      "x": 0,
      "y": 0
    }
  },
  "entities": [
    {
      "id": 90,
      "type": "RichTextEditor",
      "state": {
        "pos": {
          "x": 360,
          "y": 65
        },
        "width": 660,
        "height": 100,
        "text": "## 重力与质量 · 悬挂法测量\n初始钩码质量 0.20 kg，g = 9.8 m/s²。",
        "imageDataUrl": "",
        "imageName": "",
        "imageFit": "contain",
        "imagePosition": "top",
        "imageHeight": 92,
        "backgroundColor": "#ffffff",
        "backgroundOpacity": 0.96,
        "textColor": "#163047",
        "fontSize": 16,
        "fontWeight": 400,
        "fontFamily": "sans-serif",
        "textAlign": "left",
        "lineHeight": 1.45,
        "padding": 18,
        "borderColor": "#cbd5e1",
        "borderWidth": 1,
        "cornerRadius": 10,
        "showBorder": true,
        "locked": true
      }
    },
    {
      "id": 3,
      "type": "MechanicsPlaneBoundary",
      "state": {
        "pos": {
          "x": 350,
          "y": 145
        },
        "angleDeg": 0,
        "length": 160,
        "elasticityCoefficient": 0,
        "junctionMaterials": {
          "A": {
            "value": 1,
            "revision": 0
          },
          "B": {
            "value": 1,
            "revision": 0
          }
        },
        "friction": 0,
        "frictionMode": "simple",
        "frictionBindings": [],
        "rollingFriction": 0,
        "thickness": 8,
        "doubleSided": true,
        "flipNormal": false,
        "color": "rgba(33, 37, 41, 0.85)",
        "groupId": null,
        "locked": true
      }
    },
    {
      "id": 1,
      "type": "MechanicsHookWeight",
      "state": {
        "pos": {
          "x": 350,
          "y": 485.5
        },
        "vel": {
          "x": 0,
          "y": 0
        },
        "angle": 0,
        "omega": 0,
        "weightPreset": "20g",
        "width": 36,
        "height": 45,
        "mass": 0.02,
        "baseMass": 0.02,
        "densitySettingEnabled": false,
        "frontBackWidthM": 1,
        "fluidInteractionEnabled": true,
        "fluidManualCalibrationEnabled": false,
        "fluidEffectiveDepthM": 0,
        "fluidVolumeM3": 0,
        "fluidReferenceAreaM2": 0,
        "fluidDragCoefficient": -1,
        "fluidLinearDragCoefficientNsM": -1,
        "useGravity": true,
        "elasticityCoefficient": 0,
        "friction": 0,
        "frictionMode": "simple",
        "frictionBindings": [],
        "color": "#64748b",
        "strokeColor": "#495057",
        "hookSize": 7,
        "carriedById": null,
        "parentWeightId": null,
        "pulleyHookId": null,
        "childWeightIds": [],
        "locked": false,
        "showForces": false,
        "forceDisplayAtCoM": false,
        "showVelocityVector": false,
        "showAccelerationVector": false,
        "showTrail": false,
        "maxTrail": 100,
        "trailUnlimited": false
      }
    },
    {
      "id": 2,
      "type": "SpringForceMeter",
      "state": {
        "pos": {
          "x": 350,
          "y": 298.625
        },
        "endpointA": {
          "local": {
            "x": 0,
            "y": -148.625
          },
          "entityId": null,
          "anchor": "center",
          "support": "fixed",
          "fixedVector": null
        },
        "endpointB": {
          "local": {
            "x": 0,
            "y": 148.625
          },
          "entityId": 1,
          "anchor": "top",
          "support": "fixed",
          "fixedVector": null
        },
        "length": 297.25,
        "restLength": 300,
        "stiffness": 20,
        "damping": 0.8,
        "maxForce": 100000,
        "showRestLength": false,
        "thickness": 2,
        "color": "#495057",
        "disabled": false,
        "autoAttach": false,
        "attachDistance": 30,
        "locked": false,
        "routePulleyId": null,
        "autoRoutePulley": true,
        "routePulleyManual": false,
        "routePulleyAuto": false,
        "routePulleySideA": null,
        "routePulleyDir": null,
        "routePulleyWrap": null,
        "multiPulleyRoute": {
          "version": 1,
          "nodes": [],
          "compressedLength": 0,
          "compressedCycles": []
        },
        "contactHalfWidth": 8,
        "collisionMode": "none",
        "rangeN": 5,
        "fullScaleTravel": 100,
        "caseWidth": 55,
        "caseLength": 230,
        "hookMass": 0.05,
        "caseMass": 0.45,
        "caseAngularDamping": 0,
        "caseMaxAngularSpeed": 18,
        "caseAutoAlignToForce": true,
        "caseFixedDirectionEnabled": false,
        "caseFixedDirectionDeg": 90,
        "caseColor": "#f8f9fa",
        "accentColor": "#212529",
        "springColor": "#343a40",
        "showReading": true
      }
    },
    {
      "id": 4,
      "type": "Stopwatch",
      "state": {
        "pos": {
          "x": 620,
          "y": 180
        },
        "width": 148,
        "height": 84,
        "displayStyle": "digital",
        "enabled": false,
        "controlMode": "main",
        "timeScale": 1,
        "precisionSec": 0.01,
        "zeroSimTime": 0,
        "heldSec": 0,
        "showDial": false,
        "faceColor": "#f8f9fa",
        "caseColor": "#343a40",
        "accentColor": "#0d6efd",
        "lcdColor": "#e8f7ef",
        "locked": true
      }
    },
    {
      "id": 91,
      "type": "RichTextEditor",
      "state": {
        "pos": {
          "x": 960,
          "y": 255
        },
        "width": 430,
        "height": 460,
        "text": "### 静止后读 G，分别改变 m\n1. 观察未加载伸长状态的零读数。\n2. 开始后等钩码振动衰减。\n3. 约 8 s 时确认速度接近零，再读 G。\n4. 重置，依次用 0.10、0.20、0.30 kg 复测。\n\n每组计算 G/m，并在纸上绘制 G–m 散点图。\n\n改变质量时保留同一挂点；不使用振动中的瞬时读数。",
        "imageDataUrl": "",
        "imageName": "",
        "imageFit": "contain",
        "imagePosition": "top",
        "imageHeight": 92,
        "backgroundColor": "#ffffff",
        "backgroundOpacity": 0.96,
        "textColor": "#163047",
        "fontSize": 16,
        "fontWeight": 400,
        "fontFamily": "sans-serif",
        "textAlign": "left",
        "lineHeight": 1.45,
        "padding": 18,
        "borderColor": "#cbd5e1",
        "borderWidth": 1,
        "cornerRadius": 10,
        "showBorder": true,
        "locked": true
      }
    },
    {
      "id": 5,
      "type": "ObservationVariables",
      "state": {
        "pos": {
          "x": 960,
          "y": 670
        },
        "width": 420,
        "height": 252,
        "title": "质量与重力",
        "accentColor": "#0f766e",
        "fontSize": 13,
        "compactMode": false,
        "locked": true,
        "editIndex": 0,
        "insertSourceId": "",
        "insertMode": "",
        "definitions": [
          {
            "id": "reading_mass",
            "name": "mass",
            "label": "钩码质量 m / kg",
            "expression": "ref_1_basic_mass",
            "visible": true
          },
          {
            "id": "reading_weight",
            "name": "weight",
            "label": "测力计读数 G / N",
            "expression": "ref_2_spring_force_magnitude",
            "visible": true
          },
          {
            "id": "reading_ratio",
            "name": "ratio",
            "label": "G/m / (N/kg)",
            "expression": "ref_2_spring_force_magnitude / ref_1_basic_mass",
            "visible": true
          },
          {
            "id": "reading_speed",
            "name": "speed",
            "label": "钩码竖直速度 / (m/s)",
            "expression": "ref_1_basic_vy",
            "visible": true
          }
        ]
      }
    },
    {
      "id": 6,
      "type": "CoordinateSystem",
      "state": {
        "pos": {
          "x": 360,
          "y": 730
        },
        "width": 640,
        "height": 235,
        "enabled": true,
        "targetEntityIdX": "",
        "targetEntityIdY": "2",
        "targetEntityId": "",
        "xMode": "time",
        "yMode": "spring_force_magnitude",
        "ySeries": [
          {
            "enabled": true,
            "targetEntityId": "2",
            "yMode": "spring_force_magnitude",
            "color": "#d97706"
          }
        ],
        "projAxisDeg": 0,
        "unwrapAngle": true,
        "timeWindowSec": 10,
        "sampleStepSec": 0.008333333333333333,
        "maxPoints": 3600,
        "autoY": true,
        "yMin": -1,
        "yMax": 1,
        "xLabel": "t / s",
        "yLabel": "G / N",
        "showExtremaX": false,
        "showExtremaY": false,
        "showIntercepts": false,
        "dataSeries": [
          []
        ],
        "data": []
      }
    },
    {
      "id": 98,
      "type": "VariableController",
      "state": {
        "pos": {
          "x": 953.3658519770137,
          "y": 876.1689414725398
        },
        "width": 416.73170395402735,
        "height": 132,
        "title": "变量控制器",
        "targetEntityId": "1",
        "propertyKey": "label:钩码预设",
        "propertyLabel": "钩码预设",
        "propertyIndex": 4,
        "controlMode": "auto",
        "rangeMode": "auto",
        "minValue": 0,
        "maxValue": 1,
        "sliderStep": 0.01,
        "commitWhileRunning": false,
        "runtimeSmoothingEnabled": true,
        "runtimeMaxRate": 12,
        "runtimeTransitionMode": "smooth",
        "runtimeTransitionDuration": 0.1,
        "showTicks": true,
        "compactMode": false,
        "accentColor": "#0b7285",
        "locked": false
      }
    }
  ]
}
