java - 如何将 Kawa 中的计算重写为 Java?

标签 java android app-inventor kawa

我使用 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);

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

Main screen

Result screen

最佳答案

有可能某些除法是对整数进行的,所以小数点丢失了(如果不知道变量的类型就很难判断)。试一试,确保我明确了类型转换:

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 中减去) 那么您必须确保所有操作都以弧度为单位获取输入,将以度为单位的输入转换为弧度,然后再将其传递给三角函数。

关于java - 如何将 Kawa 中的计算重写为 Java?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20587587/

相关文章:

java - Java SE 的蓝牙 API

java - 在java中使用selenium webdriver登录Gmail

android - 找不到方法 apt()

java - cdi 生产者是否具有类范围

java - Servlet 和 jsp 字符编码特性

android - 如何从位图区域获取多边形形状

安卓 setImageResource NullPointerException

android - 我如何让用户在 Google map 中选择一个位置并将选择的点返回到我的 App Inventor 应用程序?

android - Google App Inventor 对移动软件开发意味着什么?

android - 列出从 bool 值 "true"到 "3"的变化值