我正在寻找Polygon算法内外的一个点。到目前为止,我发现了一些算法(奇数规则算法),如果我通过了多边形点,它就能成功运行。但是我遇到了这个问题(计算积分)。问题是如果多边形只包含移动到数据的行和(例如,如果多边形是矩形或八边形等),那么我可以很容易地计算绘制多边形的点。但我有一些多边形可以使用弧数据绘制,也可以行到数据并移动到数据。所以在这种情况下,我被困在通用方式检查多边形内部或外部的点。
我在这附加一些多边形图像。
您可以看到上面的图像使用线条绘制,移动到弧形数据。所以在那种情况下我无法检查。
请介绍如何检查此类多边形内部或外部的点?
(为了绘制多边形,我有类似的数据:
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)
这是近似数据。
谢谢。
答案 0 :(得分:2)
您应该使用相同的算法(偶数 - 奇数),但您需要为弧线使用不同的交叉算法(贝塞尔曲线)。
这是一篇博客文章,可以帮助您开始正确的方向: https://www.particleincell.com/2013/cubic-line-intersection/
<强>更新强>
Here's关于如何进行线/圆交叉的答案和问题。扩展以检查交叉点是否在您的学位范围内应该是相当简单的。
答案 1 :(得分:2)
由于您提出了想法,您可以考虑以下选项:
像Raniz建议的那样。这是最好的。
使用直线段创建逼近曲线的临时多边形,然后使用现有算法。这是次优的,但根据您的具体情况,它可能是实用的方法。
使用不同的前景色和背景色对树形进行栅格化,然后只需检查点下像素的颜色。这是非常次优的,但如果您已经光栅化这些形状以便显示它们,那么您已经拥有了实现这一点的所有功能。
答案 2 :(得分:0)
您应该可以使用GeneralPath
来创建Shape
。然后使用contains(...)
方法确定形状是否包含您的观点。