@photivra/engine 0.5.1 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/CITATION.cff +1 -1
  3. package/README.md +37 -3
  4. package/dist/index.d.ts +15 -2
  5. package/dist/index.d.ts.map +1 -1
  6. package/dist/index.js +15 -2
  7. package/dist/index.js.map +1 -1
  8. package/dist/motion/camera-rotation.d.ts +60 -0
  9. package/dist/motion/camera-rotation.d.ts.map +1 -1
  10. package/dist/motion/camera-rotation.js +95 -0
  11. package/dist/motion/camera-rotation.js.map +1 -1
  12. package/dist/motion/capture-rotation-inverse-mapping.d.ts +100 -0
  13. package/dist/motion/capture-rotation-inverse-mapping.d.ts.map +1 -0
  14. package/dist/motion/capture-rotation-inverse-mapping.js +171 -0
  15. package/dist/motion/capture-rotation-inverse-mapping.js.map +1 -0
  16. package/dist/motion/capture-rotation-temporal-quadrature.d.ts +89 -0
  17. package/dist/motion/capture-rotation-temporal-quadrature.d.ts.map +1 -0
  18. package/dist/motion/capture-rotation-temporal-quadrature.js +116 -0
  19. package/dist/motion/capture-rotation-temporal-quadrature.js.map +1 -0
  20. package/dist/motion/capture-rotation-trajectory.d.ts +98 -0
  21. package/dist/motion/capture-rotation-trajectory.d.ts.map +1 -0
  22. package/dist/motion/capture-rotation-trajectory.js +153 -0
  23. package/dist/motion/capture-rotation-trajectory.js.map +1 -0
  24. package/dist/optics/lateral-chromatic-aberration.d.ts.map +1 -1
  25. package/dist/optics/lateral-chromatic-aberration.js +12 -4
  26. package/dist/optics/lateral-chromatic-aberration.js.map +1 -1
  27. package/dist/optics/radial-distortion.d.ts +4 -2
  28. package/dist/optics/radial-distortion.d.ts.map +1 -1
  29. package/dist/optics/radial-distortion.js +83 -23
  30. package/dist/optics/radial-distortion.js.map +1 -1
  31. package/dist/output/capture-geometry.d.ts.map +1 -1
  32. package/dist/output/capture-geometry.js +24 -11
  33. package/dist/output/capture-geometry.js.map +1 -1
  34. package/dist/sensor/capture-color-sampling-binding.d.ts +211 -0
  35. package/dist/sensor/capture-color-sampling-binding.d.ts.map +1 -0
  36. package/dist/sensor/capture-color-sampling-binding.js +423 -0
  37. package/dist/sensor/capture-color-sampling-binding.js.map +1 -0
  38. package/dist/sensor/capture-mode.d.ts +157 -0
  39. package/dist/sensor/capture-mode.d.ts.map +1 -0
  40. package/dist/sensor/capture-mode.js +434 -0
  41. package/dist/sensor/capture-mode.js.map +1 -0
  42. package/dist/sensor/color-sampling.d.ts +133 -0
  43. package/dist/sensor/color-sampling.d.ts.map +1 -0
  44. package/dist/sensor/color-sampling.js +226 -0
  45. package/dist/sensor/color-sampling.js.map +1 -0
  46. package/dist/sensor/exposure-window.d.ts +103 -0
  47. package/dist/sensor/exposure-window.d.ts.map +1 -0
  48. package/dist/sensor/exposure-window.js +291 -0
  49. package/dist/sensor/exposure-window.js.map +1 -0
  50. package/dist/sensor/optical-stack.d.ts +132 -0
  51. package/dist/sensor/optical-stack.d.ts.map +1 -0
  52. package/dist/sensor/optical-stack.js +286 -0
  53. package/dist/sensor/optical-stack.js.map +1 -0
  54. package/dist/sensor/readout-exposure-linkage.d.ts +111 -0
  55. package/dist/sensor/readout-exposure-linkage.d.ts.map +1 -0
  56. package/dist/sensor/readout-exposure-linkage.js +210 -0
  57. package/dist/sensor/readout-exposure-linkage.js.map +1 -0
  58. package/dist/sensor/readout-timing.d.ts +124 -0
  59. package/dist/sensor/readout-timing.d.ts.map +1 -0
  60. package/dist/sensor/readout-timing.js +230 -0
  61. package/dist/sensor/readout-timing.js.map +1 -0
  62. package/dist/sensor/sampling-aperture.d.ts +154 -0
  63. package/dist/sensor/sampling-aperture.d.ts.map +1 -0
  64. package/dist/sensor/sampling-aperture.js +374 -0
  65. package/dist/sensor/sampling-aperture.js.map +1 -0
  66. package/dist/sensor/spatial-sample-reduction.d.ts +128 -0
  67. package/dist/sensor/spatial-sample-reduction.d.ts.map +1 -0
  68. package/dist/sensor/spatial-sample-reduction.js +299 -0
  69. package/dist/sensor/spatial-sample-reduction.js.map +1 -0
  70. package/dist/sensor/spatial-sampling-quadrature.d.ts +155 -0
  71. package/dist/sensor/spatial-sampling-quadrature.d.ts.map +1 -0
  72. package/dist/sensor/spatial-sampling-quadrature.js +197 -0
  73. package/dist/sensor/spatial-sampling-quadrature.js.map +1 -0
  74. package/docs/ARCHITECTURE.md +17 -0
  75. package/docs/AUTOMATION_COORDINATION.md +188 -0
  76. package/docs/IMAGE_FORMATION.md +26 -0
  77. package/docs/MOTION_AND_SIGNAL.md +142 -0
  78. package/docs/USAGE.md +1273 -3
  79. package/package.json +5 -3
package/CHANGELOG.md CHANGED
@@ -4,6 +4,38 @@ Notable public changes to `@photivra/engine` are documented here.
4
4
 
5
5
  ## Unreleased
6
6
 
7
+ ## 0.6.0 - 2026-09-29
8
+
9
+ ### Added
10
+
11
+ - Added a standalone native-sensor readout scan timing foundation with separately evidenced seconds-valued capture data-readout duration and rolling spatial-sampling skew, native scan direction, active-capture support, pointwise native phase diagnostics, and independent mechanical/EFCS/electronic shutter-mechanism metadata. The first model is explicitly a uniform-linear single-axis approximation and does not infer physical readout lines from the effective image raster.
12
+ - Added a standalone capture exposure-window timing foundation with independent opening/closing boundary schedules, simultaneous or uniform-linear native scans, explicit mechanism-derived boundary actuators, evidence-backed timing/direction declarations, full-active-region positive-duration validation, and local exposure-window diagnostics relative to the first opening-boundary phase. Sensor readout remains a separate contract.
13
+ - Added a capture-rotation exposure trajectory foundation that maps native sensor points into the reference image plane and evaluates the existing pure-rotation camera model at each point's local exposure start/end. It preserves exposure-window and rotation provenance, excludes sensor readout timing, and explicitly stops short of claiming a rolling-shutter warp or integrated blur kernel.
14
+ - Added an analytic inverse pure-camera-rotation mapping plus an instantaneous capture-scan inverse mapping at an explicitly selected local-exposure phase. The capture mapping uses destination-native timing, reports native/oriented effective-sample displacement, does not clamp reference rays outside the active frame, and intentionally avoids iterative solving, sensor-readout coupling, and finite-exposure blur claims.
15
+ - Added an evidence-backed readout/exposure spatial-linkage assessment for declaring normalized native scan-phase relationships between rolling sensor readout and electronic exposure boundaries. It supports same/reversed spatial phase, preserves evidence-backed seconds facts, reports cadence ratios, and explicitly does not infer absolute temporal synchronization from shutter mechanism, scan direction, equal timing spans, or total data-readout duration.
16
+ - Added deterministic pure-rotation temporal quadrature over each destination point's local exposure window. The first model uses uniform midpoint nodes, preserves the #65 instantaneous inverse mapping as the geometry source of truth, reports both normalized time-average weights and seconds-valued integration measures, and deliberately does not calculate radiance, a blur kernel, or a geometry-only integration error estimate.
17
+ - Added the first capture-mode profile/resolution contract with orthogonal acquisition sequence, per-frame sampling, optional evidence-backed inter-frame sensor offsets, reconstruction stages, processed-image raster, and downstream dependency declarations. Grouped sampling preserves unknown vs charge-domain vs pre-conversion-analog vs post-conversion-digital combination semantics; processed/output resolution never mutates physical sensor identity or permits photosite-count inference.
18
+ - Added the first exact color-sampling topology contract. It supports monochrome and arbitrary periodic mosaics on an abstract native sensor sampling-site lattice, preserves sensor-anchored repeat phase, allows arbitrary semantic channel IDs without implying spectral calibration, and represents layered color as structural-only until per-layer spatial sampling is modeled. It intentionally does not bind color-sampling sites to `NativeImageRaster` or physical photodiodes.
19
+ - Added an evidence-backed native-effective-raster ↔ color-sampling-site-grid binding plus capture-mode structural-source resolution. The bridge binds one exact native effective raster to regular color-site blocks, requires separately evidenced grouped-mode phase, preserves absolute CFA phase, reports compact source rectangles and exact channel-site counts, keeps pixel-shift offsets from changing CFA assignment, and fails closed for declared-effective or layered relationships that are not explicitly mapped.
20
+ - Added a sensor optical-stack foundation that separates ordered physical stack-component metadata from effective anti-aliasing spatial response. Effective AA response may be explicitly absent, present-but-unresolved, or an arbitrary normalized point-splitting kernel in native sensor physical coordinates; microlens and cover/filter-stack presence remain descriptive until later angular/spectral/refraction models exist. Unknown AA response remains distinct from documented absence.
21
+ - Added a sensor sampling-aperture foundation that explicitly registers the color-site lattice in native sensor physical space and describes a first geometric photosensitive aperture as an optional uniform axis-aligned rectangle. Site pitch/origin and aperture geometry carry separate evidence, unresolved aperture stays fail-closed, geometric fill fraction is diagnostic only, and AA, microlens redistribution, charge diffusion/crosstalk, spectral response, QE, optical throughput, radiometric collection area, and physical photodiode truth remain outside the model.
22
+ - Added deterministic sensor spatial-sampling quadrature that combines the resolved geometric aperture with effective AA point splitting using inverse source mapping. It returns native-physical midpoint nodes, separate normalized-average and square-micrometre area measures, preserves destination CFA channel semantics, retains off-imaging-area pre-AA support without clamping/renormalization, and deliberately does not produce optical-field values, photons/electrons, RAW samples, or reconstruction.
23
+ - Added sensor spatial-sample reduction for explicitly identified quadrature-node values. It supports nonnegative relative-linear irradiance proxies and physical sensor-plane irradiance in W/m², preserves node identity independently of input ordering, returns normalized spatial averages plus geometric area integrals/incident flux, and keeps CFA spectral response, temporal integration, QE, noise, ADC, RAW code values, and reconstruction separate.
24
+
25
+ ### Changed
26
+
27
+ - Engine API contract advances to `0.47.0`. The composed POC remains `0.20.0`; the engine can now reduce explicitly identified nonnegative linear spatial samples in either relative or physical irradiance domains without claiming CFA spectral filtering, temporal exposure, sensor conversion, or RAW output.
28
+
29
+ ### Fixed
30
+
31
+ - Radial-distortion invertibility validation now uses scale-normalized, cancellation-resistant stationary-point solving so near-linear high-order profiles cannot hide an interior fold; unsafe derived normalized radii and malformed/sparse batch points fail closed as scientific input errors.
32
+ - Reverse image-plane coordinate mapping now uses a physical-scale floating-point edge tolerance instead of a fixed normalized-UV tolerance.
33
+
34
+ ### Performance
35
+
36
+ - Inverse radial mapping resolves exact identity and mapped-boundary cases directly and stops deterministic bisection once IEEE-754 bounds can no longer narrow.
37
+ - The image-formation benchmark now warms and amplifies measured work, alternates scalar/batch ordering, reports paired median ratios, remains informational-only, and avoids a duplicate CI build.
38
+
7
39
  ## 0.5.1 - 2026-09-26
8
40
 
9
41
  ### Fixed
package/CITATION.cff CHANGED
@@ -9,7 +9,7 @@ abstract: "An open TypeScript engine for the science and mathematics of photogra
9
9
  repository-code: "https://github.com/photivra/photivra"
10
10
  url: "https://photivra.com"
11
11
  license: "Apache-2.0"
12
- version: "0.5.1"
12
+ version: "0.6.0"
13
13
  keywords:
14
14
  - photography
15
15
  - camera optics
package/README.md CHANGED
@@ -77,6 +77,9 @@ The root package exports deterministic or explicitly labeled approximate models
77
77
  - [EV100, relative optical exposure, relative rendered exposure, and equivalent ISO compensation](docs/USAGE.md#exposure-and-iso-relations);
78
78
  - [constant-velocity projected point motion](docs/USAGE.md#projected-subject-motion);
79
79
  - [time-parameterized spatial camera-rotation mapping](docs/USAGE.md#spatial-camera-rotation-mapping) for yaw/pitch/roll;
80
+ - [capture-local pure-rotation exposure trajectories](docs/USAGE.md#capture-rotation-exposure-trajectories), evaluated at each native point's local exposure start/end without claiming a finished rolling-shutter warp;
81
+ - [capture-local pure-rotation temporal quadrature](docs/USAGE.md#capture-rotation-temporal-quadrature), using deterministic midpoint nodes plus separate normalized-average and seconds-valued temporal measures without calculating radiance or blur;
82
+ - [instantaneous inverse capture-scan mapping under pure rotation](docs/USAGE.md#instantaneous-capture-rotation-inverse-mapping), with an explicit local-exposure phase and analytic destination-to-reference ray inversion;
80
83
  - [the existing controlled yaw/pitch camera-shake and stabilization-equivalent approximation](docs/USAGE.md#camera-shake-and-stabilization-equivalent-approximation).
81
84
 
82
85
  ### Sensor and output
@@ -85,6 +88,16 @@ The root package exports deterministic or explicitly labeled approximate models
85
88
  - [pixel pitch](docs/USAGE.md#pixel-pitch);
86
89
  - [sensor imaging-area, native-raster, crop-factor, megapixel, and 2D sampling metrics](docs/USAGE.md#sensor-imaging-area-and-native-raster);
87
90
  - [provenance-aware sensor architecture/capability metadata](docs/USAGE.md#sensor-architecture-metadata);
91
+ - [exact color-sampling topology profiles](docs/USAGE.md#color-sampling-topology), supporting monochrome and arbitrary periodic mosaics on a sensor-anchored abstract sampling-site lattice while keeping spectral response and raster/photodiode binding separate;
92
+ - [capture-mode/color-sampling structural bindings](docs/USAGE.md#capture-modecolor-sampling-binding), explicitly relating one exact native effective raster to the color-site lattice and resolving compact pre-reconstruction source regions without inventing signal weights;
93
+ - [sensor optical-stack profiles](docs/USAGE.md#sensor-optical-stack), separating physical stack-component metadata from effective AA spatial response, with explicit absent/unknown/unresolved distinctions and arbitrary normalized point-splitting kernels;
94
+ - [sensor sampling-aperture profiles](docs/USAGE.md#sensor-sampling-aperture), explicitly registering color-site centers in native sensor physical space and resolving geometric sensitive rectangles without conflating pitch, fill area, QE, microlenses, or radiometry;
95
+ - [sensor spatial-sampling quadrature](docs/USAGE.md#sensor-spatial-sampling-quadrature), combining AA point splitting with geometric aperture integration into deterministic native-physical source nodes and weights;
96
+ - [sensor spatial-sample reduction](docs/USAGE.md#sensor-spatial-sample-reduction), reducing explicitly identified nonnegative linear node values in relative or physical irradiance domains without claiming CFA spectral filtering or RAW conversion;
97
+ - [orthogonal capture-mode profiles](docs/USAGE.md#capture-mode-profiles), separating acquisition sequence, per-frame sampling, sensor-shift sequence, reconstruction stages, processed raster, and final output geometry;
98
+ - [capture-specific native sensor readout scan timing](docs/USAGE.md#sensor-readout-timing), with separately evidenced total data-readout duration and rolling spatial timing skew;
99
+ - [readout/exposure spatial linkage assessment](docs/USAGE.md#readoutexposure-spatial-linkage), for evidence-backed same/reversed normalized phase relationships between rolling readout and electronic exposure boundaries without asserting absolute synchronization;
100
+ - [capture exposure-window timing](docs/USAGE.md#capture-exposure-window-timing), with independent opening/closing boundary schedules and local-duration validation;
88
101
  - [capture orientation, active sensor area, and output geometry](docs/USAGE.md#capture-orientation-active-area-and-output-geometry);
89
102
  - explicit oriented-physical-raster ↔ pre-orientation image-plane metric coordinate transforms for renderer/lens-field integration;
90
103
  - [centered crop and subject-height framing crop](docs/USAGE.md#centered-crop-and-subject-framing-crop);
@@ -113,9 +126,18 @@ The root engine now exposes standalone APIs for:
113
126
  - off-center/asymmetric active-capture FOV;
114
127
  - diagonal-based 35 mm-equivalent focal length;
115
128
  - evidence-backed sensor architecture metadata;
129
+ - evidence-backed color-sampling topology profiles for monochrome, arbitrary periodic mosaics, and structural-only layered color declarations;
130
+ - evidence-backed native-effective-raster ↔ color-site-grid bindings plus capture-mode structural-source resolution with explicit grouped-mode phase and channel-site counts;
131
+ - evidence-backed sensor optical-stack profiles with ordered physical components, microlens presence metadata, and separately declared effective anti-aliasing spatial response;
132
+ - evidence-backed sensor site-center registration plus geometric sampling-aperture profiles with unresolved/resolved footprint semantics and derived geometric sensitive-area fraction;
133
+ - evidence-backed capture-mode profiles with single/fixed/variable multi-frame acquisition, native/grouped/declared per-frame sampling, optional sensor-shift offsets, reconstruction stages, and processed-image raster separation;
134
+ - capture-specific native readout scan timing with explicit provenance and no output-resolution inference;
135
+ - capture exposure-window timing with independent opening/closing boundary schedules;
136
+ - capture-local stationary-ray rotation trajectories driven by exposure windows, with sensor readout intentionally excluded;
137
+ - instantaneous inverse capture-scan rotation mapping at a caller-selected local-exposure phase, still independent from sensor data-readout timing;
116
138
  - radiometry prerequisite/readiness assessment.
117
139
 
118
- These contracts are **not all composed into `simulatePocCamera()` yet**. POC API 0.20 now composes staged capture geometry through final output/viewing semantics: orientation, active-capture rectangles, output crop/raster, active/output FOV, active-capture 35 mm-equivalent focal length, viewing-based CoC against the final retained physical area, orientation-aware subject framing, and explicit output pixel scaling. Sensor-architecture metadata and radiometry-readiness profiles remain standalone and are not yet composed.
140
+ These contracts are **not all composed into `simulatePocCamera()` yet**. POC API 0.20 now composes staged capture geometry through final output/viewing semantics: orientation, active-capture rectangles, output crop/raster, active/output FOV, active-capture 35 mm-equivalent focal length, viewing-based CoC against the final retained physical area, orientation-aware subject framing, and explicit output pixel scaling. Sensor-architecture metadata, color-sampling topology profiles, native-effective-raster/color-site bindings, sensor optical-stack profiles, sensor sampling-aperture profiles, capture-mode profiles, sensor readout scan timing, capture exposure-window timing, and radiometry-readiness profiles remain standalone and are not yet composed. Readout timing stays in invariant native sensor coordinates; physical orientation is an explicit downstream transform.
119
141
 
120
142
  The POC exposes X/Y sampling diagnostics but still uses one representative horizontal pitch internally for several pixel-domain calculations; it therefore rejects geometry whose X/Y pitch differs by more than 1% rather than silently producing directional error.
121
143
 
@@ -178,8 +200,8 @@ The calling application can then use those results while keeping the underlying
178
200
 
179
201
  ## Status
180
202
 
181
- - Repository package version: `0.5.1`
182
- - Engine API contract: `0.34.0`
203
+ - Repository package version: `0.6.0`
204
+ - Engine API contract: `0.47.0`
183
205
  - Composed POC simulation API contract: `0.20.0`
184
206
  - Stability: pre-1.0 / proof of concept
185
207
 
@@ -203,7 +225,19 @@ Photivra deliberately avoids claiming more than the current models support.
203
225
  - Generic lateral CA is represented as independent radial field mapping for abstract RGB renderer channels. It is not a spectral lens model, sensor-CFA calibration, longitudinal-CA model, or named-lens profile.
204
226
  - Projected subject motion follows a representative point under constant linear velocity. It does not yet model scale blur of an extended object moving substantially along the optical axis.
205
227
  - The legacy stabilization-equivalent camera-shake API remains one global yaw/pitch image-plane vector. A separate low-level rotation-only mapping now models field-position-dependent yaw/pitch/roll image motion; camera translation/parallax, real IBIS/OIS behavior, and composed rolling-readout integration remain unmodeled.
228
+ - Native sensor readout timing currently uses a caller-declared uniform-linear single-axis spatial phase approximation. Capture data-readout duration and rolling spatial skew are distinct evidence-backed facts; the model does not infer one effective raster row/column as one physical hardware readout line and does not yet model non-uniform/segmented readout or rolling-shutter image distortion.
229
+ - Readout/exposure linkage can assert only a normalized native spatial-phase/order relationship to an electronic exposure boundary. It does not establish absolute readout-vs-exposure timing, and equal directions or equal timing spans are never treated as proof of synchronization.
230
+ - Capture exposure-window timing models opening and closing boundaries independently as simultaneous or uniform-linear native scans. It validates positive local duration across the full active rectangle, but does not model curtain acceleration, segmented/nonlinear electronic timing, flash/flicker, shutter shock, EFCS-specific pupil/bokeh behavior, or automatically equate exposure boundaries with sensor readout.
231
+ - Capture rotation trajectories evaluate a stationary reference ray at local exposure start/end under pure constant camera rotation. The endpoint chord is not an integrated blur kernel, and the API is not an inverse destination-to-source rolling-shutter warp; capture-location-dependent warp solving and exposure integration remain future work.
232
+ - Capture rotation temporal quadrature supplies deterministic midpoint geometry samples across each local exposure. It does not sample scene radiance, output an averaged coordinate/blur radius, model shutter-transmission ramps, or claim a geometry-only error bound; downstream radiance integration remains separate.
233
+ - Instantaneous capture-rotation inverse mapping now provides destination-to-reference geometry at an explicit phase within each local exposure window. Pure rotation is inverted analytically, not iteratively. The result is still not a finite-exposure image or blur model; reference rays may validly fall outside the active source frame and are not clamped.
206
234
  - The Airy diagnostic assumes an ideal circular pupil. The PSF foundation keeps circular diffraction and geometric defocus as separately named diagnostics; it does not calculate a combined PSF, and polygon aperture geometry does not produce a polygon diffraction PSF.
235
+ - Capture-mode profiles describe acquisition/sampling/reconstruction structure only. Grouped sampling does not imply charge-domain binning unless that domain is separately evidenced; processed-image resolution does not change FOV, physical sensor identity, or establish physical photosite count. Pixel-shift offsets are expressed in native effective-sampling-pitch units and do not claim photodiode pitch.
236
+ - Color-sampling topology is independent from `NativeImageRaster`: periodic mosaic phase is anchored to absolute native sensor sampling-site indices, not crop-local coordinates. Channel IDs are semantic labels rather than spectral response curves. Layered color uses a separate unresolved spatial reference and remains structural-only until per-layer sampling density/registration is explicit; sparse non-periodic exceptions such as PDAF/masked/defect sites are not represented by schema 0.1.0.
237
+ - Native-effective-raster/color-site binding requires its own evidence and is tied to one exact native raster; matching dimensions alone never prove 1:1 CFA correspondence. Grouped capture modes also require an evidenced full-frame top-left grouping phase. The bridge reports compact pre-reconstruction source rectangles and channel-site counts only—no sum/average weights, spectral response, downstream reconstructed-pixel dependency, or photodiode count. Pixel-shift offsets do not change CFA channel assignment because sensor and CFA move together.
238
+ - Sensor optical-stack schema 0.1.0 separates physical component presence from effective anti-aliasing response. Omitted AA response means unknown, while explicit `absent` means no intentional AA spatial-splitting term in this contract—not an identity whole-stack PSF or zero aliasing risk. Point-splitting kernels are normalized spatial redistribution only and exclude throughput, spectral transmission, field/wavelength/polarization dependence, cover-glass refraction, and microlens behavior.
239
+ - Sensor sampling-aperture schema 0.1.0 keeps color-site physical registration separate from both `NativeImageRaster` and radiometry. Site pitch/origin must be explicitly evidenced; aperture geometry is not inferred from pitch or fill fraction. The first resolved aperture is a uniform axis-aligned geometric sensitive rectangle contained within one lattice cell. Its derived sensitive-area fraction is a geometry diagnostic only—not QE, effective collection area, microlens behavior, charge diffusion/crosstalk, spectral response, or optical throughput.
240
+ - Sensor spatial quadrature inverse-samples the pre-AA optical field through the declared AA split and geometric aperture. Destination CFA channel remains authoritative for all nodes; pre-AA source coordinates never reassign CFA color. Off-imaging-area source support is exposed rather than clamped/dropped, normalized weights remain unchanged, and square-micrometre measures remain geometric—not radiometric collection area.
207
241
  - Signal/noise primitives require caller-supplied photon/electron quantities. The radiometry-readiness API can assess declared prerequisites, but it does not derive photons or enable photon/noise output in the composed POC.
208
242
  - The composed POC still uses one representative pixel-pitch path internally and therefore rejects sensor geometry whose X/Y sample pitch differs by more than 1%; lower-level geometry APIs already preserve independent X/Y pitch.
209
243
  - No named commercial camera or lens performance is claimed.
package/dist/index.d.ts CHANGED
@@ -4,7 +4,7 @@
4
4
  * This constant is intentionally independent of the package version so
5
5
  * schema/API compatibility can be discussed explicitly.
6
6
  */
7
- export declare const ENGINE_API_VERSION: "0.34.0";
7
+ export declare const ENGINE_API_VERSION: "0.47.0";
8
8
  export { approximationResult, calibratedResult, calculatedResult, estimatedResult, validateCalculationQuality, type AbsoluteUncertaintyEstimate, type CalculationProvenance, type CalculationQuality, type CalculationResult, type CalculationValidRange, type ProvenanceKind, type RelativeUncertaintyEstimate, type UncertaintyConfidence, type UncertaintyEstimate, type UncertaintySource } from "./core/calculation-result.js";
9
9
  export { InvalidScientificInputError, InvalidScientificResultError } from "./core/validation.js";
10
10
  export { IMAGE_FORMATION_CONTRACT_VERSION, getImageFormationContract, type ImageFormationContract, type ImageFormationCoordinateSpaceContract, type ImageFormationCoordinateSpaceId, type ImageFormationDomainId, type ImageFormationEffectId, type ImageFormationEffectPlacement, type ImageFormationImplementationStatus, type ImageFormationRendererContract, type ImageFormationStageContract, type ImageFormationStageId, type ImageFormationTemporalContract } from "./core/image-formation.js";
@@ -14,6 +14,16 @@ export { calculateEquivalentFocalLength35Mm, type CalculateEquivalentFocalLength
14
14
  export { calculatePixelPitch, type CalculatePixelPitchInput, type PixelPitch } from "./sensor/pixel-pitch.js";
15
15
  export { calculateImagingAreaMetrics, calculateSensorGeometryMetrics, type CalculateSensorGeometryMetricsInput, type ImagingAreaMetrics, type NativeImageRaster, type RasterDimensions, type SensorGeometryMetrics, type SensorImagingArea } from "./sensor/sensor-geometry.js";
16
16
  export { parseSensorArchitectureProfile, type SensorArchitectureFactProvenance, type SensorArchitectureProfile, type SensorArchitectureReuseStatus, type SensorArchitectureSourceKind, type SensorColorSamplingFamily, type SensorIlluminationArchitecture, type SensorIntegrationArchitecture, type SensorReadoutArchitecture, type SourcedSensorArchitectureFact } from "./sensor/architecture.js";
17
+ export { parseSensorColorSamplingProfile, resolveColorSamplingSite, type LayeredColorSamplingLayout, type MonochromeColorSamplingLayout, type NativeColorSamplingSiteCoordinateSystem, type NativeColorSamplingSiteIndex, type SensorColorSamplingProfileCoordinateSystem, type PeriodicMosaicColorSamplingLayout, type ResolveColorSamplingSiteInput, type ResolvedColorSamplingSite, type SensorColorSamplingLayout, type SensorColorSamplingProfile } from "./sensor/color-sampling.js";
18
+ export { parseNativeEffectiveRasterColorSamplingBindingProfile, resolveCaptureModeColorSamplingContributors, resolveNativeEffectiveRasterColorSamplingBinding, type CaptureModeFullFrameSampleIndex, type ColorSamplingChannelComposition, type ColorSamplingChannelSiteCount, type ColorSamplingSiteGridDimensions, type ColorSamplingSiteRect, type GroupedCaptureModeSamplingAnchorDeclaration, type NativeEffectiveRasterColorSamplingBindingProfile, type NativeEffectiveSampleRect, type ResolveCaptureModeColorSamplingContributorsInput, type ResolvedCaptureModeColorSamplingContributors, type ResolvedNativeEffectiveRasterColorSamplingBinding } from "./sensor/capture-color-sampling-binding.js";
19
+ export { parseSensorOpticalStackProfile, resolveAntiAliasingSpatialKernel, type AntiAliasingPointSplitComponent, type ResolvedAntiAliasingSpatialKernel, type SensorEffectiveAntiAliasingSpatialResponse, type SensorMicrolensDeclaration, type SensorOpticalStackComponent, type SensorOpticalStackComponentRole, type SensorOpticalStackProfile } from "./sensor/optical-stack.js";
20
+ export { parseSensorSamplingApertureProfile, resolveSensorSamplingAperture, type NativeSensorPhysicalBoundsMm, type NativeSensorPhysicalPointMm, type ResolveSensorSamplingApertureInput, type ResolvedSensorSamplingAperture, type SensorGeometricSensitiveAperture, type SensorSamplingApertureProfile, type SensorSiteCenterLatticeRegistration } from "./sensor/sampling-aperture.js";
21
+ export { calculateSensorSpatialSamplingQuadrature, type CalculateSensorSpatialSamplingQuadratureInput, type SensorSpatialSamplingQuadrature, type SensorSpatialSamplingQuadratureNode } from "./sensor/spatial-sampling-quadrature.js";
22
+ export { reduceSensorSpatialSamplingQuadrature, type ReduceSensorSpatialSamplingQuadratureInput, type SensorSpatialQuadratureNodeIdentity, type SensorSpatialQuadratureNodeValue, type SensorSpatialSampleReduction, type SensorSpatialSampleReductionValue, type SensorSpatialSampleValueDomain } from "./sensor/spatial-sample-reduction.js";
23
+ export { parseCaptureModeProfile, resolveCaptureMode, type CaptureModeAcquisition, type CaptureModeDefinition, type CaptureModeDependency, type CaptureModePerFrameSampling, type CaptureModeProfile, type CaptureModeReconstructionStage, type CaptureModeSampleCombinationDomain, type CaptureModeSensorOffsetNativeSamples, type DeclaredEffectiveCaptureSampling, type FixedMultiFrameCaptureAcquisition, type GroupedNativeCaptureSampling, type NativeEffectiveCaptureSampling, type ResolveCaptureModeInput, type ResolvedCaptureMode, type SingleFrameCaptureAcquisition, type SourcedCaptureModeFact, type VariableMultiFrameCaptureAcquisition } from "./sensor/capture-mode.js";
24
+ export { calculateSensorReadoutTiming, type CalculateSensorReadoutTimingInput, type CaptureShutterMechanism, type GlobalSensorReadoutTimingDeclaration, type NativeSensorReadoutScanDirection, type RollingSensorReadoutTimingDeclaration, type SensorReadoutMode, type SensorReadoutTiming, type SensorReadoutTimingDeclaration, type SensorReadoutTimingSample, type SourcedSensorReadoutFact, type SourcedSensorTimingSeconds } from "./sensor/readout-timing.js";
25
+ export { calculateCaptureExposureWindows, type CalculateCaptureExposureWindowsInput, type CaptureExposureBoundaryActuator, type CaptureExposureWindowSample, type CaptureExposureWindows, type ExposureBoundarySchedule, type ResolvedCaptureExposureBoundary, type SimultaneousExposureBoundarySchedule, type SourcedCaptureBoundaryDirection, type SourcedCaptureTimingSeconds, type UniformLinearExposureBoundarySchedule } from "./sensor/exposure-window.js";
26
+ export { assessReadoutExposureTimingLinkage, type AssessReadoutExposureTimingLinkageInput, type ReadoutExposureBoundaryId, type ReadoutExposureBoundarySpatialLink, type ReadoutExposureBoundarySpatialLinkAssessment, type ReadoutExposureSpatialPhaseOrientation, type ReadoutExposureTimingLinkageAssessment, type ReadoutExposureTimingLinkageDeclaration } from "./sensor/readout-exposure-linkage.js";
17
27
  export { calculateCenteredCrop, type CalculateCenteredCropInput, type CenteredCrop } from "./output/crop.js";
18
28
  export { calculateSubjectFramingCrop, type CalculateSubjectFramingCropInput, type SubjectFramingCrop } from "./output/subject-framing-crop.js";
19
29
  export { calculateActiveCaptureFieldOfView, calculateOutputFieldOfView, mapImagePlanePointToOrientedPhysicalUv, mapOrientedPhysicalUvToImagePlanePoint, resolveCaptureGeometry, transformNativeRasterPointToOriented, transformNativeRasterRectToOriented, transformNativeRasterVectorToOriented, transformOrientedRasterPointToNative, transformOrientedRasterRectToNative, transformOrientedRasterVectorToNative, type ActiveCaptureFieldOfView, type CalculateActiveCaptureFieldOfViewInput, type CalculateOutputFieldOfViewInput, type CaptureOrientation, type ImagePlaneMetricPointMm, type MapImagePlanePointToOrientedPhysicalUvInput, type MapOrientedPhysicalUvToImagePlaneInput, type NormalizedRasterUv, type OutputFieldOfView, type PhysicalBoundsFromOpticalAxisMm, type RasterPoint, type RasterRect, type RasterVector, type ResolveCaptureGeometryInput, type ResolvedCaptureGeometry, type TransformRasterPointInput, type TransformRasterRectInput, type TransformRasterVectorInput } from "./output/capture-geometry.js";
@@ -30,7 +40,10 @@ export { PSF_FOUNDATION_VERSION, calculatePsfFoundationComponents, getPsfFoundat
30
40
  export type { CameraConfiguration, CameraSupport, ExposureConfiguration, FocusConfiguration, LensConfiguration, SensorConfiguration, StabilizationConfiguration } from "./schema/camera.js";
31
41
  export type { SceneCapability, SceneDefinition, SceneMotion, SceneObject, SceneRadiometry, Vector3 } from "./schema/scene.js";
32
42
  export { calculateProjectedMotionBlur, type CalculateProjectedMotionBlurInput, type ProjectedMotionBlur } from "./motion/projected-motion.js";
33
- export { calculateCameraRotationImageMapping, type AxisSamplingPitchMicrometers, type CalculateCameraRotationImageMappingInput, type CameraAngularVelocityRadPerSec, type CameraRotationImageMapping, type ImagePlanePointMm } from "./motion/camera-rotation.js";
43
+ export { calculateCameraRotationImageMapping, calculateInverseCameraRotationImageMapping, type AxisSamplingPitchMicrometers, type CalculateCameraRotationImageMappingInput, type CalculateInverseCameraRotationImageMappingInput, type CameraAngularVelocityRadPerSec, type CameraRotationImageMapping, type ImagePlanePointMm, type InverseCameraRotationImageMapping } from "./motion/camera-rotation.js";
44
+ export { calculateCaptureRotationTrajectories, type CalculateCaptureRotationTrajectoriesInput, type CaptureRotationTrajectories, type CaptureRotationTrajectoryEndpoint, type CaptureRotationTrajectorySample } from "./motion/capture-rotation-trajectory.js";
45
+ export { calculateCaptureRotationInverseMappings, type CalculateCaptureRotationInverseMappingsInput, type CaptureRotationInverseMappings, type CaptureRotationInverseMappingSample } from "./motion/capture-rotation-inverse-mapping.js";
46
+ export { calculateCaptureRotationTemporalQuadrature, type CalculateCaptureRotationTemporalQuadratureInput, type CaptureRotationTemporalQuadrature, type CaptureRotationTemporalQuadratureNode, type CaptureRotationTemporalQuadraturePoint } from "./motion/capture-rotation-temporal-quadrature.js";
34
47
  export { calculateEquivalentIso, calculateExposureValue100, calculateRelativeOpticalExposure, calculateRelativeRenderedExposure, type CalculateEquivalentIsoInput, type CalculateExposureValue100Input, type CalculateRelativeOpticalExposureInput, type CalculateRelativeRenderedExposureInput, type RelativeOpticalExposure, type RelativeRenderedExposure } from "./exposure/exposure.js";
35
48
  export { estimateCameraShakeBlur, type CameraShakeBlurSample, type CameraShakeEstimate, type EstimateCameraShakeBlurInput } from "./stabilization/camera-shake.js";
36
49
  export { calculatePhotoelectrons, calculateSignalToNoise, type CalculatePhotoelectronsInput, type CalculateSignalToNoiseInput, type SignalToNoise } from "./sensor/signal-noise.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,EAAG,QAAiB,CAAC;AAEpD,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,0BAA0B,EAC1B,KAAK,2BAA2B,EAChC,KAAK,qBAAqB,EAC1B,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,EAC1B,KAAK,cAAc,EACnB,KAAK,2BAA2B,EAChC,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACvB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,2BAA2B,EAC3B,4BAA4B,EAC7B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,gCAAgC,EAChC,yBAAyB,EACzB,KAAK,sBAAsB,EAC3B,KAAK,qCAAqC,EAC1C,KAAK,+BAA+B,EACpC,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,EAC3B,KAAK,6BAA6B,EAClC,KAAK,kCAAkC,EACvC,KAAK,8BAA8B,EACnC,KAAK,2BAA2B,EAChC,KAAK,qBAAqB,EAC1B,KAAK,8BAA8B,EACpC,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EACL,oBAAoB,EACpB,0BAA0B,EAC1B,KAAK,+BAA+B,EACpC,KAAK,yBAAyB,EAC9B,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACvB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EACL,4BAA4B,EAC5B,KAAK,iCAAiC,EACtC,KAAK,mBAAmB,EACzB,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EACL,kCAAkC,EAClC,KAAK,uCAAuC,EAC5C,KAAK,yBAAyB,EAC/B,MAAM,qCAAqC,CAAC;AAE7C,OAAO,EACL,mBAAmB,EACnB,KAAK,wBAAwB,EAC7B,KAAK,UAAU,EAChB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,2BAA2B,EAC3B,8BAA8B,EAC9B,KAAK,mCAAmC,EACxC,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,EAC1B,KAAK,iBAAiB,EACvB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EACL,8BAA8B,EAC9B,KAAK,gCAAgC,EACrC,KAAK,yBAAyB,EAC9B,KAAK,6BAA6B,EAClC,KAAK,4BAA4B,EACjC,KAAK,yBAAyB,EAC9B,KAAK,8BAA8B,EACnC,KAAK,6BAA6B,EAClC,KAAK,yBAAyB,EAC9B,KAAK,6BAA6B,EACnC,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,qBAAqB,EACrB,KAAK,0BAA0B,EAC/B,KAAK,YAAY,EAClB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,2BAA2B,EAC3B,KAAK,gCAAgC,EACrC,KAAK,kBAAkB,EACxB,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EACL,iCAAiC,EACjC,0BAA0B,EAC1B,sCAAsC,EACtC,sCAAsC,EACtC,sBAAsB,EACtB,oCAAoC,EACpC,mCAAmC,EACnC,qCAAqC,EACrC,oCAAoC,EACpC,mCAAmC,EACnC,qCAAqC,EACrC,KAAK,wBAAwB,EAC7B,KAAK,sCAAsC,EAC3C,KAAK,+BAA+B,EACpC,KAAK,kBAAkB,EACvB,KAAK,uBAAuB,EAC5B,KAAK,2CAA2C,EAChD,KAAK,sCAAsC,EAC3C,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,+BAA+B,EACpC,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,2BAA2B,EAChC,KAAK,uBAAuB,EAC5B,KAAK,yBAAyB,EAC9B,KAAK,wBAAwB,EAC7B,KAAK,0BAA0B,EAChC,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EACL,8BAA8B,EAC9B,KAAK,cAAc,EACnB,KAAK,2BAA2B,EAChC,KAAK,qBAAqB,EAC3B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,iBAAiB,EACjB,KAAK,QAAQ,EACb,KAAK,sBAAsB,EAC5B,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,0CAA0C,EAC1C,KAAK,kCAAkC,EACvC,KAAK,+CAA+C,EACrD,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EACL,8BAA8B,EAC9B,KAAK,mCAAmC,EACxC,KAAK,qBAAqB,EAC3B,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,KAAK,2BAA2B,EAChC,KAAK,0BAA0B,EAC/B,KAAK,aAAa,EAClB,KAAK,YAAY,EAClB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EACL,kCAAkC,EAClC,iCAAiC,EACjC,KAAK,uCAAuC,EAC5C,KAAK,sCAAsC,EAC3C,KAAK,yBAAyB,EAC9B,KAAK,wBAAwB,EAC9B,MAAM,6BAA6B,CAAC;AAErC,OAAO,EACL,uCAAuC,EACvC,wCAAwC,EACxC,gCAAgC,EAChC,KAAK,4CAA4C,EACjD,KAAK,6CAA6C,EAClD,KAAK,qCAAqC,EAC1C,KAAK,8BAA8B,EACnC,KAAK,+BAA+B,EACpC,KAAK,gBAAgB,EACrB,KAAK,4BAA4B,EACjC,KAAK,uBAAuB,EAC5B,KAAK,uBAAuB,EAC7B,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EACL,iDAAiD,EACjD,kDAAkD,EAClD,0CAA0C,EAC1C,KAAK,sDAAsD,EAC3D,KAAK,uDAAuD,EAC5D,KAAK,+CAA+C,EACpD,KAAK,yBAAyB,EAC9B,KAAK,+CAA+C,EACpD,KAAK,wCAAwC,EAC7C,KAAK,yCAAyC,EAC9C,KAAK,iCAAiC,EACtC,KAAK,wCAAwC,EAC7C,KAAK,iCAAiC,EACtC,KAAK,iCAAiC,EACtC,KAAK,oCAAoC,EAC1C,MAAM,0CAA0C,CAAC;AAElD,OAAO,EACL,+BAA+B,EAC/B,KAAK,oCAAoC,EACzC,KAAK,sBAAsB,EAC3B,KAAK,kCAAkC,EACvC,KAAK,6BAA6B,EACnC,MAAM,qCAAqC,CAAC;AAE7C,OAAO,EACL,sBAAsB,EACtB,gCAAgC,EAChC,wBAAwB,EACxB,KAAK,qCAAqC,EAC1C,KAAK,uBAAuB,EAC5B,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,EAC1B,KAAK,uBAAuB,EAC5B,KAAK,qBAAqB,EAC3B,MAAM,4BAA4B,CAAC;AAEpC,YAAY,EACV,mBAAmB,EACnB,aAAa,EACb,qBAAqB,EACrB,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,EACnB,0BAA0B,EAC3B,MAAM,oBAAoB,CAAC;AAE5B,YAAY,EACV,eAAe,EACf,eAAe,EACf,WAAW,EACX,WAAW,EACX,eAAe,EACf,OAAO,EACR,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,4BAA4B,EAC5B,KAAK,iCAAiC,EACtC,KAAK,mBAAmB,EACzB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EACL,mCAAmC,EACnC,KAAK,4BAA4B,EACjC,KAAK,wCAAwC,EAC7C,KAAK,8BAA8B,EACnC,KAAK,0BAA0B,EAC/B,KAAK,iBAAiB,EACvB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EACL,sBAAsB,EACtB,yBAAyB,EACzB,gCAAgC,EAChC,iCAAiC,EACjC,KAAK,2BAA2B,EAChC,KAAK,8BAA8B,EACnC,KAAK,qCAAqC,EAC1C,KAAK,sCAAsC,EAC3C,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,EAC9B,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,uBAAuB,EACvB,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EACxB,KAAK,4BAA4B,EAClC,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EACL,uBAAuB,EACvB,sBAAsB,EACtB,KAAK,4BAA4B,EACjC,KAAK,2BAA2B,EAChC,KAAK,aAAa,EACnB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,yBAAyB,EACzB,+BAA+B,EAC/B,KAAK,4BAA4B,EACjC,KAAK,8BAA8B,EACnC,KAAK,8BAA8B,EACnC,KAAK,kCAAkC,EACvC,KAAK,0BAA0B,EAC/B,KAAK,6BAA6B,EAClC,KAAK,0BAA0B,EAC/B,KAAK,qBAAqB,EAC1B,KAAK,uBAAuB,EAC5B,KAAK,0BAA0B,EAC/B,KAAK,gCAAgC,EACrC,KAAK,gCAAgC,EACrC,KAAK,yBAAyB,EAC/B,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EACL,0BAA0B,EAC1B,iBAAiB,EACjB,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,EAC3B,MAAM,gCAAgC,CAAC;AAExC,OAAO,EACL,yBAAyB,EACzB,wBAAwB,EACxB,oBAAoB,EACrB,MAAM,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -5,7 +5,7 @@
5
5
  * This constant is intentionally independent of the package version so
6
6
  * schema/API compatibility can be discussed explicitly.
7
7
  */
8
- export const ENGINE_API_VERSION = "0.34.0";
8
+ export const ENGINE_API_VERSION = "0.47.0";
9
9
  export { approximationResult, calibratedResult, calculatedResult, estimatedResult, validateCalculationQuality } from "./core/calculation-result.js";
10
10
  export { InvalidScientificInputError, InvalidScientificResultError } from "./core/validation.js";
11
11
  export { IMAGE_FORMATION_CONTRACT_VERSION, getImageFormationContract } from "./core/image-formation.js";
@@ -15,6 +15,16 @@ export { calculateEquivalentFocalLength35Mm } from "./camera/equivalent-focal-le
15
15
  export { calculatePixelPitch } from "./sensor/pixel-pitch.js";
16
16
  export { calculateImagingAreaMetrics, calculateSensorGeometryMetrics } from "./sensor/sensor-geometry.js";
17
17
  export { parseSensorArchitectureProfile } from "./sensor/architecture.js";
18
+ export { parseSensorColorSamplingProfile, resolveColorSamplingSite } from "./sensor/color-sampling.js";
19
+ export { parseNativeEffectiveRasterColorSamplingBindingProfile, resolveCaptureModeColorSamplingContributors, resolveNativeEffectiveRasterColorSamplingBinding } from "./sensor/capture-color-sampling-binding.js";
20
+ export { parseSensorOpticalStackProfile, resolveAntiAliasingSpatialKernel } from "./sensor/optical-stack.js";
21
+ export { parseSensorSamplingApertureProfile, resolveSensorSamplingAperture } from "./sensor/sampling-aperture.js";
22
+ export { calculateSensorSpatialSamplingQuadrature } from "./sensor/spatial-sampling-quadrature.js";
23
+ export { reduceSensorSpatialSamplingQuadrature } from "./sensor/spatial-sample-reduction.js";
24
+ export { parseCaptureModeProfile, resolveCaptureMode } from "./sensor/capture-mode.js";
25
+ export { calculateSensorReadoutTiming } from "./sensor/readout-timing.js";
26
+ export { calculateCaptureExposureWindows } from "./sensor/exposure-window.js";
27
+ export { assessReadoutExposureTimingLinkage } from "./sensor/readout-exposure-linkage.js";
18
28
  export { calculateCenteredCrop } from "./output/crop.js";
19
29
  export { calculateSubjectFramingCrop } from "./output/subject-framing-crop.js";
20
30
  export { calculateActiveCaptureFieldOfView, calculateOutputFieldOfView, mapImagePlanePointToOrientedPhysicalUv, mapOrientedPhysicalUvToImagePlanePoint, resolveCaptureGeometry, transformNativeRasterPointToOriented, transformNativeRasterRectToOriented, transformNativeRasterVectorToOriented, transformOrientedRasterPointToNative, transformOrientedRasterRectToNative, transformOrientedRasterVectorToNative } from "./output/capture-geometry.js";
@@ -29,7 +39,10 @@ export { calculateInverseLateralChromaticAberrationMapping, calculateInverseLate
29
39
  export { calculateIlluminationVignetting } from "./optics/illumination-vignetting.js";
30
40
  export { PSF_FOUNDATION_VERSION, calculatePsfFoundationComponents, getPsfFoundationContract } from "./optics/psf-foundation.js";
31
41
  export { calculateProjectedMotionBlur } from "./motion/projected-motion.js";
32
- export { calculateCameraRotationImageMapping } from "./motion/camera-rotation.js";
42
+ export { calculateCameraRotationImageMapping, calculateInverseCameraRotationImageMapping } from "./motion/camera-rotation.js";
43
+ export { calculateCaptureRotationTrajectories } from "./motion/capture-rotation-trajectory.js";
44
+ export { calculateCaptureRotationInverseMappings } from "./motion/capture-rotation-inverse-mapping.js";
45
+ export { calculateCaptureRotationTemporalQuadrature } from "./motion/capture-rotation-temporal-quadrature.js";
33
46
  export { calculateEquivalentIso, calculateExposureValue100, calculateRelativeOpticalExposure, calculateRelativeRenderedExposure } from "./exposure/exposure.js";
34
47
  export { estimateCameraShakeBlur } from "./stabilization/camera-shake.js";
35
48
  export { calculatePhotoelectrons, calculateSignalToNoise } from "./sensor/signal-noise.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,sCAAsC;AAEtC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,QAAiB,CAAC;AAEpD,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,0BAA0B,EAW3B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,2BAA2B,EAC3B,4BAA4B,EAC7B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,gCAAgC,EAChC,yBAAyB,EAY1B,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EACL,oBAAoB,EACpB,0BAA0B,EAK3B,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EACL,4BAA4B,EAG7B,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EACL,kCAAkC,EAGnC,MAAM,qCAAqC,CAAC;AAE7C,OAAO,EACL,mBAAmB,EAGpB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,2BAA2B,EAC3B,8BAA8B,EAO/B,MAAM,6BAA6B,CAAC;AAErC,OAAO,EACL,8BAA8B,EAU/B,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,qBAAqB,EAGtB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,2BAA2B,EAG5B,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EACL,iCAAiC,EACjC,0BAA0B,EAC1B,sCAAsC,EACtC,sCAAsC,EACtC,sBAAsB,EACtB,oCAAoC,EACpC,mCAAmC,EACnC,qCAAqC,EACrC,oCAAoC,EACpC,mCAAmC,EACnC,qCAAqC,EAmBtC,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EACL,8BAA8B,EAI/B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,iBAAiB,EAGlB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,0CAA0C,EAG3C,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EACL,8BAA8B,EAG/B,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EAKtB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EACL,kCAAkC,EAClC,iCAAiC,EAKlC,MAAM,6BAA6B,CAAC;AAErC,OAAO,EACL,uCAAuC,EACvC,wCAAwC,EACxC,gCAAgC,EAUjC,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EACL,iDAAiD,EACjD,kDAAkD,EAClD,0CAA0C,EAa3C,MAAM,0CAA0C,CAAC;AAElD,OAAO,EACL,+BAA+B,EAKhC,MAAM,qCAAqC,CAAC;AAE7C,OAAO,EACL,sBAAsB,EACtB,gCAAgC,EAChC,wBAAwB,EAOzB,MAAM,4BAA4B,CAAC;AAqBpC,OAAO,EACL,4BAA4B,EAG7B,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EACL,mCAAmC,EAMpC,MAAM,6BAA6B,CAAC;AAErC,OAAO,EACL,sBAAsB,EACtB,yBAAyB,EACzB,gCAAgC,EAChC,iCAAiC,EAOlC,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,uBAAuB,EAIxB,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EACL,uBAAuB,EACvB,sBAAsB,EAIvB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,yBAAyB,EACzB,+BAA+B,EAchC,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EACL,0BAA0B,EAC1B,iBAAiB,EAGlB,MAAM,gCAAgC,CAAC;AAExC,OAAO,EACL,yBAAyB,EACzB,wBAAwB,EACxB,oBAAoB,EACrB,MAAM,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -72,6 +72,57 @@ export interface CameraRotationImageMapping {
72
72
  distance: number;
73
73
  };
74
74
  }
75
+ export interface CalculateInverseCameraRotationImageMappingInput {
76
+ /** Physical focal length in millimetres. */
77
+ focalLengthMm: number;
78
+ /**
79
+ * Captured image-plane location of a stationary world ray at the requested
80
+ * time. Coordinates use optical-axis origin, +X right and +Y up.
81
+ */
82
+ imagePointMm: ImagePlanePointMm;
83
+ /**
84
+ * Capture time in seconds from exposure start. Must be greater than or equal
85
+ * to zero.
86
+ */
87
+ timeSecondsFromExposureStart: number;
88
+ /**
89
+ * Constant camera angular-velocity vector in radians per second, with the
90
+ * same sign/axis semantics as calculateCameraRotationImageMapping().
91
+ */
92
+ angularVelocityRadPerSec: CameraAngularVelocityRadPerSec;
93
+ /** Optional focus distance in metres for thin-lens projection distance. */
94
+ focusDistanceM?: number;
95
+ /**
96
+ * Optional axis-aware geometric sampling pitch for reporting sample-domain
97
+ * inverse displacement.
98
+ */
99
+ samplingPitchMicrometers?: AxisSamplingPitchMicrometers;
100
+ }
101
+ export interface InverseCameraRotationImageMapping {
102
+ projectionDistanceMm: number;
103
+ timeSecondsFromExposureStart: number;
104
+ angularDisplacementRad: {
105
+ pitch: number;
106
+ yaw: number;
107
+ roll: number;
108
+ magnitude: number;
109
+ };
110
+ capturedImagePointMm: ImagePlanePointMm;
111
+ referenceImagePointMm: ImagePlanePointMm;
112
+ /**
113
+ * Reference-minus-captured displacement in the image-plane basis.
114
+ */
115
+ deltaMm: {
116
+ x: number;
117
+ y: number;
118
+ distance: number;
119
+ };
120
+ deltaImagePlaneSamples?: {
121
+ x: number;
122
+ y: number;
123
+ distance: number;
124
+ };
125
+ }
75
126
  /**
76
127
  * Maps one stationary-world ray to its image-plane location after pure camera
77
128
  * rotation at an arbitrary physical time from exposure start.
@@ -88,4 +139,13 @@ export interface CameraRotationImageMapping {
88
139
  * @returns Field-position-dependent image-plane mapping and displacement.
89
140
  */
90
141
  export declare function calculateCameraRotationImageMapping(input: CalculateCameraRotationImageMappingInput): CalculationResult<CameraRotationImageMapping>;
142
+ /**
143
+ * Maps a captured stationary-world ray at one non-negative capture time back
144
+ * to its image-plane location at exposure start.
145
+ *
146
+ * For the existing constant-axis pure-rotation model this inverse is analytic:
147
+ * the captured ray is transformed by the forward camera rotation before
148
+ * rectilinear projection. No iterative solver is required.
149
+ */
150
+ export declare function calculateInverseCameraRotationImageMapping(input: CalculateInverseCameraRotationImageMappingInput): CalculationResult<InverseCameraRotationImageMapping>;
91
151
  //# sourceMappingURL=camera-rotation.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"camera-rotation.d.ts","sourceRoot":"","sources":["../../src/motion/camera-rotation.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,+BAA+B,CAAC;AAOvC,MAAM,WAAW,8BAA8B;IAC7C,+EAA+E;IAC/E,KAAK,EAAE,MAAM,CAAC;IACd,4EAA4E;IAC5E,GAAG,EAAE,MAAM,CAAC;IACZ,iFAAiF;IACjF,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,iBAAiB;IAChC,6EAA6E;IAC7E,CAAC,EAAE,MAAM,CAAC;IACV,6EAA6E;IAC7E,CAAC,EAAE,MAAM,CAAC;CACX;AAED,MAAM,WAAW,4BAA4B;IAC3C,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED,MAAM,WAAW,wCAAwC;IACvD,4CAA4C;IAC5C,aAAa,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,YAAY,EAAE,iBAAiB,CAAC;IAChC;;OAEG;IACH,4BAA4B,EAAE,MAAM,CAAC;IACrC;;;;;OAKG;IACH,wBAAwB,EAAE,8BAA8B,CAAC;IACzD,2EAA2E;IAC3E,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;OAIG;IACH,wBAAwB,CAAC,EAAE,4BAA4B,CAAC;CACzD;AAED,MAAM,WAAW,0BAA0B;IACzC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,4BAA4B,EAAE,MAAM,CAAC;IACrC,sBAAsB,EAAE;QACtB,KAAK,EAAE,MAAM,CAAC;QACd,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,kBAAkB,EAAE,iBAAiB,CAAC;IACtC,OAAO,EAAE;QACP,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;QACV,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF;;;OAGG;IACH,sBAAsB,CAAC,EAAE;QACvB,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;QACV,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAkFD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,mCAAmC,CACjD,KAAK,EAAE,wCAAwC,GAC9C,iBAAiB,CAAC,0BAA0B,CAAC,CAkJ/C"}
1
+ {"version":3,"file":"camera-rotation.d.ts","sourceRoot":"","sources":["../../src/motion/camera-rotation.ts"],"names":[],"mappings":"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"}
@@ -154,4 +154,99 @@ export function calculateCameraRotationImageMapping(input) {
154
154
  "The stationary world ray is transformed by the inverse camera rotation before rectilinear projection"
155
155
  ]);
156
156
  }
157
+ /**
158
+ * Maps a captured stationary-world ray at one non-negative capture time back
159
+ * to its image-plane location at exposure start.
160
+ *
161
+ * For the existing constant-axis pure-rotation model this inverse is analytic:
162
+ * the captured ray is transformed by the forward camera rotation before
163
+ * rectilinear projection. No iterative solver is required.
164
+ */
165
+ export function calculateInverseCameraRotationImageMapping(input) {
166
+ requirePositiveFinite("focalLengthMm", input.focalLengthMm);
167
+ requireFinite("imagePointMm.x", input.imagePointMm.x);
168
+ requireFinite("imagePointMm.y", input.imagePointMm.y);
169
+ requireNonNegativeFinite("timeSecondsFromExposureStart", input.timeSecondsFromExposureStart);
170
+ requireFinite("angularVelocityRadPerSec.pitch", input.angularVelocityRadPerSec.pitch);
171
+ requireFinite("angularVelocityRadPerSec.yaw", input.angularVelocityRadPerSec.yaw);
172
+ requireFinite("angularVelocityRadPerSec.roll", input.angularVelocityRadPerSec.roll);
173
+ if (input.samplingPitchMicrometers !== undefined) {
174
+ requirePositiveFinite("samplingPitchMicrometers.x", input.samplingPitchMicrometers.x);
175
+ requirePositiveFinite("samplingPitchMicrometers.y", input.samplingPitchMicrometers.y);
176
+ }
177
+ const { projectionDistanceMm, focusAware } = resolveProjectionDistanceMm(input.focalLengthMm, input.focusDistanceM);
178
+ const angularDisplacementRad = {
179
+ pitch: input.angularVelocityRadPerSec.pitch *
180
+ input.timeSecondsFromExposureStart,
181
+ yaw: input.angularVelocityRadPerSec.yaw *
182
+ input.timeSecondsFromExposureStart,
183
+ roll: input.angularVelocityRadPerSec.roll *
184
+ input.timeSecondsFromExposureStart
185
+ };
186
+ const angularMagnitude = Math.hypot(angularDisplacementRad.pitch, angularDisplacementRad.yaw, angularDisplacementRad.roll);
187
+ const capturedRay = {
188
+ x: input.imagePointMm.x / projectionDistanceMm,
189
+ y: input.imagePointMm.y / projectionDistanceMm,
190
+ z: 1
191
+ };
192
+ let referenceRay = capturedRay;
193
+ if (angularMagnitude !== 0) {
194
+ const axis = {
195
+ x: angularDisplacementRad.pitch / angularMagnitude,
196
+ y: angularDisplacementRad.yaw / angularMagnitude,
197
+ z: angularDisplacementRad.roll / angularMagnitude
198
+ };
199
+ referenceRay = rotateVectorByAxisAngle(capturedRay, axis, angularMagnitude);
200
+ }
201
+ if (!Number.isFinite(referenceRay.z) || referenceRay.z <= 0) {
202
+ throw new InvalidScientificInputError("Inverse camera rotation maps the requested captured ray to or behind the reference camera plane.");
203
+ }
204
+ const referenceImagePointMm = {
205
+ x: projectionDistanceMm * (referenceRay.x / referenceRay.z),
206
+ y: projectionDistanceMm * (referenceRay.y / referenceRay.z)
207
+ };
208
+ const deltaMm = {
209
+ x: referenceImagePointMm.x - input.imagePointMm.x,
210
+ y: referenceImagePointMm.y - input.imagePointMm.y,
211
+ distance: Math.hypot(referenceImagePointMm.x - input.imagePointMm.x, referenceImagePointMm.y - input.imagePointMm.y)
212
+ };
213
+ let deltaImagePlaneSamples;
214
+ if (input.samplingPitchMicrometers !== undefined) {
215
+ const pitchXmm = input.samplingPitchMicrometers.x / 1000;
216
+ const pitchYmm = input.samplingPitchMicrometers.y / 1000;
217
+ const sampleX = deltaMm.x / pitchXmm;
218
+ const sampleY = deltaMm.y / pitchYmm;
219
+ deltaImagePlaneSamples = {
220
+ x: sampleX,
221
+ y: sampleY,
222
+ distance: Math.hypot(sampleX, sampleY)
223
+ };
224
+ }
225
+ return calculatedResult({
226
+ projectionDistanceMm,
227
+ timeSecondsFromExposureStart: input.timeSecondsFromExposureStart,
228
+ angularDisplacementRad: {
229
+ ...angularDisplacementRad,
230
+ magnitude: angularMagnitude
231
+ },
232
+ capturedImagePointMm: { ...input.imagePointMm },
233
+ referenceImagePointMm,
234
+ deltaMm,
235
+ ...(deltaImagePlaneSamples === undefined
236
+ ? {}
237
+ : { deltaImagePlaneSamples })
238
+ }, focusAware
239
+ ? "focus-aware-inverse-spatial-camera-rotation-mapping"
240
+ : "inverse-spatial-camera-rotation-mapping", "1.0.0", [
241
+ "Ideal rectilinear projection",
242
+ focusAware
243
+ ? "Thin-lens image distance for the selected focus plane is used as the projection distance"
244
+ : "Nominal focal length is used as the infinity-focus projection distance",
245
+ "Camera angular velocity is constant during the evaluated interval",
246
+ "Angular velocity components are resolved in the camera axes at exposure start and integrated as one axis-angle vector",
247
+ "The inverse is analytic under the same constant-axis pure-rotation model; no iterative solve is used",
248
+ "The captured stationary-world ray is transformed by the forward camera rotation to recover its exposure-start reference ray",
249
+ "Camera translation, scene depth parallax and subject motion are not modeled"
250
+ ]);
251
+ }
157
252
  //# sourceMappingURL=camera-rotation.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"camera-rotation.js","sourceRoot":"","sources":["../../src/motion/camera-rotation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"camera-rotation.js","sourceRoot":"","sources":["../../src/motion/camera-rotation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,100 @@
1
+ import { type CalculationProvenance, type CalculationResult } from "../core/calculation-result.js";
2
+ import { type CaptureOrientation, type RasterPoint, type RasterVector } from "../output/capture-geometry.js";
3
+ import { type CalculateCaptureExposureWindowsInput } from "../sensor/exposure-window.js";
4
+ import { type SensorImagingArea } from "../sensor/sensor-geometry.js";
5
+ import { type CameraAngularVelocityRadPerSec, type ImagePlanePointMm } from "./camera-rotation.js";
6
+ export interface CalculateCaptureRotationInverseMappingsInput extends CalculateCaptureExposureWindowsInput {
7
+ imagingArea: SensorImagingArea;
8
+ focalLengthMm: number;
9
+ focusDistanceM?: number;
10
+ angularVelocityRadPerSec: CameraAngularVelocityRadPerSec;
11
+ /**
12
+ * Fraction of each point's local exposure interval at which the
13
+ * instantaneous mapping is evaluated.
14
+ *
15
+ * 0 = local exposure start, 0.5 = local midpoint, 1 = local exposure end.
16
+ * A phase is required because finite exposure has no single sharp geometry.
17
+ */
18
+ localExposurePhase: number;
19
+ /**
20
+ * Physical capture orientation used only to rotate the reported native
21
+ * inverse sample-displacement vector into oriented-capture coordinates.
22
+ * It does not alter the native exposure schedule.
23
+ */
24
+ orientation: CaptureOrientation;
25
+ samplePointsNative: readonly RasterPoint[];
26
+ }
27
+ export interface CaptureRotationInverseMappingSample {
28
+ destinationPointNative: RasterPoint;
29
+ destinationImagePointMm: ImagePlanePointMm;
30
+ localExposureWindow: {
31
+ startSecondsFromCaptureReference: number;
32
+ endSecondsFromCaptureReference: number;
33
+ durationSeconds: number;
34
+ };
35
+ localExposurePhase: number;
36
+ captureTimeSecondsFromReference: number;
37
+ /**
38
+ * Same stationary world ray expressed in the exposure-start reference image
39
+ * plane. This may lie outside the active capture; it is intentionally not
40
+ * clamped.
41
+ */
42
+ referenceImagePointMm: ImagePlanePointMm;
43
+ inverseDisplacementImagePlaneMm: {
44
+ x: number;
45
+ y: number;
46
+ distance: number;
47
+ };
48
+ /**
49
+ * Reference-minus-destination displacement in continuous native effective
50
+ * raster-sample units (+X right, +Y down).
51
+ */
52
+ inverseDisplacementNativeSamples: RasterVector & {
53
+ distance: number;
54
+ };
55
+ /**
56
+ * The same displacement after physical capture orientation.
57
+ */
58
+ inverseDisplacementOrientedSamples: RasterVector & {
59
+ distance: number;
60
+ };
61
+ }
62
+ export interface CaptureRotationInverseMappings {
63
+ timeReference: "first-opening-boundary-phase";
64
+ referenceTimeSecondsFromCaptureReference: 0;
65
+ mappingMeaning: "instantaneous-destination-to-exposure-start-reference-ray";
66
+ orientation: CaptureOrientation;
67
+ localExposurePhase: number;
68
+ imagingArea: SensorImagingArea;
69
+ activeCaptureRect: {
70
+ x: number;
71
+ y: number;
72
+ width: number;
73
+ height: number;
74
+ };
75
+ samples: readonly CaptureRotationInverseMappingSample[];
76
+ componentProvenance: {
77
+ exposureWindows: CalculationProvenance;
78
+ sensorGeometry: CalculationProvenance;
79
+ inverseCameraRotation: CalculationProvenance;
80
+ };
81
+ }
82
+ /**
83
+ * Calculates an instantaneous inverse capture-scan mapping for stationary
84
+ * world rays under pure camera rotation.
85
+ *
86
+ * The destination native sensor location is authoritative for local exposure
87
+ * timing. At an explicit phase within that local window, the captured
88
+ * image-plane ray is analytically mapped back to the reference image plane at
89
+ * the first opening-boundary phase.
90
+ *
91
+ * No fixed-point/iterative solve is used because pure rotation under the
92
+ * existing constant-axis model has an analytic inverse once destination
93
+ * location and local capture time are known.
94
+ *
95
+ * This function is not a finite-exposure renderer and does not integrate blur.
96
+ * Sensor data-readout timing is deliberately absent; exposure boundaries are
97
+ * the only timing source.
98
+ */
99
+ export declare function calculateCaptureRotationInverseMappings(input: CalculateCaptureRotationInverseMappingsInput): CalculationResult<CaptureRotationInverseMappings>;
100
+ //# sourceMappingURL=capture-rotation-inverse-mapping.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capture-rotation-inverse-mapping.d.ts","sourceRoot":"","sources":["../../src/motion/capture-rotation-inverse-mapping.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,qBAAqB,EAC1B,KAAK,iBAAiB,EACvB,MAAM,+BAA+B,CAAC;AAKvC,OAAO,EAIL,KAAK,kBAAkB,EACvB,KAAK,WAAW,EAChB,KAAK,YAAY,EAClB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAEL,KAAK,oCAAoC,EAE1C,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAEL,KAAK,8BAA8B,EACnC,KAAK,iBAAiB,EACvB,MAAM,sBAAsB,CAAC;AAE9B,MAAM,WAAW,4CACf,SAAQ,oCAAoC;IAC5C,WAAW,EAAE,iBAAiB,CAAC;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,wBAAwB,EAAE,8BAA8B,CAAC;IACzD;;;;;;OAMG;IACH,kBAAkB,EAAE,MAAM,CAAC;IAC3B;;;;OAIG;IACH,WAAW,EAAE,kBAAkB,CAAC;IAChC,kBAAkB,EAAE,SAAS,WAAW,EAAE,CAAC;CAC5C;AAED,MAAM,WAAW,mCAAmC;IAClD,sBAAsB,EAAE,WAAW,CAAC;IACpC,uBAAuB,EAAE,iBAAiB,CAAC;IAC3C,mBAAmB,EAAE;QACnB,gCAAgC,EAAE,MAAM,CAAC;QACzC,8BAA8B,EAAE,MAAM,CAAC;QACvC,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;IACF,kBAAkB,EAAE,MAAM,CAAC;IAC3B,+BAA+B,EAAE,MAAM,CAAC;IACxC;;;;OAIG;IACH,qBAAqB,EAAE,iBAAiB,CAAC;IACzC,+BAA+B,EAAE;QAC/B,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;QACV,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF;;;OAGG;IACH,gCAAgC,EAAE,YAAY,GAAG;QAC/C,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF;;OAEG;IACH,kCAAkC,EAAE,YAAY,GAAG;QACjD,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED,MAAM,WAAW,8BAA8B;IAC7C,aAAa,EAAE,8BAA8B,CAAC;IAC9C,wCAAwC,EAAE,CAAC,CAAC;IAC5C,cAAc,EACZ,2DAA2D,CAAC;IAC9D,WAAW,EAAE,kBAAkB,CAAC;IAChC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,WAAW,EAAE,iBAAiB,CAAC;IAC/B,iBAAiB,EAAE;QACjB,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;QACV,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,OAAO,EAAE,SAAS,mCAAmC,EAAE,CAAC;IACxD,mBAAmB,EAAE;QACnB,eAAe,EAAE,qBAAqB,CAAC;QACvC,cAAc,EAAE,qBAAqB,CAAC;QACtC,qBAAqB,EAAE,qBAAqB,CAAC;KAC9C,CAAC;CACH;AAwDD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,uCAAuC,CACrD,KAAK,EAAE,4CAA4C,GAClD,iBAAiB,CAAC,8BAA8B,CAAC,CA4JnD"}