【问题标题】:Mathematical Equation Conversion数学方程转换
【发布时间】:2016-02-25 20:45:25
【问题描述】:

我正在尝试编写一种方法来确定球体上多边形(复杂或简单)的面积。我有一篇由 JPL 的几个人写的论文,或多或少地为您提供了这些计算的方程式。

pdf文件可以在这里找到:

http://trs-new.jpl.nasa.gov/dspace/handle/2014/40409

方程可以在第 7 页的“球形情况 - 近似”下找到:

我还在 Word 中输入了方程式:

Spherical_Case_Equation

我需要帮助将这个等式转换为标准形式(我认为这是正确的术语)。我已经为 Planer Case 做了类似的事情:

private double calcArea(Point2D[] shape) {
    int n = shape.length;
    double sum = 0.0;

    if (n < 3) return 0.0;

    for (int i = 0; i < n-1 ; i++) {
        sum += (shape[i].getX() * shape[i+1].getY()) - (shape[i+1].getX() * shape[i].getY());
    }

    System.out.println(0.5 * Math.abs(sum));
    return 0.5 * Math.abs(sum);
}

我只是需要帮助来为球形外壳做类似的事情。任何帮助将不胜感激。

【问题讨论】:

  • 我认为需要更多信息将您使用的变量映射到方程。我不确定这些是什么: shape[i].getX() * shape[i+1].getY() 。我也没有在你的代码中看到 R 变量,而不是 sin(teta)

标签: java math polygon area


【解决方案1】:

我还没有阅读你引用的论文。球面多边形的面积与angle excess 成正比。

面积 = r²(Σ Aᵢ - (n - 2)π)

要计算角点,您可以从点的 3D 坐标开始。所以在角落 i 你有顶点 p[i] = (x[i],y[i],z[i]) 和相邻的顶点 p[i-1]p[i+1] (分别是 p[(i+n-1)%n]p[(i+1)%n] 来得到这个循环正确)。然后cross products

v₁ = p[i] × p[i-1]
v₂ = p[i] × p[i+1]

将正交于由入射边和原点跨越的平面,原点是球体的中心。不,空间中两个向量之间的角度由下式给出

Aᵢ = arccos(⟨v₁,v₂⟩ / (‖v₁‖ * ‖v₂‖))

其中⟨v₁,v₂⟩表示这两个向量之间的dot product,它与角度的余弦成正比,“v₁”表示第一个向量的长度,“v₂”表示第二个向量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-08
    • 2021-02-04
    • 1970-01-01
    • 2015-06-10
    • 2014-10-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多