using System.Collections; using System.Collections.Generic; using System.Linq; using UnityEngine; public class SellmeierEquatiionView : MonoBehaviour { private SellmeierEquation _equation; // Start is called before the first frame update void Start() { } // Update is called once per frame void Update() { } private float[] SamplePlot(SellmeierEquation equation) { int samplesCount = 30; float startLength = 0.3f; float endLength = 0.6f; float[] result = new float[samplesCount]; for (int i = 0; i < samplesCount; i++) { if(i > 0) { float step = ((endLength - startLength) / (samplesCount - 1)); result[i] = equation.Calc(startLength + step * i); } else { result[i] = equation.Calc(startLength); } } return result; } private void OnDrawGizmos() { if (_equation == null) { var coeffs = new SellmeierEquation.Coefficients( new float[] { 0.99654f, 0.18964f, 0.00411f }, new float[] { 0.00787f, 0.02191f, 3.85727f }); _equation = new SellmeierEquation(coeffs); } var samples = SamplePlot(_equation); float minValue = samples.Min(); float maxValue = samples.Max(); float n365 = _equation.Calc(0.365f); float n395 = _equation.Calc(0.395f); float n405 = _equation.Calc(0.405f); Debug.Log($"n365 = {n365}, n395 = {n395}, n405 = {n405}"); for (int i = 0; i < samples.Length - 1; i++) { var n1 = samples[i]; var n2 = samples[i + 1]; float n1Scaled = (n1 - minValue) / (maxValue - minValue); float n2Scaled = (n2 - minValue) / (maxValue - minValue); Gizmos.DrawLine(transform.position + Vector3.right * (i / (float)samples.Length) + Vector3.up * n1Scaled, transform.position + Vector3.right * ((i + 1) / (float)samples.Length) + Vector3.up * n2Scaled); } } }