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
0
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
}