gpt4 book ai didi

c# - 如何判断一条线是否与 C# 中的多边形相交?

转载 作者:太空狗 更新时间:2023-10-29 17:33:04 24 4
gpt4 key购买 nike

我有一个与此非常相似的问题:

How to know if a line intersects a plane in C#?

我正在寻找一种方法(在 C# 中)来判断一条线是否与任意多边形相交。

我认为 algorithm by Chris Marasti-Georg非常有帮助,但缺少最重要的方法,即线与线相交。

有谁知道完成 Chris Marasti-Georg 代码的线相交方法或有类似的方法吗?

在 C# 中是否有内置代码?

此方法用于增强了禁区功能的 Bing map 算法。生成的路径不得通过禁区(任意多边形)。

最佳答案

.NET 框架中没有内置边缘检测代码。

这里的代码(移植到 C#)可以满足您的需求(实际算法可在 Google 组的 comp.graphics.algorithms 中找到):

public static PointF FindLineIntersection(PointF start1, PointF end1, PointF start2, PointF end2)
{
float denom = ((end1.X - start1.X) * (end2.Y - start2.Y)) - ((end1.Y - start1.Y) * (end2.X - start2.X));

// AB & CD are parallel
if (denom == 0)
return PointF.Empty;

float numer = ((start1.Y - start2.Y) * (end2.X - start2.X)) - ((start1.X - start2.X) * (end2.Y - start2.Y));

float r = numer / denom;

float numer2 = ((start1.Y - start2.Y) * (end1.X - start1.X)) - ((start1.X - start2.X) * (end1.Y - start1.Y));

float s = numer2 / denom;

if ((r < 0 || r > 1) || (s < 0 || s > 1))
return PointF.Empty;

// Find intersection point
PointF result = new PointF();
result.X = start1.X + (r * (end1.X - start1.X));
result.Y = start1.Y + (r * (end1.Y - start1.Y));

return result;
}

关于c# - 如何判断一条线是否与 C# 中的多边形相交?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1119451/

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