opticalc 0.1.4

Utility functions and types for common clinical optics calculations used in optometry and ophthalmic settings.
Documentation
# opticalc

JavaScript/TypeScript utilities for common clinical optics calculations used in optometry and ophthalmic settings.

## Installation

```bash
npm install opticalc
```

## Features

- **Index conversion**: Convert measured lens powers between assumed and actual refractive indices
- **Rx conversion**: Scale full sphero‑cyl prescriptions between indices while preserving axis
- **Lensmeter simulation**: Predict what a lensmeter would read for a true Rx at a different index
- **Induced prism**: Compute horizontal/vertical prism from decentration using the full power matrix
- **Crossed cylinders** and **oblique meridian** helpers

## Usage

### Basic Power Conversion

```javascript
import { convertPower } from 'opticalc';

// Convert a measured power from 1.523 to 1.586
const truePower = convertPower(-4.463, 1.523, 1.586);
console.log(truePower); // -4.25
```

### TypeScript

```typescript
import { convertPower, SpheroCyl, convertRx, simulateLensmeterReading } from 'opticalc';

// Convert a full sphero‑cyl Rx between indices
const measured: SpheroCyl = { 
  sphere: -2.00, 
  cylinder: -1.00, 
  axisDeg: 180.0 
};

const trueRx = convertRx(measured, 1.523, 1.586);
console.log(trueRx);

// Simulate what a lensmeter @1.523 would read for a true Rx @1.586
const reading = simulateLensmeterReading(trueRx, 1.523, 1.586);
console.log(reading);
```

### Induced Prism from Decentration

```javascript
import { inducedPrism, Eye } from 'opticalc';

const lens = { sphere: 2.0, cylinder: -1.0, axisDeg: 25.0 };
const decentration = { horizontalMm: 2.0, verticalMm: -1.0 };
const prism = inducedPrism(Eye.OD, lens, decentration);

// Access signed or magnitude/base components
const hSigned = prism.horizontal.signed();
const vSigned = prism.vertical.signed();
const magnitude = prism.magnitude();
```

### Common.js

```javascript
const { convertPower, convertRx } = require('opticalc');

const power = convertPower(-4.463, 1.523, 1.586);
console.log(power);
```

## API Reference

### Functions

- `convertPower(measuredPower, fromIndex, toIndex)` - Convert lens power between refractive indices
- `convertRx(spheroCyl, fromIndex, toIndex)` - Convert full prescription between indices
- `simulateLensmeterReading(trueRx, lensmeterIndex, trueIndex)` - Simulate lensmeter reading
- `inducedPrism(eye, lens, decentration)` - Calculate induced prism from decentration

### Types

- `SpheroCyl` - Sphero-cylindrical prescription
- `Decentration` - Horizontal and vertical decentration in mm
- `Eye` - Enum for OD (right) and OS (left) eyes
- `Prism` - Prism power with horizontal/vertical components

## Browser Support

This package uses WebAssembly and requires a modern browser with WebAssembly support:
- Chrome 57+
- Firefox 52+
- Safari 11+
- Edge 16+

## License

MIT