我需要制作一个图片框,从一个位置到另一个位置(就像你可以统一地这样做)。
我怎么能做到这一点,有没有内置的功能?
谢谢:)
发布于 2015-10-09 10:51:43
线性插值(lerp)实际上是一个很容易实现的函数。方程式是
float Lerp(float firstFloat, float secondFloat, float by)
{
return firstFloat * (1 - by) + secondFloat * by;
}
高阶Lerp只是包装低阶lerps:
Vector2 Lerp(Vector2 firstVector, Vector2 secondVector, float by)
{
float retX = Lerp(firstVector.x, secondVector.x, by);
float retY = Lerp(firstVector.y, secondVector.y, by);
return new Vector2(retX, retY);
}
Lerp SDK有各种数学功能,如DirectX,但这是为Lerp带来的大量开销。你最好只实现你自己的。
发布于 2018-07-24 17:12:19
Greg Bahm写了倒lerp方程firstFloat * by + secondFloat * (1 - by)
,其中firstFloat是secondFloat,secondFloat是firstFloat。
事实上,当前的lerp方程是:
firstFloat * (1 - by) + secondFloat * by
但最快速的线性插值方法是:
firstFloat + (secondFloat - firstFloat) * by
这是两个加/减和一个乘法,而不是两个加/减和两个乘法。Vector2的Lerp是正确的。
而且,最快的方法是不太精确(谢谢您,cid):
由于浮点算法误差,t=1时不保证v= v1的方法不精确.这种方法是单调的。 当硬件具有本机融合的乘法添加指令时,可以使用此格式。support
发布于 2018-08-07 10:02:23
试一试这个
float Lerp(float a, float b, float t)
{
//return firstFloat * by + secondFloat * (1 - by);
return (1f - t) * a + t * b;
}
PointF Lerp(PointF a, PointF b, float t)
{
float retX = Lerp(a.X, b.X, t);
float retY = Lerp(a.Y, b.Y, t);
return new PointF(retX, retY);
}
https://stackoverflow.com/questions/33044848
复制相似问题