IRayTraceNormUnpolData
IRayTraceNormUnpolData使用归一化光瞳坐标执行非偏振光线追迹的批次处理。
打开该工具时,用户选择要追迹的最大光线数、光线类型(光线追迹可使用真实光线或近轴光线)和光线将追迹到的表面。
CreateNormUnpol (int MaxRays, RaysType rayType, int toSurface)
然后在AddRay函数中逐个定义光线。光线由波长、相对场和光瞳坐标进行定义。如果需要返回光程差(OPD),则AddRay还包含一个calcOPD变量。
AddRay (int waveNumber, double Hx, double Hy, double Px, double Py, OPDMode calcOPD)
- 如果calcOPD为0,则不会执行OPD计算。它将返回单一光线追迹(Single Ray Trace)分析中定义的光程。该值可能与无限共轭条件下的其他分析不同。
- 如果calcOPD为OPDMode.Current,它将根据该光线和之前计算的主光线计算OPD。
- OPDMode.CurrentAndChief将首先计算主光线,然后计算该光线的OPD。请注意,仅在将光线一直追迹到图像表面时,才能计算OPD。
有关更多信息,请参阅下面的详述。
在读取结果之前,需要使用StartReadingResults()方法。
结果
该方法可以返回:
ReadNextResult (out int rayNumber, out int ErrorCode, out int vignetteCode, out double X, out double Y, out double Z, out double L, out double M, out double N, out double l2, out double m2, out double n2, out double opd, out double intensity)
- rayNumber
- ErrorCode
- vignetteCode:指示光线是否已渐晕
- X、Y、Z:光线在所需表面上的坐标
- L、M、N:光线在所需表面上的方向余弦
- l2、m2、n2:光线在所需表面上的向量法线。
- opd:光程差(参阅下面的详述)
- 强度:光线的光焦度(请参阅下面有关偏振的详述)
详述
OPD
计算OPD需要比常规光线追迹更多的时间,并且OpticStudio仅在需要时才执行该额外计算。对于客户端程序来说,计算OPD也更复杂,因为OPD表示光程差,这意味着必须追踪两条光线,而不是一条。如果要计算任意光线的OPD,OpticStudio必须追迹主光线,再追迹任意光线,然后将两者的相位相减获得OPD。与一遍又一遍地追迹同一条主光线(速度很慢)不同,通常只追迹一次主光线,然后从每个后续光线中减去主光线的相位。
- 如果calcOPD为OPDMode.CurrentAndChief,则需要主光线和指定光线,OPD为当前波长的波中这两条光线的相位差。
- 如果calcOPD为OPDMode.Current,则使用最近追迹的主光线数据。
因此,每当主光线发生变化时,calcOPD应该为OPDMode.CurrentAndChief;OPDMode.Current用于不需要再次追迹主光线的所有后续光线。通常,仅当视场坐标或波长发生变化时,主光线才会发生改变。如果从同一视场点追迹许多光线,这种方法会快得多,就像许多光学分析计算的情况一样。仅当最后一个表面为图像表面时,才能计算opd,否则,opd值将为零。
NormUnpol和DirectUnpol界面中的偏振(Polarization)
请注意,对于两种非偏振光线追踪模式(NormUnpol和DirectUnPol),均不考虑偏振。在这两种模式中,由于吸收、膜层损耗或表面菲涅耳反射,光线强度不受体内部透射度的影响。尽管体吸收可简单地通过光线的OPL来处理,但在两种非偏振光线追迹模式(NormUnpol和DirectUnPol)均不考虑体吸收;然而,膜层损耗和菲涅耳面反射贡献需要修改光线的电场(E-field),这需要偏振光线追迹。应该注意的是,在NormUnpol和DirectUnPol光线追迹模式下的光线强度仍然可能在序列模式下被少数表面修改,此类表面可在不依赖于修改电场的情况下修改光线强度,例如用户自定义表面(User Defined)(如US_FILT1等)、滑块(Slide)表面或非序列模式表面。
下一部分: