首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C#从位置到位置的学习

C#从位置到位置的学习
EN

Stack Overflow用户
提问于 2015-10-09 18:22:10
回答 4查看 22.2K关注 0票数 6

我需要制作一个图片框,从一个位置到另一个位置(就像你可以统一地这样做)。

我怎么能做到这一点,有没有内置的功能?

谢谢:)

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-10-09 18:51:43

线性插值(lerp)实际上是一个很容易实现的函数。方程式是

代码语言:javascript
运行
复制
float Lerp(float firstFloat, float secondFloat, float by)
{
     return firstFloat * (1 - by) + secondFloat * by;
}

高阶Lerp只是包装低阶lerps:

代码语言:javascript
运行
复制
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带来的大量开销。你最好只实现你自己的。

票数 16
EN

Stack Overflow用户

发布于 2018-07-25 01: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

票数 7
EN

Stack Overflow用户

发布于 2018-08-07 18:02:23

试一试这个

代码语言:javascript
运行
复制
  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);
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33044848

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档