3

我已经使用 MIT AppInventor 编写了一个简单的计算应用程序,我想将确切的计算集传输到 Java 以用于 Android 应用程序,但它们是不同的框架。所以我尽我所能将计算转移到 Java,如下所示。但是 Java与 Kawa 代码相比,计算是错误的。

有人可以指出 Java 代码与我在 AppInventor 代码中的计算方式不同吗?

这是一组计算的 Kawa 代码,偏移深度、长度和管道深度是用户输入的值:

 Tri 1=atan(Offset Depth/Offset Length)
 Mark 1=sqrt(Offset Length^2+Offset Depth^2)
 Tri 2=(180-Tri1)/2
 Mark 2=Duct Depth/(tan(Tri 2))

然后这就是我尝试将该计算转换为 Java 的方式:

tri1,tri2,marking1,marking2 是类型double,用户输入 offsetLength,depth 和ductDepth 也是double

 tri1 = Math.atan(offsetDepth / offsetLength);
 marking1 = Math.sqrt(Math.pow(offsetLength,2) + Math.pow(offsetDepth,2));  
 tri2 = (180 - tri1) / 2;
 marking2 = ductDepth / Math.tan(tri2);

这是应用程序的屏幕截图,因此人们可以更好地理解计算:

主屏幕

结果画面

4

1 回答 1

1

某些除法可能是在整数上执行的,所以小数会丢失(如果不知道变量的类型就很难判断)。试一试,以确保我明确了演员表:

tri1 = Math.atan(((double)offsetDepth) / offsetLength);
marking1 = Math.sqrt(Math.pow(offsetLength,2) + Math.pow(offsetDepth,2));  
tri2 = (180 - tri1) / 2.0;
marking2 = ductDepth / Math.tan(tri2);

此外,正如@CommonsWare 所指出的,假设Math.PI等于180.

编辑

您更新了问题以表明变量实际上是doubles。所以上面不适用,但我建议你记住,在 Java 中,如果你使用度数,所有三角运算都以弧度接收输入(看起来是这样,因为你从 180 中减去) 那么您必须确保所有操作都以弧度获取输入,将输入以度为单位转换为弧度,然后再将其传递给三角函数。

于 2013-12-14T20:00:58.693 回答