如何确定三角形是否包含特定点?

时间:2012-02-23 09:08:11

标签: c# graphics 2d linear-algebra

我有问你问你们......

现在假设我有一个虚拟网格,我在这些虚拟网格上有连接点,如下所示

Junction Points On Virtual Grid

现在假设我在这个虚拟网格上绘制了一个三角形,如下图所示

Triangle with Points

现在我想知道三角形的任何虚拟网格点是否包含 ... 我怎样才能使用C#.Net实现这一目标?

注意:我也知道三角形的点,问题是2D平面..

我最诚挚的问候......

3 个答案:

答案 0 :(得分:8)

我找到了一种通用方法来查找点是否在三角形here

希望这会有所帮助

答案 1 :(得分:4)

  • 假设您的三角形由点A,B和C
  • 组成
  • 假设你想测试点P在三角形里面

在三角形内部可以被解析为所有向量AB,BC和CA的同一侧(左侧或右侧)。所以你

  • 创建3d矢量AB,BC,CA,z = 0(每个三角形只需要执行一次)
  • 创建三维向量AP,BP,CP,其中z = 0(每个点P必须进行一次)
  • 计算p = ABxAP,q = BCxBP和r = CAxCP(每个点P必须进行一次)

如果p,q和r在z坐标上具有相同的符号

,则您的点在三角形内

答案 2 :(得分:3)

将三角形定义为GraphicsPath并使用GraphicsPath.IsVisible(Point)方法确定此路径是否包含该点。