两条线的交点 - 数值分析
Posted
技术标签:
【中文标题】两条线的交点 - 数值分析【英文标题】:Intersection of 2 lines - numerical analysis 【发布时间】:2021-12-18 20:30:24 【问题描述】:我有 2 个二维数组,代表 2 条线/曲线,类似于:
(y1,t1) (y2,t2) ... (yN, tN)
和
(Y1, t1) (Y2, t2) ... (YN, tN)
我的目标是在 2 条线/曲线的交点之前找到数组开头的最后一个点。
我试过比较
if ( (y1 > Y1 && y2 < Y2) || (y1 < Y1 && y2 > Y2) || (y1 == Y2) )
为了 t0 找到交点但它不起作用或由于点数很多,验证结果非常困难。
在 C# 中是否有使用开源数值分析库的优雅解决方案,我需要做的就是将 2 个数组输入函数并获得交集?
【问题讨论】:
它们是直线还是曲线(即,是一组共线中的点)。顺便说一句,将这样的点显示为 (Yn, Tn) 有点不寻常。通常是 (Tn, Yn) (因为时间会显示在 "x-axis" 请注意,要求图书馆是题外话,就像要求“优雅”的解决方案一样,没有客观地定义“优雅”的含义。 Heretic Monkey - 我猜你没有把问题读到最后 - “优雅”的定义立即如下:“将 2 个数组输入函数并获得交集” 【参考方案1】:在 c# 上,您的算法如下所示:
public void FindFirstIntersection(int[,] curve1, int[,] curve2)
for (var i = 0; i < curve1.Length - 1; i++)
var curve1Point = curve1[i, 0];
var curve2Point = curve2[i, 0];
var curve1NextPoint = curve1[i + 1, 0];
var curve2NextPoint = curve2[i + 1, 0];
if (curve1Point > curve2Point && curve1NextPoint < curve2NextPoint ||
curve1Point < curve2Point && curve1NextPoint > curve2NextPoint ||
curve1Point == curve2Point)
//Do smth
【讨论】:
这是正确的,但我正在寻找一个数值分析库来简单地调用一个将 2 个数组传递给它的函数。以上是关于两条线的交点 - 数值分析的主要内容,如果未能解决你的问题,请参考以下文章