2016-04-23 16 views
0

I QuadCurve2D bin mit Kurven zwischen meinen Knoten zeichnenIn Richtung auf der Mitte einer Kurve

QuadCurve2D curve = new QuadCurve2D.Double(start.getX(), start.getY(), c1, c2, end.getX(), end.getY()); 

ich den folgenden Code verwendet, um eine Richtung der Kurve hinzuzufügen, wo g2d ist Graphics2D Objekt

g2d.draw(curve); 

Polygon arrowHead = new Polygon(); 
arrowHead.addPoint(0, 5); 
arrowHead.addPoint(-5, -5); 
arrowHead.addPoint(5, -5); 

AffineTransform at = new AffineTransform(); 
at.setToIdentity(); 
double angle = Math.atan2(curve.getY2() - curve.getY1(), curve.getX2() - curve.getX1()); 
at.translate(curve.getX2(), curve.getY2()); 
at.rotate((angle - Math.PI/2d)); 

g2d.setTransform(at); 
g2d.fill(arrowHead); 

Ich möchte die Richtung in der Mitte der Kurve nicht am Ende zeigen, habe ich versucht, die .translate() Parameter ändern, aber es erscheint an seltsamen Orten. Irgendwelche Vorschläge?

Antwort

0

Erste iteriert ich den Weg seiner Länge zu erhalten dann bekam ich die Punkte in der Mitte und zog meine Richtung

PathIterator iterator = curve.getPathIterator(null, 1); 
int count = 0; 
double[] coordinates = new double[2]; 
while (!iterator.isDone()) { 
    ++count; 
    iterator.next(); 
} 

iterator = curve.getPathIterator(null, 1); 
int a = count/2; 
int b = a + 1; 
count = 0; 
while (!iterator.isDone()) { 
    count++; 
    iterator.currentSegment(coordinates); 
    if (count == a) { 
     x1 = (int) coordinates[0]; 
     y1 = (int) coordinates[1]; 
    } else if (count == b) { 
     x2 = (int) coordinates[0]; 
     y2 = (int) coordinates[1]; 
    } 
    iterator.next(); 
} 

und meine Richtung wurde

Polygon arrowHead = new Polygon(); 
arrowHead.addPoint(0, 5); 
arrowHead.addPoint(-5, -5); 
arrowHead.addPoint(5, -5); 

AffineTransform at = new AffineTransform(); 
at.setToIdentity(); 
double angle = Math.atan2(y2 - y1, x2 - x1); 
at.translate(x2, y2); 
at.rotate((angle - Math.PI/2d));