检查内部形状

时间:2015-05-01 07:03:19

标签: java polygon

我正在寻找Polygon算法内外的一个点。到目前为止,我发现了一些算法(奇数规则算法),如果我通过了多边形点,它就能成功运行。但是我遇到了这个问题(计算积分)。问题是如果多边形只包含移动到数据的行和(例如,如果多边形是矩形或八边形等),那么我可以很容易地计算绘制多边形的点。但我有一些多边形可以使用弧数据绘制,也可以行到数据并移动到数据。所以在这种情况下,我被困在通用方式检查多边形内部或外部的点。

我在这附加一些多边形图像。

enter image description here enter image description here

您可以看到上面的图像使用线条绘制,移动到弧形数据。所以在那种情况下我无法检查。

请介绍如何检查此类多边形内部或外部的点?

(为了绘制多边形,我有类似的数据:

MoveTo:Coordinate:424.941955,626.04046,

LineTo:坐标:428.941955,626.04046,

ArcTo:坐标:431.941955,633.04046 - 中心点:坐标:433.941955,628.04046 - 角度:-1.5707963267948966,

LineTo:坐标:431.941955,639.04046,

ArcTo:坐标:428.941955,646.04046 - 中心点:坐标:433.941955,644.04046 - 角度:-1.5707963267948966,

LineTo:坐标:424.941955,646.04046,

ArcTo:坐标:421.941955,639.04046 - 中心点:坐标:419.941955,644.04046 - 角度:-1.5707963267948966,

LineTo:坐标:421.941955,633.04046,

ArcTo:坐标:424.941955,626.04046 - 中心点:坐标:419.941955,628.04046 - 角度:-1.5707963267948966)

这是近似数据。

谢谢。

3 个答案:

答案 0 :(得分:2)

您应该使用相同的算法(偶数 - 奇数),但您需要为弧线使用不同的交叉算法(贝塞尔曲线)。

这是一篇博客文章,可以帮助您开始正确的方向: https://www.particleincell.com/2013/cubic-line-intersection/

<强>更新

Here's关于如何进行线/圆交叉的答案和问题。扩展以检查交叉点是否在您的学位范围内应该是相当简单的。

答案 1 :(得分:2)

由于您提出了想法,您可以考虑以下选项:

  1. 像Raniz建议的那样。这是最好的。

  2. 使用直线段创建逼近曲线的临时多边形,然后使用现有算法。这是次优的,但根据您的具体情况,它可能是实用的方法

  3. 使用不同的前景色和背景色对树形进行栅格化,然后只需检查点下像素的颜色。这是非常次优的,但如果您已经光栅化这些形状以便显示它们,那么您已经拥有了实现这一点的所有功能。

答案 2 :(得分:0)

您应该可以使用GeneralPath来创建Shape。然后使用contains(...)方法确定形状是否包含您的观点。