首页 > 解决方案 > 双 Y 从 -10 增加到 10,使双 X 从 500 减少到 0

问题描述

我的 webapp 上的一个移动元素有问题。有一个double y值可以来自-10 to 10。然后我有一个double topewhich can be from 0 to 500,它代表绝对元素顶部的位置。

这两个值都是相对的。所以什么时候y增加tope就是减少。问题是我无法更改初始y = -10值,否则我只会将其从 1 变为 20。所以我做了一些操作:


 double y = -10 to 10 // comes from function, increases, decreases randomly, but never jumps over numbers
 double ynum = 25; 
 double divy = 250; 
 double tope = 500;

 if(y<0)
        {
            y = y * -1;   //Since y starts at -10, I convert it to 10
            y = y + 10;   // I add 10 to reverse, so 10+10 is 20, or 9+10 is 19 ...
            tope = ynum * y;   // 25x20 first initial tope value is 500px, then lets say 25x19.. dropping
        }
        else  // at some point y reaches positive side and I need to decrease tope value further
        {
            tope = divy / y;
        }

所有这一切都很好。y-10 to 10和 tope 从500 to 0. 除非y达到低于零的双精度值,-0.154.., -0.254.., 0.345 ..因为分数的除法/乘法完全不同。

我试图强制所有分数为 1 或 0,但是移动的绝对元素失去了它的平滑度。

我该如何解决这个问题?

标签: c#

解决方案


你想要一个线性函数,将 [-10, 10] 映射到 [500, 0],所以

tope = a*y + b

替换您的条件:

0 = 10a + b => b=-10a
500 = -10a + b

插件第一个到第二个:

500 = -10a + -10a => a = -500/20 = -25
b = -10a = 250

所以你只需要:

tope = -25y + 250

推荐阅读