检查 Point 是否严格位于三角形内
Check whether Point lies strictly inside the triangle
给定三角形顶点的 3 个积分坐标 ABC 和另一个积分坐标 P,如何检查 P 是否严格位于三角形内 ?
我知道如何使用 Area 方法检查 P 是否在三角形内,即 Area ABC = Area ABP + 面积 ACP + 面积 BCP。
但是这道题,我想P严格在三角形里面
有很多方法可以检查点是否在三角形内。最简单的,我觉得:
1) 检查点是否在所有边的同一侧(找到边向量和顶点向量的叉积符号AB x AP, BC x BP, CA x CP
)
2) 在 AB 和 AC 向量的基础上表示 AP 向量 - 系数及其总和应在 0..1 范围内。 Delphi代码:
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;
给定三角形顶点的 3 个积分坐标 ABC 和另一个积分坐标 P,如何检查 P 是否严格位于三角形内 ?
我知道如何使用 Area 方法检查 P 是否在三角形内,即 Area ABC = Area ABP + 面积 ACP + 面积 BCP。
但是这道题,我想P严格在三角形里面
有很多方法可以检查点是否在三角形内。最简单的,我觉得:
1) 检查点是否在所有边的同一侧(找到边向量和顶点向量的叉积符号AB x AP, BC x BP, CA x CP
)
2) 在 AB 和 AC 向量的基础上表示 AP 向量 - 系数及其总和应在 0..1 范围内。 Delphi代码:
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;