Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.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
线交点-有差异(excel VBA)_Excel_Vba_Geometry_Trigonometry_Intersection - Fatal编程技术网

线交点-有差异(excel VBA)

线交点-有差异(excel VBA),excel,vba,geometry,trigonometry,intersection,Excel,Vba,Geometry,Trigonometry,Intersection,我一直在研究一个问题,通过我所有的研究,我一直无法找到一个现有的解决方案。我没有必要的数学知识来产生一个优雅的解决方案 有几个工作(并且非常优雅)的线与线相交的例子,可以是完整的线或线段(参见链接): (dropbox共享文件夹中的其他示例) 我的问题是说明使用附加的图像。有一条定义的线,从L1(x,y)开始,到L2(x,y)结束。没有第二条线-而是另一个点的坐标(实际上是L3)和一个轴或移动角度。如果点L3沿移动轴/角度继续,我需要计算到交点的距离和坐标 当提供原点、方位和距离时,获取位置

我一直在研究一个问题,通过我所有的研究,我一直无法找到一个现有的解决方案。我没有必要的数学知识来产生一个优雅的解决方案

有几个工作(并且非常优雅)的线与线相交的例子,可以是完整的线或线段(参见链接):

(dropbox共享文件夹中的其他示例)

我的问题是说明使用附加的图像。有一条定义的线,从L1(x,y)开始,到L2(x,y)结束。没有第二条线-而是另一个点的坐标(实际上是L3)和一个轴或移动角度。如果点L3沿移动轴/角度继续,我需要计算到交点的距离和坐标


当提供原点、方位和距离时,获取位置坐标也很有用,例如,在方位为195度的情况下,距离为10m的x,y到达x,y?这实际上是相同的函数,除了距离定义与计算距离和交点的x,y

来自射影几何背景,计算齐次坐标的叉积是我最喜欢的优雅连接点或相交(无限)线的方法。在您的情况下,我首先重命名点。假设第一行由
A
B
定义,第二行通过
C
并具有如您所示的角度
z
。然后我会计算

⎡Dx⎤   ⎛⎡Ax⎤   ⎡Bx⎤⎞   ⎛⎡Cx⎤   ⎡sin z⎤⎞   ⎡(Ay Bx - Ax By) sin z - (Cx cos z - Cy sin z) (Ax - Bx)⎤
⎢Dy⎥ = ⎜⎢Ay⎥ × ⎢By⎥⎟ × ⎜⎢Cy⎥ × ⎢cos z⎥⎟ = ⎢(Ay Bx - Ax By) cos z - (Cx cos z - Cy sin z) (Ay - By)⎥
⎣Dz⎦   ⎝⎣1 ⎦   ⎣1 ⎦⎠   ⎝⎣1 ⎦   ⎣  0  ⎦⎠   ⎣(Ay    -    By) sin z - (Ax       - Bx      ) cos z    ⎦

然后
(Dx/Dz,Dy/Dz)
是交点的坐标,从交点到
C
的距离可以用毕达哥拉斯的常用方法计算。第一个内部叉积描述了连接
A
B
的线。第二个内叉积将
C
与您指定方向上的无穷远点连接起来。然后,外叉积与这两条线相交,生成交点的齐次坐标。

编辑样本数据和预期结果将大大有助于使这成为一个优秀的问题。如果必须随机生成样本数据以证明解决方案,我们如何确保数据与您的情况相关?抱歉。数据非常简单,例如第1行由L1(x,y)坐标和L2(x,y)坐标组成。然后是距离位置L3(x,y)坐标,该坐标具有方向角和距离。在进一步研究之后,似乎L1到L2的直线应该转换成一个向量,然后使用方向角与L3的向量相交?我将把这看作是欧几里得几何证明。使斜边从L到P很简单。在假想的相交处形成相反的角度是另一个问题。在那之后,一切都是ASA(角度-侧角)和正弦定律,加上一些加减法。然而,如果没有样本数据和预期结果(以及一些原始的工作),我可能只是在尝试提供解决方案,我将如何在excel或VBA中实现这一点。这是主要的障碍-数学在那里,但我没有一个实际的解决方案。我的数学知识在这方面是缺乏的…@user3076007:我已经很久没有做过VBA编程了,但是如果你采用我公式右边的扩展形式,那么你所要做的就是调用sin和cos,然后执行基本的算术运算:减法、乘法、除法。当然,如果您为叉积编写自己的小子程序,并在高级别上实现这些东西,可能会更优雅。我不会为您编写VBA代码。