2009-09-02 2 views
0

현재 jruby/java2d 그래프 그리기/레이아웃 응용 프로그램을 macruby/cocoa로 이식하고 있습니다. 따라서 열려있는 NSBezierPath와 닫힌 NSBezierPath의 교차점을 가져와야합니다.NSBezierPath/Line 교차/평평한

java2d에서 다음 트릭을 사용했습니다. 나는 두 경로를 평평하게하고 각 세그먼트에 대한 간단한 선 교차 검사를 수행했습니다.

그래서 NSBezierPath를 일련의 직선으로 변환하는 간단한 방법이 있습니까?

내 현재 알고리즘은 containsPoint가 true 인 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 

Graph http://i28.tinypic.com/168zs03.png

답변

3

그래서 직선의 무리에 NSBezierPath를 변환하는 간단한 방법이 ?

경로를 보내십시오 bezierPathByFlatteningPath 메시지. 그러면 변환 된 새 경로가 반환됩니다.

+1

내가 분명히 받아 들인 RTFM을 제공하지 않아서 고마워. – thestoneage