scax-engine 0.1.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.
- package/LICENSE +21 -0
- package/README.md +182 -0
- package/dist/scax-engine.cjs +9441 -0
- package/dist/scax-engine.js +9437 -0
- package/dist/scax-engine.umd.js +9447 -0
- package/dist/types/affine/affine.d.ts +45 -0
- package/dist/types/index.d.ts +7 -0
- package/dist/types/light-sources/light-source.d.ts +57 -0
- package/dist/types/optics/refractive-index.d.ts +11 -0
- package/dist/types/parameters/constants.d.ts +194 -0
- package/dist/types/parameters/eye/eyemodel-parameter.d.ts +36 -0
- package/dist/types/parameters/eye/gullstrand-parameter.d.ts +6 -0
- package/dist/types/parameters/eye/navarro-parameter.d.ts +6 -0
- package/dist/types/ray/ray.d.ts +27 -0
- package/dist/types/scax-engine.d.ts +441 -0
- package/dist/types/sturm/sturm.d.ts +81 -0
- package/dist/types/surfaces/aperture-stop-surface.d.ts +35 -0
- package/dist/types/surfaces/aspherical-surface.d.ts +70 -0
- package/dist/types/surfaces/paraxial-surface.d.ts +61 -0
- package/dist/types/surfaces/spherical-image.d.ts +42 -0
- package/dist/types/surfaces/spherical-surface.d.ts +58 -0
- package/dist/types/surfaces/st-surface.d.ts +91 -0
- package/dist/types/surfaces/surface.d.ts +32 -0
- package/dist/types/surfaces/toric-surface.d.ts +68 -0
- package/dist/types/utils/deg-to-tabo.d.ts +3 -0
- package/dist/types/utils/tabo-to-deg.d.ts +3 -0
- package/package.json +64 -0
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
export type AffinePair = {
|
|
2
|
+
sx: number;
|
|
3
|
+
sy: number;
|
|
4
|
+
tx: number;
|
|
5
|
+
ty: number;
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* 2D affine 왜곡 추정 전용 클래스입니다.
|
|
9
|
+
* [x'; y'] = [[a b c], [d e f]] * [x y 1]^T 형태를 최소자승으로 적합합니다.
|
|
10
|
+
*/
|
|
11
|
+
export default class Affine {
|
|
12
|
+
private lastResult;
|
|
13
|
+
private lastPairs;
|
|
14
|
+
estimate(pairs: AffinePair[]): {
|
|
15
|
+
count: number;
|
|
16
|
+
residualAvgPct: number;
|
|
17
|
+
residualMaxPct: number;
|
|
18
|
+
residuals: {
|
|
19
|
+
sx: number;
|
|
20
|
+
sy: number;
|
|
21
|
+
px: number;
|
|
22
|
+
py: number;
|
|
23
|
+
rx: number;
|
|
24
|
+
ry: number;
|
|
25
|
+
magnitude: number;
|
|
26
|
+
pct: number;
|
|
27
|
+
}[];
|
|
28
|
+
a: any;
|
|
29
|
+
b: any;
|
|
30
|
+
c: any;
|
|
31
|
+
d: any;
|
|
32
|
+
e: any;
|
|
33
|
+
f: any;
|
|
34
|
+
} | null;
|
|
35
|
+
/**
|
|
36
|
+
* 마지막 affine 추정 결과를 반환합니다.
|
|
37
|
+
*/
|
|
38
|
+
getLastResult(): unknown;
|
|
39
|
+
/**
|
|
40
|
+
* 마지막 affine 추정에 사용된 입력쌍을 반환합니다.
|
|
41
|
+
*/
|
|
42
|
+
getLastPairs(): AffinePair[];
|
|
43
|
+
private fitAffine2D;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=affine.d.ts.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { default as SCAXEngine } from "./scax-engine";
|
|
2
|
+
export { SCAXEngineCore } from "./scax-engine";
|
|
3
|
+
export { default as Ray } from "./ray/ray";
|
|
4
|
+
export type { RayProps } from "./ray/ray";
|
|
5
|
+
export type { AffinePair } from "./affine/affine";
|
|
6
|
+
export type { EyeModel, PupilType, LightSourceConfig, LensConfig, EyeConfig, EyePowerInput, SCAXEngineProps, SCAxPower, AstigmatismSummaryItem, PrismSummaryItem, SimulationResultInfo, SimulateResult, AffineAnalysisResult, } from "./scax-engine";
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { Vector3 } from "three";
|
|
2
|
+
import Ray from "../ray/ray.js";
|
|
3
|
+
/** 프라우호퍼 c선 (빨강) */
|
|
4
|
+
export declare const CHROMATIC_RED_NM = 656.28;
|
|
5
|
+
export declare const CHROMATIC_RED_COLOR = 16281969;
|
|
6
|
+
/** 프라우호퍼 e선 (초록) */
|
|
7
|
+
export declare const CHROMATIC_GREEN_NM = 546.07;
|
|
8
|
+
export declare const CHROMATIC_GREEN_COLOR = 4906624;
|
|
9
|
+
export declare class LightSource {
|
|
10
|
+
protected rays: Ray[];
|
|
11
|
+
constructor();
|
|
12
|
+
protected directionFromVergence(origin: Vector3, z: number, vergence: number): Vector3;
|
|
13
|
+
protected createRayFromPoint(origin: Vector3, z: number, vergence: number): void;
|
|
14
|
+
protected createChromaticRayFromPoint(origin: Vector3, z: number, vergence: number, line: "e" | "C", chromaticVergenceOffset?: number): void;
|
|
15
|
+
addRay(ray: Ray): void;
|
|
16
|
+
emitRays(): Ray[];
|
|
17
|
+
}
|
|
18
|
+
export type GridLightSourceProps = {
|
|
19
|
+
width: number;
|
|
20
|
+
height: number;
|
|
21
|
+
division: number;
|
|
22
|
+
z: number;
|
|
23
|
+
vergence: number;
|
|
24
|
+
};
|
|
25
|
+
export declare class GridLightSource extends LightSource {
|
|
26
|
+
private width;
|
|
27
|
+
private height;
|
|
28
|
+
private division;
|
|
29
|
+
private z;
|
|
30
|
+
private vergence;
|
|
31
|
+
constructor(props: GridLightSourceProps);
|
|
32
|
+
}
|
|
33
|
+
export type GridRGLightSourceProps = GridLightSourceProps;
|
|
34
|
+
export declare class GridRGLightSource extends LightSource {
|
|
35
|
+
private width;
|
|
36
|
+
private height;
|
|
37
|
+
private division;
|
|
38
|
+
private z;
|
|
39
|
+
private vergence;
|
|
40
|
+
constructor(props: GridRGLightSourceProps);
|
|
41
|
+
}
|
|
42
|
+
export type RadialLightSourceProps = {
|
|
43
|
+
radius: number;
|
|
44
|
+
division: number;
|
|
45
|
+
angle_division: number;
|
|
46
|
+
z: number;
|
|
47
|
+
vergence: number;
|
|
48
|
+
};
|
|
49
|
+
export declare class RadialLightSource extends LightSource {
|
|
50
|
+
private radius;
|
|
51
|
+
private division;
|
|
52
|
+
private angle_division;
|
|
53
|
+
private z;
|
|
54
|
+
private vergence;
|
|
55
|
+
constructor(props: RadialLightSourceProps);
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=light-source.d.ts.map
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export type FraunhoferLine = "g" | "F" | "e" | "d" | "C" | "r";
|
|
2
|
+
export type RefractiveIndexByLine = Partial<Record<FraunhoferLine, number>>;
|
|
3
|
+
export type RefractiveIndexSpec = number | RefractiveIndexByLine;
|
|
4
|
+
export declare function resolveRefractiveIndex(spec: RefractiveIndexSpec, line: FraunhoferLine): number;
|
|
5
|
+
export declare function normalizeRefractiveIndexSpec(spec: RefractiveIndexSpec): number | {
|
|
6
|
+
F: number;
|
|
7
|
+
e: number;
|
|
8
|
+
d: number;
|
|
9
|
+
C: number;
|
|
10
|
+
} | Partial<Record<FraunhoferLine, number>>;
|
|
11
|
+
//# sourceMappingURL=refractive-index.d.ts.map
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 프라운호퍼 파장과 색상
|
|
3
|
+
*/
|
|
4
|
+
export declare const WAVELENGTHS: {
|
|
5
|
+
g: {
|
|
6
|
+
nm: number;
|
|
7
|
+
color: number;
|
|
8
|
+
};
|
|
9
|
+
F: {
|
|
10
|
+
nm: number;
|
|
11
|
+
color: number;
|
|
12
|
+
};
|
|
13
|
+
e: {
|
|
14
|
+
nm: number;
|
|
15
|
+
color: number;
|
|
16
|
+
};
|
|
17
|
+
d: {
|
|
18
|
+
nm: number;
|
|
19
|
+
color: number;
|
|
20
|
+
};
|
|
21
|
+
C: {
|
|
22
|
+
nm: number;
|
|
23
|
+
color: number;
|
|
24
|
+
};
|
|
25
|
+
r: {
|
|
26
|
+
nm: number;
|
|
27
|
+
color: number;
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* 매질별 프라운오퍼 파장과 굴절률
|
|
32
|
+
*/
|
|
33
|
+
export declare const FRAUNHOFER_REFRACTIVE_INDICES: {
|
|
34
|
+
air: {
|
|
35
|
+
F: number;
|
|
36
|
+
e: number;
|
|
37
|
+
d: number;
|
|
38
|
+
C: number;
|
|
39
|
+
};
|
|
40
|
+
crown_glass: {
|
|
41
|
+
g: number;
|
|
42
|
+
F: number;
|
|
43
|
+
e: number;
|
|
44
|
+
d: number;
|
|
45
|
+
C: number;
|
|
46
|
+
r: number;
|
|
47
|
+
};
|
|
48
|
+
plastic_150: {
|
|
49
|
+
F: number;
|
|
50
|
+
e: number;
|
|
51
|
+
d: number;
|
|
52
|
+
C: number;
|
|
53
|
+
};
|
|
54
|
+
plastic_160: {
|
|
55
|
+
F: number;
|
|
56
|
+
e: number;
|
|
57
|
+
d: number;
|
|
58
|
+
C: number;
|
|
59
|
+
};
|
|
60
|
+
plastic_167: {
|
|
61
|
+
F: number;
|
|
62
|
+
e: number;
|
|
63
|
+
d: number;
|
|
64
|
+
C: number;
|
|
65
|
+
};
|
|
66
|
+
plastic_174: {
|
|
67
|
+
F: number;
|
|
68
|
+
e: number;
|
|
69
|
+
d: number;
|
|
70
|
+
C: number;
|
|
71
|
+
};
|
|
72
|
+
cornea: {
|
|
73
|
+
F: number;
|
|
74
|
+
e: number;
|
|
75
|
+
d: number;
|
|
76
|
+
C: number;
|
|
77
|
+
};
|
|
78
|
+
aqueous: {
|
|
79
|
+
F: number;
|
|
80
|
+
e: number;
|
|
81
|
+
d: number;
|
|
82
|
+
C: number;
|
|
83
|
+
};
|
|
84
|
+
vitreous: {
|
|
85
|
+
F: number;
|
|
86
|
+
e: number;
|
|
87
|
+
d: number;
|
|
88
|
+
C: number;
|
|
89
|
+
};
|
|
90
|
+
lens: {
|
|
91
|
+
F: number;
|
|
92
|
+
e: number;
|
|
93
|
+
d: number;
|
|
94
|
+
C: number;
|
|
95
|
+
};
|
|
96
|
+
lens_anterior: {
|
|
97
|
+
F: number;
|
|
98
|
+
e: number;
|
|
99
|
+
d: number;
|
|
100
|
+
C: number;
|
|
101
|
+
};
|
|
102
|
+
lens_nucleus_anterior: {
|
|
103
|
+
F: number;
|
|
104
|
+
e: number;
|
|
105
|
+
d: number;
|
|
106
|
+
C: number;
|
|
107
|
+
};
|
|
108
|
+
lens_nucleus_posterior: {
|
|
109
|
+
F: number;
|
|
110
|
+
e: number;
|
|
111
|
+
d: number;
|
|
112
|
+
C: number;
|
|
113
|
+
};
|
|
114
|
+
lens_posterior: {
|
|
115
|
+
F: number;
|
|
116
|
+
e: number;
|
|
117
|
+
d: number;
|
|
118
|
+
C: number;
|
|
119
|
+
};
|
|
120
|
+
};
|
|
121
|
+
/**
|
|
122
|
+
* 동공 크기
|
|
123
|
+
*/
|
|
124
|
+
export declare const PUPIL_SIZE: {
|
|
125
|
+
/** 축동 — 동공 수축 */
|
|
126
|
+
constricted: number;
|
|
127
|
+
/** 일반 */
|
|
128
|
+
neutral: number;
|
|
129
|
+
/** 산동 — 동공 확대 */
|
|
130
|
+
dilated: number;
|
|
131
|
+
/** 동공 미사용(차단/필터 비활성) */
|
|
132
|
+
none: number;
|
|
133
|
+
};
|
|
134
|
+
/**
|
|
135
|
+
* 망막 뒤 광선 연장 거리
|
|
136
|
+
*/
|
|
137
|
+
export declare const RETINA_EXTRA_AFTER_MM = 18;
|
|
138
|
+
/**
|
|
139
|
+
* epsilon
|
|
140
|
+
*/
|
|
141
|
+
export declare const EPSILON = 1e-9;
|
|
142
|
+
/**
|
|
143
|
+
* 굴절 후 광선을 아주 조금 전진시켜 self-intersection을 방지하기 위한 거리(mm)
|
|
144
|
+
*/
|
|
145
|
+
export declare const RAY_SURFACE_ESCAPE_MM = 0.002;
|
|
146
|
+
/**
|
|
147
|
+
* ST(Sphere-Toric) 복합면에서 굴절력 0으로 판단하는 임계값(D)
|
|
148
|
+
*/
|
|
149
|
+
export declare const ST_POWER_EPS_D = 1e-9;
|
|
150
|
+
/**
|
|
151
|
+
* ST(Sphere-Toric) 복합면의 기본 두께(mm)
|
|
152
|
+
*/
|
|
153
|
+
export declare const ST_DEFAULT_THICKNESS_MM = 0.05;
|
|
154
|
+
/**
|
|
155
|
+
* 안구 보정 ST면(eye)의 기본 위치: 각막 전면 바로 앞(mm)
|
|
156
|
+
*/
|
|
157
|
+
export declare const EYE_ST_SURFACE_OFFSET_MM = 0.02;
|
|
158
|
+
/**
|
|
159
|
+
* 안경 렌즈 ST면(lens)의 기본 정간거리 Vertex Distance(mm)
|
|
160
|
+
*/
|
|
161
|
+
export declare const SPECTACLE_VERTEX_DISTANCE_MM = 12;
|
|
162
|
+
/**
|
|
163
|
+
* Toric 면 교점 탐색 시 현재 점과의 자기 재교차를 피하기 위한 최소 전진 거리(mm)
|
|
164
|
+
*/
|
|
165
|
+
export declare const TORIC_MIN_T_MM = 0.000001;
|
|
166
|
+
/**
|
|
167
|
+
* Toric 면 교점 계산(뉴턴법) 최대 반복 횟수
|
|
168
|
+
*/
|
|
169
|
+
export declare const TORIC_MAX_ITERS = 24;
|
|
170
|
+
/**
|
|
171
|
+
* 광선 시작점이 이미 Toric 면 위에 있다고 판단하는 허용 오차(mm)
|
|
172
|
+
*/
|
|
173
|
+
export declare const TORIC_ON_SURFACE_TOL_MM = 0.000001;
|
|
174
|
+
/**
|
|
175
|
+
* 동일 z 부근 연속 표면에서 수치 오차로 인한 미세 간격을 허용하는 오차(mm)
|
|
176
|
+
*/
|
|
177
|
+
export declare const TORIC_COINCIDENT_SURFACE_TOL_MM = 0.003;
|
|
178
|
+
/**
|
|
179
|
+
* Sturm 분석에서 Top2 선택 시 허용하는 최소 z 간격(mm)
|
|
180
|
+
*/
|
|
181
|
+
export declare const DEFAULT_STURM_TOP2_MIN_GAP_MM = 0;
|
|
182
|
+
/**
|
|
183
|
+
* Sturm 분석에서 Top2 선택 시 허용하는 최소 축 각도 차(도)
|
|
184
|
+
*/
|
|
185
|
+
export declare const DEFAULT_STURM_TOP2_MIN_ANGLE_GAP_DEG = 45;
|
|
186
|
+
/**
|
|
187
|
+
* 실효 난시량이 이 값(D) 이상이면 U/V 중간점을 CLC 근사 중심으로 우선 사용
|
|
188
|
+
*/
|
|
189
|
+
export declare const DEFAULT_EFFECTIVE_CYLINDER_THRESHOLD_D = 0.125;
|
|
190
|
+
/**
|
|
191
|
+
* Sturm z-scan 간격(mm)
|
|
192
|
+
*/
|
|
193
|
+
export declare const DEFAULT_STURM_STEP_MM = 0.01;
|
|
194
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import Surface from "../../surfaces/surface";
|
|
2
|
+
interface BaseEyeSurfaceParameter {
|
|
3
|
+
name: string;
|
|
4
|
+
z: number;
|
|
5
|
+
}
|
|
6
|
+
interface SphericalEyeSurfaceParameter extends BaseEyeSurfaceParameter {
|
|
7
|
+
type: "spherical";
|
|
8
|
+
radius: number;
|
|
9
|
+
n_before: number;
|
|
10
|
+
n_after: number;
|
|
11
|
+
}
|
|
12
|
+
interface AsphericalEyeSurfaceParameter extends BaseEyeSurfaceParameter {
|
|
13
|
+
type: "aspherical";
|
|
14
|
+
radius: number;
|
|
15
|
+
conic: number;
|
|
16
|
+
n_before: number;
|
|
17
|
+
n_after: number;
|
|
18
|
+
}
|
|
19
|
+
interface SphericalImageEyeSurfaceParameter extends BaseEyeSurfaceParameter {
|
|
20
|
+
type: "spherical-image";
|
|
21
|
+
radius: number;
|
|
22
|
+
}
|
|
23
|
+
type EyeSurfaceParameter = SphericalEyeSurfaceParameter | AsphericalEyeSurfaceParameter | SphericalImageEyeSurfaceParameter;
|
|
24
|
+
export interface EyeModelParameterConfig {
|
|
25
|
+
unit: string;
|
|
26
|
+
axis: string;
|
|
27
|
+
origin?: string;
|
|
28
|
+
surfaces: EyeSurfaceParameter[];
|
|
29
|
+
}
|
|
30
|
+
export declare class EyeModelParameter {
|
|
31
|
+
private readonly parameter;
|
|
32
|
+
constructor(parameter: EyeModelParameterConfig);
|
|
33
|
+
createSurface(): Surface[];
|
|
34
|
+
}
|
|
35
|
+
export {};
|
|
36
|
+
//# sourceMappingURL=eyemodel-parameter.d.ts.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { EyeModelParameter, EyeModelParameterConfig } from "./eyemodel-parameter";
|
|
2
|
+
export declare class GullstrandParameter extends EyeModelParameter {
|
|
3
|
+
static parameter: EyeModelParameterConfig;
|
|
4
|
+
constructor();
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=gullstrand-parameter.d.ts.map
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { Vector3 } from "three";
|
|
2
|
+
export type RayProps = {
|
|
3
|
+
origin: Vector3;
|
|
4
|
+
direction: Vector3;
|
|
5
|
+
frounhofer_line: 'g' | 'F' | 'e' | 'd' | 'C' | 'r';
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* 프라운호퍼 D선 광선이 기본 입니다.
|
|
9
|
+
* 기본 색은 노란색입니다.
|
|
10
|
+
*/
|
|
11
|
+
export default class Ray {
|
|
12
|
+
private points;
|
|
13
|
+
private origin;
|
|
14
|
+
private direction;
|
|
15
|
+
private frounhofer_line;
|
|
16
|
+
private wavelengthNm;
|
|
17
|
+
private displayColor;
|
|
18
|
+
constructor({ origin, direction, frounhofer_line }: RayProps);
|
|
19
|
+
appendPoint(point: Vector3): void;
|
|
20
|
+
endPoint(): Vector3;
|
|
21
|
+
getDirection(): Vector3;
|
|
22
|
+
getWavelengthNm(): number;
|
|
23
|
+
getFraunhoferLine(): "g" | "F" | "e" | "d" | "C" | "r";
|
|
24
|
+
clone(): Ray;
|
|
25
|
+
continueFrom(nextOrigin: Vector3, nextDirection: Vector3): void;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=ray.d.ts.map
|