53 lines
1.3 KiB
C#
53 lines
1.3 KiB
C#
using System.Collections;
|
|||
|
|
using System.Collections.Generic;
|
||
|
|
using UnityEngine;
|
||
|
|
|
||
|
|
public class SellmeierEquation
|
||
|
|
{
|
||
|
|
public class Coefficients {
|
||
|
|
public float[] B { get; private set; }
|
||
|
|
public float[] C { get; private set; }
|
||
|
|
|
||
|
|
public Coefficients(float[] b, float[] c) {
|
||
|
|
B = b;
|
||
|
|
C = c;
|
||
|
|
|
||
|
|
if (b == null || c == null) {
|
||
|
|
throw new System.Exception("Invalid args");
|
||
|
|
}
|
||
|
|
|
||
|
|
if (b.Length == 0 || c.Length == 0) {
|
||
|
|
throw new System.Exception("Invalid args");
|
||
|
|
}
|
||
|
|
|
||
|
|
if (b.Length != c.Length) {
|
||
|
|
throw new System.Exception("Invalid args");
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
private Coefficients _coeffs;
|
||
|
|
|
||
|
|
public SellmeierEquation(Coefficients coeffs) {
|
||
|
|
_coeffs = coeffs;
|
||
|
|
}
|
||
|
|
|
||
|
|
public float Calc(float wavelength) {
|
||
|
|
return Calc(_coeffs, wavelength);
|
||
|
|
}
|
||
|
|
|
||
|
|
public static float Calc(Coefficients coeffs, float wavelength) {
|
||
|
|
float lSquare = wavelength * wavelength;
|
||
|
|
float resultSquared = 1.0f;
|
||
|
|
|
||
|
|
for (int i = 0; i < coeffs.B.Length; i++) {
|
||
|
|
float bi = coeffs.B[i];
|
||
|
|
float ci = coeffs.C[i];
|
||
|
|
resultSquared += (bi * lSquare) / (lSquare - ci);
|
||
|
|
}
|
||
|
|
|
||
|
|
return Mathf.Sqrt(resultSquared);
|
||
|
|
}
|
||
|
|
}
|