找到一个点的可见区域

时间:2017-10-09 13:55:38

标签: c++ geometry

外面有一个三角形和一个点。我们需要找到从该点可见的三角形边的摘要长度。enter image description here

在这种情况下,答案是AB + BC。

作为输入,有点的坐标。

所以问题是如何用C ++解决它?

P.S。在我看来,我们需要找到ρ(P;每个点)并观察这个距离是否与任何三角形边相交。然后选择满足条件的两个最远点,并找到边的总和。

1 个答案:

答案 0 :(得分:1)

让我们为三角形顶点定义顺序。让它逆时针。你的三角形是ACB(顺时针顺序是ABC)。

如果点位于边缘定义的右半平面上,则该点会看到边缘。

这个公式:

res = (y2 - y1)*(px - x1) - (x2 - x1)*(py - y1)

给出关于半平面(px,py)相对于(x1,y1) - (x2,y2)段的信息。只需获得res的标志。

你可以分析三角形的三个部分,得到点在右边的部分。

选择其他顺序会更改标志。