如何将Kawa中的计算重写到Java中?

3
我使用MIT AppInventor编写了一个简单的计算应用程序,并希望将精确的计算集转换为Java,以用于Android应用程序,但它们是不同的框架。因此,我尽力将计算转换为Java,如下所示。但是与Kawa代码相比,Java计算结果错误。
有人能指出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);

这是应用程序的屏幕截图,以便人们更好地了解计算过程:

主界面

结果界面

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是错误的。
编辑
您更新了问题以指示变量实际上是double。因此,上述内容不适用,但我建议您记住,在Java中,所有三角函数操作都接收弧度输入,如果您使用度数(似乎是这种情况,因为您正在从180中减去),则必须确保所有操作都获得其输入弧度,将度数输入转换为弧度后再将其传递给三角函数。

1
是的,那可能是因为我将 PI 改为了 180,但仍然得不到正确的结果。我现在会实施你提供的解决方案并进行测试。 - Brian Var
另外回答你的问题,tri1、tri2、marking1、marking2 的类型是 double,用户输入的 offsetLength、depth 和 ductDepth 也是 double 类型。 - Brian Var
1
@BrianJ 如果它们已经是“double”类型,那么我的建议不会有任何影响。另一件需要注意的事情是,在Java中,所有三角函数操作都接收以弧度为单位的输入,如果您正在使用度数(因为您正在从180中减去),则必须确保所有操作都以弧度为单位获取其输入。 - Óscar López
是的,计算使用的是角度,有没有办法解析输入,以便它采用角度而不是弧度? - Brian Var
@BrianJ 在将输入传递给三角函数之前,您需要将其从度转换为弧度,没有其他办法。 - Óscar López
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接