【发布时间】:2014-07-24 01:22:04
【问题描述】:
总结:我在下面描述的技术有名称吗?
在this question 中,我描述了一种情况,即我有四个非轴对齐的二维输入点映射到输出向量,并且希望将任意输入点映射到新的输出向量。
(-19,-7) -> (-150,-100)
( 10,-8) -> ( 150,-100)
(-11, 4) -> (-150, 100)
( 9, 7) -> ( 150, 100)
(-4.2,1) -> ( ??, ??)
基于one answer 我想出了我的own algorithm,如上图绿色和橙色的计算所示。有关详细信息,请参阅答案,但简而言之:在顶部和底部线上找到 X 截距,将输出值调整到那些“北”/“南”位置,然后根据输入点的位置在这些输出之间调整行。
对我的回答的评论表明我正在做的事情不能被称为“双线性插值”。我相信这是因为我正在计算顶部和底部边缘的不同百分比,而我这样做的方式可能会导致四边形内的某些输入点导致输出值超出角落输出点的最小值/最大值.
- 例如,在我的方案中输入 (-19,0) 会导致沿底边的点为 -40%,因此输出值为 ~(-236,43),远小于-150的minX。
如果不是“双线性插值”,这个算法是什么?而且,如果你允许第二个问题,你将如何像我一样在输入的非平行四边形上使用双线性插值这里?这可能吗?
可以在on my website找到我的算法的漂亮视觉测试。
【问题讨论】:
-
如果目标是将梯形映射到矩形,那么您的算法会扭曲图像,因为在截取阶段使用了完全垂直的线。如果任意输入是...(-15,-6),则可以清楚地证明这一点。这显然在梯形内,但我不确定您的算法是否会将其放在矩形内。
-
我可能会采用从点到每个角的距离,并使用这些比率,尽管它的数学强度要高得多。
-
谢谢@MooingDuck,帮了大忙。我现在意识到,鉴于我有一个输入和一个输出四边形,我真正想做的是在输入四边形上执行 inverse bilinear interpolation 以找到输入点的 UV 坐标,然后在输出上执行正常的双线性插值使用这些 UV 坐标的四边形(在本例中是一个简单的矩形)。
标签: algorithm terminology interpolation