我目前正在将我的 jruby/java2d 图形绘图/布局应用程序移植到 macruby/cocoa。因此我需要得到一个开放的 NSBezierPath 与一个封闭的 NSBezierPath 的交点。
在 java2d 中,我使用了以下技巧。我将两条路径展平,并对每个路段进行了简单的线交叉测试。
那么有没有一种简单的方法可以将 NSBezierPath 转换为一堆直线?
我当前的算法只是简单地走这条线(以二进制搜索方式),直到我找到一个 containsPoint 为真的 NSPoint。但它只适用于直线。我在 java2d 中实现的那个也适用于弯曲路径。
def getIntersection edge, path
out = edge.source
ins = edge.target
until (out.dist(ins) < 1.0)
mid = out + ((ins - out) * 0.5)
if (path.containsPoint (NSMakePoint(mid.x, mid.y)))
ins = mid
else
out = mid
end
end
return out
end