不是一个很好的解决方案,但我现在正在做的事情:
由于问题在R3,在正确的解中最多可以有 3 个活动平面约束(不等式转为等式)。再多的话,至少其中一个是多余的。因此,我从n不平等((n3)+(n2)+(n1)+ 1) 并找到产生一个满足所有其他不等式约束并且最接近目标点的点(或者实际上,我将所有内容转换为目标点为原点,并找到满足的最小范数的候选点所有约束)。
给定最多三个平面约束(平面约束的数量为d),我将它们逐行堆叠以产生一个dX3矩阵A并且类似地产生一个dX1向量δ. 我构建系统Ax=δ,并使用正规方程以最小二乘法求解。例如:x=(ATA)+ATδ. 我发现伪逆ATA使用基于四元数的 3x3 对称矩阵的谱分解(参见clicky)。那是,(ATA)=QDQT, 对于正交矩阵Q和一个对角矩阵D, 所以(ATA)+=QD+QT. D+i,i=1/Di,i如果Di,i>0, 和0否则。
要检查一个点是否满足所有平面不等式,我只需一次检查所有平面。
...
这会产生一个O(n4)算法:O(n3)3架飞机的组合生产O(n3)需要检查的点。每项检查都需要针对所有O(n)点。
它不是特别聪明,而且对于大型n它会太慢,但它的编码和测试相对简单,并且能够利用我现有的四元数和 matrix3 代码。
有没有什么更聪明的事情我可以做而不需要更复杂的数学工具?我没有将军nXn矩阵库仅利用四元数、3x3 矩阵、4x4 矩阵和 3d/4d 向量。