计算加速点

时间:2014-03-17 11:15:34

标签: actionscript-3 flash math physics accelerator

我一直在努力计算加速器。我花了一整天时间进行搜索,试用和试用错误,但一切都是徒劳的。我在舞台(AS3)上有一条水平线,比方说宽度为200。该行的中心点是60(如果它是100,我肯定会通过计算百分比来完成它)。现在我需要知道给定百分比的宽度。例如,总宽度为60%或从哪里开始30%(或任何其他百分比)?

我所知道的是总宽度和中心点(百分比或宽度)。

我们将非常感谢您的帮助。如果有任何公式,请给我详细信息,不要只提及a / b / c,因为我从未成为物理学的学生:(

编辑:

我没有10个声誉,因此我无法在此直接发布图片。请单击以下链接查看图像。

链接:http://oi62.tinypic.com/11sk183.jpg

example http://oi62.tinypic.com/11sk183.jpg

编辑:

这就是我想要的:我想从任何一点(A / B / C / D)到其相对点(A-> B / A-> D ......)行驶n%(链接) ) http://i59.tinypic.com/2wp2lbl.jpg

1 个答案:

答案 0 :(得分:0)

如果我理解正确,你想要一个非线性比例,那么线上的像素1是0%,线上的像素100是60%,像素200是100%?

如果x = pixelpos / 200是线上的相对位置,则线性标度y = x * 100%的一个简单变化是y =(x + a * x *(1-x))* 100%。

对于x = 0.5,该值是y = 0.5 + a * 0.25,因此对于0.6 = 60%,需要a = 0.4。

为了获得y = 0.3 = 30%的x的反方向,需要求解二次方程y = x *(1 + a *(1-x))或a * x ^ 2-(1 +α)* X + Y = 0。使用通用解决方案公式,这给出了

x = (1+a)/(2*a)-sqrt((1+a)^2-4*a*y)/(2*a)
  = (2*y) / ( (1+a) + sqrt((1+a)^2-4*a*y) )
  = (2*y) / ( (1+a) + sqrt((1-a)^2+4*a*(1-y)) )

并且a = 0.4且y = 0.3

x = 0.6/( 1.4 + sqrt(1.98-0.48) )
approx 0.6/2.6=3/13=231/1001 approx 0.23

对应于像素46。

这将用于介于-1和1之间,因为对于其他值,x = 0或x = 1的斜率不会为正。


另一个简单公式使用双曲线代替抛物线,

y=a*x/(1+(a-1)*x)

带有反转

y+(a-1)*x*y = a*x  <=>  y = (a-(a-1)*y)*x
x = (y/a)/(1+(1/a-1)*y)

a = (y*(1-x))/(x*(1-y))

只要在[0,1]中没有x的极点,就可以保证单调性没有问题,保证为> 0。