2015-11-23 114 views
1

我正在尝试编写一个方法来确定球体上的多边形(复杂或简单)区域。我有一篇由JPL的几个人撰写的论文,或多或少的给你这些计算公式。数学公式转换

PDF文件可以在这里找到:

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

的公式可以7页上找到,在“球形例子 - 逼近”:

我也键入的公式在Word中:

Spherical_Case_Equation

enter image description here

我需要将此方程转化为标准形式的帮助(我认为这是正确的术语)。我已经为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); 
} 

我只需要帮助做一些类似的球形情况。任何援助将不胜感激。

+1

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

回答

0

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

区1 = R 2(ΣAᵢ - (N - 2)π)

要计算顶角,你可以与3D坐标开始贵点。所以在角落你有顶点p[i] = (x[i],y[i],z[i])和相邻的顶点p[i-1]p[i+1](resp 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₂”。