用角度和长度绘制基于约束的光学布局

2024-10-02 02:42:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我在optical layout program上工作了一段时间,目前它的工作方式是让用户指定组件(如激光器、反射镜或分束器)之间的链接、链接的长度和组件的角度。在形成循环图之前,效果非常好,例如:

Cyclic connection in Optivis

这显示了一个分束器通过三个反射镜连接回自身。基本上,循环在伪代码中定义为:

link(beam splitter, mirror 1, length=50)
link(mirror 1, mirror 2, length=50)
link(mirror 2, mirror 3, length=50)
link(mirror 3, beam splitter, length=50)

(实际上,每个组件可以有多个输入/输出节点,因此在这种情况下,分束器通过前后节点链接)

这里的问题是,在必须指定所有链接长度时,您必须知道最后一个链接的确切长度,以便将其连接回已连接的分束器。在我的代码中,如果发生这种情况,我只会忽略用户定义的链接长度,但这不是一个很好的方法。你知道吗

相反,我想到了一个更好的方法:用户可以基于链接长度和组件角度定义一系列约束。如果光学装置受到连接长度和组件角度约束的充分约束,例如:

LengthConstraint(beam splitter, mirror 1, length=50)
LengthConstraint(mirror 1, mirror 2, length=50)
LengthConstraint(mirror 2, mirror 3, length=50)
AngleConstraint(mirror1, angle=45)

上面的约束列表和链接应形成布局的唯一解决方案。你知道吗

我想肯定已经有某种算法可以解决这类问题,但我似乎找不到。我看过线性约束解算器,但我不确定这些解算器是否适用于角度约束。我还尝试编写了一个求解器,用于查找受约束的光学元件,并尝试在其周围拟合无约束的链接光学元件,但对于更复杂的约束集来说,这似乎失败了*。有人能给我指出一种可能适合解决这类问题的算法吗?你知道吗

*例如,想象一下上述组件组,但仅根据四个内部90度角度约束和单个链接长度进行唯一定义。这似乎是一个“更高阶”的问题,因为求解者不能只计算出一个角度和链接长度,而是同时计算出三个或四个。你知道吗


Tags: 代码用户定义链接mirrorlink组件length

热门问题