gpt4 book ai didi

c# - 使用 LINQ 确定 2 个图的相对位置

转载 作者:行者123 更新时间:2023-11-30 13:20:47 25 4
gpt4 key购买 nike

我有两个点数组:double[] minusdouble[] plus,例如:

double[] minus = new[]
{
24.043414306636713,
26.521399902043807,
23.049167719142361,
24.473177606966754,
18.238281854192408,
};

double[] plus = new[]
{
8.31219054269323,
9.5909890877229582,
11.066525870449567,
22.769068312057193,
24.733540360065991,
};

我需要根据这个数字绘制 2 个图表并确定它们相对于彼此的位置:是否有交叉点,哪个在另一个下面?

我该怎么做?时间差

(请随意重新标记问题或更改主题,我不确定是否使用了正确的数学术语)

编辑:这是一张 Excel 图表:

http://i.stack.imgur.com/NEhcs.png

很容易判断哪个在上面,哪个在下面。

如何确定红色(加号)与蓝色(减号)有交集?也许使用 LINQ?

最佳答案

这段代码可以找到所有的碰撞:

double[] minus = new double[]
{
3, 24, 26, 23, 25, 18, 5, 5, 1, 10,
};
double[] plus = new ![alt text][1]double[]
{
3, 8, 9, 11, 22, 25, 5, 5, 3, 7
};

var collisionsBetweenIndices =
Enumerable.Range(1, minus.Length - 1)
.Where(i => ((minus[i - 1] - plus[i - 1] < 0) && (minus[i] - plus[i] > 0)) ||
((minus[i - 1] - plus[i - 1] > 0) && (minus[i] - plus[i] < 0)) ||
((minus[i - 1] - plus[i - 1] == 0) && (minus[i] - plus[i] == 0)))
.ToArray();

var collisionsOnIndices =
Enumerable.Range(0, minus.Length)
.Where(i => minus[i] == plus[i])
.ToArray();

foreach (var idx in collisionsBetweenIndices)
Console.WriteLine("Collision between {0} and {1}", idx - 1, idx);

foreach (var idx in collisionsOnIndices)
Console.WriteLine("Collision on {0}", idx);

// RESULTS:
// Collision between 4 and 5
// Collision between 6 and 7
// Collision between 8 and 9
// Collision on 0
// Collision on 6
// Collision on 7

alt text

编辑:

我做了两种不同的方法来区分碰撞的类型(即索引之间或索引上),但如果您的目的只是检测是否存在碰撞,只需执行以下操作:

var collisionDetected =
Enumerable.Range(0, minus.Length).Any(i =>
{
if (minus[i] == plus[i])
return true;
if (i > 0 &&
(((minus[i - 1] - plus[i - 1] < 0) && (minus[i] - plus[i] > 0)) ||
((minus[i - 1] - plus[i - 1] > 0) && (minus[i] - plus[i] < 0)) ||
((minus[i - 1] - plus[i - 1] == 0) && (minus[i] - plus[i] == 0))))
{
return true;
}
return false;
});

此代码会在发现碰撞后立即返回,因此通常比上述方法更快。

关于c# - 使用 LINQ 确定 2 个图的相对位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4348370/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com