Skip to content

OpenPhysics/OpticsLab

Repository files navigation

OpticsLab

A web-based geometric optics simulation built with SceneryStack. Build scenes with light sources, mirrors, lenses, beam splitters, and refracting interfaces.

Features

Four screens (see src/main.ts):

  • Intro — guided entry to the optical bench and component carousel
  • Lab — open-ended scene building with the full standard component set
  • Presets — load curated preset scenes from a combo box, then explore and edit
  • Diffraction — transmission and reflection gratings plus a focused subset of supporting optics

Optical elements and tools (Intro / Lab / Presets unless noted):

  • Ray, parallel-beam, divergent-beam, and point light sources

  • Reflection at linear and curved mirrors; refraction at curved interfaces

  • Ideal lenses and mirrors, spherical lenses, and beam splitters

  • Detectors with live and acquired intensity charts and an Acquire control

  • Gratings (transmission and reflection) on the Diffraction screen

  • Tools panel: grid, ray density, measuring tape, protractor, extended rays, and related view options

  • Undo / redo for add and remove element actions (keyboard shortcuts; see a11y strings)

  • English and French UI, projector color profile, and PWA support

  • Vitest unit tests for core optics model logic

Quick Start

npm install
npm run icons    # generate PNG icons from public/icons/icon.svg
npm start        # dev server → http://localhost:5173

Scripts

Command Description
npm start / npm run dev Start Vite dev server
npm run build Type-check + production build → dist/
npm run preview Preview the production build locally
npm run check TypeScript type check
npm run lint Biome lint check
npm run format Auto-format all files
npm run fix Lint + auto-fix
npm test Run Vitest unit tests
npm run generate-svg-icon Generate public/icons/icon.svg from optics script
npm run icons Regenerate PNG icons from public/icons/icon.svg
npm run clean Remove dist/

Tech Stack

Tool Version Purpose
SceneryStack ^3.0.0 Simulation framework
Vite ^8 Build tool + dev server
TypeScript ^7 Type-safe JavaScript
Biome ^2.5 Linting + formatting
vite-plugin-pwa ^1 PWA + service worker

License

GNU Affero General Public License v3.0 — see OpenPhysics org license.

Contributing

See OpenPhysics contributing guidelines. Report bugs via GitHub Issues; use org issue templates.

About

Web-based geometric optics simulation. Supports ray sources, parallel and divergent beams, mirrors, lenses, beam splitters, and refraction interfaces.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Releases

Packages

Used by

Contributors

Languages