Hallo,
Ich habe ein JPanel auf das ich Punkte zeichnen kann. Diese verbinden sich dann per g.drawLine zu irgendwelchen Formen. Jetzt möchte ich diese Objekte drehen. Eigentlich kein Problem, Mittelpunkt bestimmen, Objekt in den Nullpunkt verschieben, auf jeden Punkt die Rotationsmatrix anwenden und wieder zurückschieben.
Wenn ich das so machen (mit meinen Code) wird das Objekt allerdings von Schritt zu Schritt kleiner bis am Ende alle Punkte aufeinander liegen?
Kann mir wer helfen wo liegt mein Denk (Syntax) -Fehler???
Vielen Dank!
Ich habe ein JPanel auf das ich Punkte zeichnen kann. Diese verbinden sich dann per g.drawLine zu irgendwelchen Formen. Jetzt möchte ich diese Objekte drehen. Eigentlich kein Problem, Mittelpunkt bestimmen, Objekt in den Nullpunkt verschieben, auf jeden Punkt die Rotationsmatrix anwenden und wieder zurückschieben.
Wenn ich das so machen (mit meinen Code) wird das Objekt allerdings von Schritt zu Schritt kleiner bis am Ende alle Punkte aufeinander liegen?
Kann mir wer helfen wo liegt mein Denk (Syntax) -Fehler???
Code:
private int PointCounter;
private int[][] Points;
private int lx, ly, hx, hy, vcenter, hcenter;
// methoden zum punkte hinzufügen, entfernen etc...
// paint methode zum punkte und linien zeichnen sind hier
public void calcBounds() // wird bei mousePressed aufgerufen
{
lx = getWidth();
ly = getHeight();
hx = 0;
hy = 0;
//calc bounds from support points
for (int i=0; i<PointCounter; i++)
{
if (Points[i][X] < lx)
lx = Points[i][X];
if (Points[i][X] > hx)
hx = Points[i][X];
if (Points[i][Y] < ly)
ly = Points[i][Y];
if (Points[i][Y] > hy)
hy = Points[i][Y];
}
// calc center
vcenter = lx + ((hx-lx) /2);
hcenter = ly + ((hy-ly) /2);
}
public void rotate() // wird bei mouseDragegd aufgerufen
{
for (int i=0; i<PointCounter; i++)
{
// translate points to center, rotate an translate back
Points[i][X] -= vcenter;
Points[i][Y] -= hcenter;
Points[i][X] = (int) (Math.cos(Math.toRadians(1)) * Points[i][X] + Math.sin(Math.toRadians(1)) * Points[i][Y]);
Points[i][Y] = (int) (-Math.sin(Math.toRadians(1)) * Points[i][X] + Math.cos(Math.toRadians(1)) * Points[i][Y]);
Points[i][X] += vcenter;
Points[i][Y] += hcenter;
}
}
Vielen Dank!