[英]Unity: ScreenCapture.CaptureScreenShot() is rotating the image upsidedown on VR and I have no idea why
[英]Why does this result in 0 and upsidedown not?
目前,我正在写论文,而且遇到了从未见过的.Net C#行为。 我说的是计算中的错误。 我实现了这个公式:
1/2 *(Theta i-1 + Theta i)+ Sum(Alph k,k = 1,i-1)
此公式适用于4个对象。 Theta在所有声明为float的对象中,其值为1,5708。 Alpha初始化为0,并且每次迭代都会增加。
第一次实施
float alpha = 0;
float value = 0;
for (int sphereCount = 1; sphereCount < this.spheres.Count; sphereCount++)
{
value = (1/2) * (this.spheres[sphereCount - 1].Theta + this.spheres[sphereCount].Theta);
alpha += value;
}
使用此版本值始终为0.0! 所以我将其更改为:
工作实施
float alpha = 0;
float value = 0;
for (int sphereCount = 1; sphereCount < this.spheres.Count; sphereCount++)
{
value =(this.spheres[sphereCount - 1].Theta + this.spheres[sphereCount].Theta) * 1/2;
alpha += value;
}
通过移除1/2周围的括号并将其放在计算的末尾,它可以正常工作。
为什么会这样???
似乎将1/2放在方括号中而不取决于1/2的位置时,结果是0.0。 而且当我将(1/2)放在最后时,它也会导致0.0。 这里有人知道为什么吗?
这个
(1 / 2)
计算为0,因为它是整数除法。 如果你说
(1 / 2f)
要么
(1 / (float) 2)
您会好起来的,因为它会强制浮动除法。 或者,甚至更好,只写0.5
。
如果您写1/2,则使用给出整数结果的整数除法来计算结果。 您可以通过将数字之一更改为浮点数来强制进行浮点除法,如1/2f
。
或者,您可以只写0.5
,恕我直言,它比1/2更易读。
为什么要乘以1
? 而不是这样:
value =(this.spheres[sphereCount - 1].Theta + this.spheres[sphereCount].Theta) * 1/2;
为什么不这样写:
value =(this.spheres[sphereCount - 1].Theta + this.spheres[sphereCount].Theta) / 2;
您应该写1.0 / 2或0.5而不是1/2。
1/2是一个整数除法,得出整数0。
因为1/2被视为整数算术,因此四舍五入为0。
删除括号会更改操作顺序,现在您将整个(浮点)公式除以二,得出一个浮点答案。
这是因为1
和2
是整数值,而不是浮点值。
当您将整数值1
除以整数值2
,结果是整数值0
,而不是浮点值0.5
。
当您删除括号并更改乘法顺序时,表达式的另一部分将首先乘以1
,这将隐式将整数值1
转换为浮点值。 然后将结果除以2
,这也将隐式转换为浮点值。
因此,您最终要做的是:
value = ( (this.spheres[sphereCount - 1].Theta + this.spheres[sphereCount].Theta) * (float)1 ) / (float)2;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.