AffineTransform i skalowanie

0

Witam, próbuję napisać mały programik do zmiany rozmiaru figury. Ma to polegać na tym, że mam jakiś kwadrat powiedzmy i gdy kliknę prawy dolny róg powiedzmy to zmienia się rozmiar wraz z ruchem myszy. Dla samej figury kwadratu napisałem to na zasadzie powiększania/pomiejszania długości boku wraz z ruchem myszy i działa ładnie ale... chcę to zrobić za pomocą obiektu AffineTransform bo jak skalować wielokąt czy elipse? Ma ktoś pomysł jak powinno wyglądać modyfikowanie parametrów sx, sy w metodzie: public void scale(double sx, double sy) wraz z ruchem myszy w mouseDragged? Innymi słowy jak zgrać ze sobą te dwie metody? Pozdrawiam

1

sx = newWidth / oldWidth
sy = newHeight / oldHeight

0

Dzięki :) Nie chcę zakładać nowego tematu, a mam jeszcze (odwieczny) problem ze zgraniem AffineTransform i Graphics2D.
robię tak:

AffineTransform aff = new AffineTransform();
aff.scale(dx, dy);
g.translate(x, y);
g.setTransform(aff);
g.translate(-x, -y);
 

Ale najwidoczniej coś jest nie tak, bo nie działa mi jak powinno (rozjeżdża się). Problem jest z g.translate() ?

0

Złoż przesunięcie jako składową przekształcenia.

0

Nie rozumiem niestety, mogę prosić o bardziej łopatologiczną odpowiedź?

0

Np.:

private void drawCart(Graphics2D g2) {
    AffineTransform tr = g2.getTransform();  // save the current transform
    g2.translate(-1.5,-0.1);  // center of first wheel will be at (-1.5,-0.1)
    g2.scale(0.8,0.8);  // scale to reduce radius from 1 to 0.8
    drawWheel(g2); // draw the first wheel
    g2.setTransform(tr);  // restore the transform 
    g2.translate(1.5,-0.1);  // center of second wheel will be at (1.5,-0.1)
    g2.scale(0.8,0.8); // scale to reduce radius from 1 to 0.8
    drawWheel(g2); // draw the second wheel
    g2.setTransform(tr);  // restore the transform
    g2.setColor(Color.RED);
    g2.fill(new Rectangle2D.Double(-2.5,0,5,2) ); // draw the body of the cart
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1