C#三角函数/数学函数

标签 c# function trigonometry math-functions

我正在写一个应该计算角度(以度为单位)的类,经过长时间的尝试我没有让它工作。

When r = 45 & h = 0 sum should be around 77,14°

但它返回 NaN - 为什么?我知道它一定是与 Math.Atan-Method 相关的东西并且是无效值。

我的代码:

    private int r = 0, h = 0;
    public Schutzwinkelberechnung(int r, int h)
    {
        this.r = r;
        this.h = h;
    }
    public double getSchutzwinkel()
    {
        double sum = 0;

        sum = 180 / Math.PI * Math.Atan((Math.Sqrt(2 * h * r - (h * h)) - r * Math.Sin(Math.Asin((Math.Sqrt(2 * h * r)) / (2 * r)))) / (h - r + r * (Math.Cos(Math.Asin(Math.Sqrt(2 * h * r) / (2 * r))))));

        return sum;
    }

有人看到我的错误了吗?我从 Excel 工作表中得到了公式。

编辑:好的,我的问题是我在创建对象或获取用户输入时遇到解析错误,显然是偶然解决的。正如 Nick Dechiara 所说,Ofc 我必须添加一个简单的异常(exception)。非常感谢您的快速回复,非常感谢。

EDIT2:我的 Excel 工作表中的异常是:

if(h < 2) {h = 2}

所以这解释了一切,我根本没有注意。再次感谢所有的回答。

int r = 45, h = 2;
sum = 77.14°

最佳答案

调试此类问题的一个好方法是将等式分解成更小的部分,这样更容易调试。

double r = 45;
double h = 0;

double sqrt2hr = Math.Sqrt(2 * h * r);
double asinsqrt2hr = Math.Asin((sqrt2hr) / (2 * r));

double a = (Math.Sqrt(2 * h * r - (h * h)) - r * Math.Sin(asinsqrt2hr));
double b = (h - r + r * (Math.Cos(asinsqrt2hr)));

double sum = 180 / Math.PI * Math.Atan(a / b);

现在,如果我们在 sum 处放置一个断点并让代码运行,我们会看到 ab 都等于零。这在最后一行为我们提供了 a/b = 0/0 = NaN

现在我们可以问,为什么会这样?那么在 b 的情况下,您有 h - r + r,它是 0 - 45 + 45,计算结果为 0,所以 b 变为 0。你的数学可能有错误。

a 的情况下,我们有 2 * h * r - h * h,它的计算结果也为 0

您可能要么 A) 在您的等式中有错误,要么 B) 需要包含一个特殊情况来表示 h = 0,因为这会破坏您的数学运算。

关于C#三角函数/数学函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53787236/

相关文章:

c# - Umbraco Razor 按数字属性排序

c# - toTitleCase 忽略 C# 中的序数

c - 为什么编译器内联函数不写在不同的源文件上?

javascript - 3d 三 Angular 方程

Java 在两个 GPS 坐标之间的角度移动

c# - 文本框的撤消功能

c# - 401 Unauthorized 在 GET 请求 (https) 上返回正确的凭据

excel - 在VBA Excel中调用sub中的函数时出现"Object Required"

javascript - 使用 typeof 等待直到变量存在会导致无限循环

java - 沿已知角度画一条已知距离的线