检查Point是否严格位于三角形内

时间:2018-02-10 10:27:07

标签: geometry computational-geometry

给定三角 ABC 顶点的3个积分坐标和另一个积分坐标 P ,如何检查 P 是否严格位于三角形内不是吗?

我知道如何使用Area方法检查 P 是否在三角形内部,即Area ABC = Area ABP + Area ACP + Area BCP
但是在这个问题上,我希望P严格地在三角形内部。

1 个答案:

答案 0 :(得分:0)

有很多方法可以检查点是否位于三角形内。最简单的,我想:

1)检查点是否在所有边的同一侧(找到边矢量和顶点矢量的交叉积的符号AB x AP, BC x BP, CA x CP

2)以AB和AC向量为基础表示AP向量 - 系数及其和应在0..1的范围内。德尔福代码:

function PtInTriangle(ax, ay, bx, by, cx, cy, px, py: Integer): Boolean;
var
  xb, yb, xc, yc, xp, yp, d: Integer;
  bb, cc, oned: Double;
begin
  Result := False;
  xb := bx - ax;
  yb := by - ay;
  xc := cx - ax;
  yc := cy - ay;
  xp := px - ax;
  yp := py - ay;
  d := xb * yc - yb * xc;
  if d <> 0 then begin
    oned := 1 / d;
    bb := (xp * yc - xc * yp) * oned;
    cc := (xb * yp - xp * yb) * oned;
    Result := (bb > 0) and (cc > 0) and (cc + bb < 1);
  end;
end;