0

我目前正在将我的 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

图形

4

1 回答 1

3

那么有没有一种简单的方法可以将 NSBezierPath 转换为一堆直线?

向路径发送bezierPathByFlatteningPath消息。这将返回一个新路径,因此已转换。

于 2009-09-02T10:13:19.597 回答