Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Geometry 大圆与直角线交点_Geometry_Intersection_Great Circle - Fatal编程技术网

Geometry 大圆与直角线交点

Geometry 大圆与直角线交点,geometry,intersection,great-circle,Geometry,Intersection,Great Circle,我有一个纬度,经度,和一个旅行方向,以正北度为单位。我想计算一下我是否会与另外两个Lat/Lon点定义的线相交 我想定义这条线的两点将创建我的大圆,我的位置和方位将定义我的等角线 我只对几百公里的交叉口感兴趣,所以我不需要所有可能的解决方案 我不知道从哪里开始。简单的答案是肯定的——如果你从任何纬度开始,继续沿着某个大圈旅行,你最终会穿过地球上的任何和所有其他大圈。地球上每两个大圈都在两个点上相交,但两个完全相同的大圈除外,它们在所有点上相交 但我猜你不仅仅是在问一个是/否的问题。你可能想知道这

我有一个纬度,经度,和一个旅行方向,以正北度为单位。我想计算一下我是否会与另外两个Lat/Lon点定义的线相交

我想定义这条线的两点将创建我的大圆,我的位置和方位将定义我的等角线

我只对几百公里的交叉口感兴趣,所以我不需要所有可能的解决方案


我不知道从哪里开始。

简单的答案是肯定的——如果你从任何纬度开始,继续沿着某个大圈旅行,你最终会穿过地球上的任何和所有其他大圈。地球上每两个大圈都在两个点上相交,但两个完全相同的大圈除外,它们在所有点上相交

但我猜你不仅仅是在问一个是/否的问题。你可能想知道这两个大圆圈到底在哪里相交。我们可以使用以下策略来发现:

每个大圆都位于一个穿过地球中心的平面上

这些平面的交点是一条直线,假设它们不是完全相同的平面

这条相交线在两个点穿过地球表面——正好是我们两个大圆相交的地方

我们的任务是:找到飞机。2找到它们的交叉线。3找到两个交点,最后,4用lat/long表示这些交点。5计算出哪个交点更接近开始时的纬度/经度的额外积分

听起来不错?下面使用trig和vector math实现这一点。为了简化数学,我们将:

使用,以x,y,z坐标系原点为中心,半径为1:x^2+y^2+z^2=1的。 我们假设地球是一个完美的球体。不是。连一个都没有。 我们将忽略高程。 步骤1-查找平面:

我们真正关心的是这个问题。以下是我们如何找到他们:

-一个大圆由它在地球上穿过的两个点定义

法线将是从原点0,0,0开始的每个点的x、y、z向量的方向。给定每个点的lat/lon,使用转换,相应的x、y、z为:

x=cos(lat)*sin(lon)
y=cos(lat)*cos(lon)
z=sin(lat)
有了这一点,我们得到的两点是lat1/lon1和lat2/lon2,我们可以找到向量P1=x1,y1,z1和P2=x2,y2,z2

第一个大圆法线是叉积:

N1=P1 x P2
-另一个大圆由地球上的一个点和一个方位角定义

我们有一个点P3和一个方位角T。我们将沿着大圆找到一个点P4,在方位角T处穿过P3,距离为PI/4,通过使用:

那么正常情况与之前一样:

N2=P3 x P4
步骤2:找到与直线相交的平面:

给定两条平面法线:

步骤3:找到交点:

用向量L得到单位球面上的一个交点。另一点位于球体的另一侧:

X1=L/|L|
X2=-X1
第4步:用lat/lon表示交点:

给定X=X,y,z,再次使用,并考虑到点位于单位球体上:

lat=asin(z)
lon=atan2(y,x)
第五步:两点中哪一点更近


使用计算点到X1和X2的距离,选择较近的一个。

我认为最好的方法是使用将问题从球体映射到平面。这个投影非常有用,因为它将你的等角线映射到一个形式为R=expθa,又称a,loxodrome的对数螺旋,并将你的大圆映射到平面上的一个圆。所以你的问题归结为找到一个对数螺线和一个圆的交点,然后映射回球体


这只是一个让你开始的草图。如果您需要更多详细信息,请询问。

我不认为我要找的是大圆/大圆交叉点。实际上我已经实现了。如果我以恒定的方位角旅行,我会不会绕着地球向两极之一旋转呢?至少我想象自己在正西的一个极点附近旅行,可能会形成一个平行于赤道的小圆圈。我想我正在寻找一个小圆/大圆交叉点或射线/大圆交叉点(如果存在)。如果你正东或正西旅行,你将环绕地球并回到起点。如果你在一个恒定的航向上旅行,在正东或正西的某个ε北或南,但不是正北或正南,你确实会螺旋到其中一个极点。这被称为等角线,在现代电子导航设备和计算机能够绘制大圆之前,这是一种简单的空中导航方式。从这个问题上看,你不清楚你想要保持方位角。这确实会给你一条等角线路径,它比一个大圆更复杂。除非距离我
它们非常小,你看到的是一个无限长的抱杆螺旋。维基百科页面上有描述等角线曲线的数学。我没有数学来解决GC/rhumb交集的无穷多个解。通过将搜索限制在contd.contd,数值方法将缩小交叉口的范围。单圈,通过查看GC的正常点积和测试点的符号,测试GC的哪一面。列出了数值方法,而牛顿的方法可能足够简单和快速,可以迅速缩小根的范围。@Oren:谢谢,谢谢你,+1。这帮了我很大的忙,我刚刚发现,对于平面法向叉积,我需要反转x和y的直线:x=coslat*sinlon;y=coslat*coslon;反转为y=共平面*正弦;x=coslat*coslon;这个问题似乎离题了,因为它是关于数学而不是编程的
X1=L/|L|
X2=-X1
lat=asin(z)
lon=atan2(y,x)