Math 从点计算文档的倾斜度?

Math 从点计算文档的倾斜度?,math,geometry,geospatial,Math,Geometry,Geospatial,假设您有一个PDF文档 在该文档中,您已经确定了两个(x,y)坐标,它们对应于两个(lat,lng)坐标 如何计算文档的倾斜度?即文档顶部的指南针方向是什么 编辑: 当我在发布的答案中使用公式时,它不会返回我期望的结果。例如: The sample data look like y x (lat lng). The 1st test should be due north (0) and the 2nd should be due south (pi). The first point i

假设您有一个PDF文档

在该文档中,您已经确定了两个(x,y)坐标,它们对应于两个(lat,lng)坐标

如何计算文档的倾斜度?即文档顶部的指南针方向是什么

编辑:

当我在发布的答案中使用公式时,它不会返回我期望的结果。例如:

The sample data look like y x (lat lng). 

The 1st test should be due north (0) and the 2nd should be due south (pi).

The first point is 0.000000 0.000000 (30.000000 60.000000) 
The second point is 0.000000 200.000000 (30.000000 120.000000) 
Theta is -0.000000

The first point is 0.000000 200.000000 (30.000000 60.000000) 
The second point is 0.000000 0.000000 (30.000000 120.000000) 
Theta is -0.000000
我正在使用:

float rho = atan(
                 (-y1 + y2) /
                 (-x1 + x2)
                );

float theta = atan(
                   ((lat2  - lat1 )*cos(rho) + (long1 - long2)*sin(rho))/
                   ((long1 - long2)*cos(rho) + (lat1  - lat2 )*sin(rho))
                  );

哈!!您的算法与您提供的数据存在严重问题。您的两个示例数据点都具有
x1=x2
,因此当它计算
rho
时,必须找到:

float rho = atan(
                 (-y1 + y2) /
                 0
                );
除零是个问题。我不知道为什么它只是给你垃圾数据而不是错误

只要你的两点不直接在另一点之上,你的算法就可以正常工作。你可以在一个特殊的情况下稍微修正它,如果
x1=x2和y1>y2
,那么让
rho
成为
pi/2
,如果
x1=x2和y1
,那么让
rho
成为
-pi/2
。看起来你的问题已经在math.stackexchange上得到了回答,但我很难过没有人回答,所以我想我会发布…

1)如果你的角度为0->这意味着它指向东方!(或者你必须在等式中反转y和x)

2) 在这两种情况下都是被零除。这等于无穷大,在大多数编程语言中,这将导致崩溃。否则,它至少会引入一些舍入错误。对两个x坐标尝试不同的值而不是0

您可能需要考虑:


float rho;
int denominator = -x1 + x2;
if(denominator == 0.0)
    rho = (-y1 + y2 > 0) ? pi/2.0 : -pi/2.0;
else
    rho = (-y1 + y2) / denominator; 

这在很大程度上取决于地图的比例和投影。而且,这更像是一个数学问题,而不是一个编程问题。看到了吗?文档覆盖的区域足够小,不会被投影扭曲。你对向量代数感到满意吗?@Andrew我删除了我的答案。我们需要多考虑一下,注意,在分母为零的情况下,他实际上并不想要π/2。有时他会想要
-pi/2
。你完全正确!您的答案更加完整,感谢您向他指出,编程语言通常有两个参数的反正切函数
atan2
,专门用来避免这个问题。