2015-01-16 2 views
0

graphviz과 비슷한 글자가 필요합니다. 나는 이미 그들이 중복되지 않는 및 이차 베 지어 곡선과의 센터를 연결하도록 노드를 그릴 관리했다,하지만 난 곡선 에지의 방향성에 다음과 같은 문제에 직면하고있다 :Java에서 오토 마트의 방향이있는 가장자리를 그립니다.

enter image description here

로 당신은 볼 수 있습니다, 노란색 작은 삼각형은 꽤 좋지 않습니다. 내 코드는 다음과 같습니다 :

g.setColor(Color.RED); 
    ArrowGraph arrow = graph.getArrows().get(0);  
    int x = (int)(arrow.getP1().getX() + arrow.getP2().getX())/2; 
    int y = (int)(arrow.getP1().getY() + arrow.getP2().getY())/2 + 50; 
    QuadCurve2D.Double curve = new QuadCurve2D.Double(arrow.getP1().getX() - 20, arrow.getP1().getY() - 20, x, y, arrow.getP2().getX() - 20, arrow.getP2().getY() - 20);   
    ((Graphics2D)g).draw(curve);    

    int[] xPoints = new int[] {(int)arrow.getP2().getX() - 20, (int)arrow.getP2().getX() - 15, (int)arrow.getP2().getX() - 25}; 
    int[] yPoints = new int[] {(int)arrow.getP2().getY() - 20, (int)arrow.getP2().getY() - 10, (int)arrow.getP2().getY() - 10}; 
    g.setColor(Color.YELLOW); 
    g.fillPolygon(xPoints, yPoints, 3); 

내가 알고있는 좌표 : 시작점과 끝점, 커브의 제어점. 시작점과 끝점은 기본적으로 노드의 중심입니다.

저는 어떻게 든 삼각형을 곡선으로 조정하고 싶습니다. 그래서 그것의 끝에 있습니다 (노드의 경계에있는 것이 바람직합니다). 어떻게 내가 그걸 할 수 있었는지 알았어?

답변

1

커브를 전달한 FlatteningPathIterator를 사용하여 마지막 세그먼트 (사실상 경로의 마지막 줄)를 가져올 수 있습니다.

화살표 삼각형을 만들기 위해 선을 사용하십시오.

+0

경로의 마지막 줄을 사용하여 경로에서 점을 얻을 수 있습니다. 경로에 따라 삼각형을 구성 할 수 있습니다. 이 대답은 도움이되었습니다. FlatteningPathIterator를 알지 못했습니다. – Eszter

관련 문제