Hallo, voor een project ben ik bezig om een tekenprogramma te maken in java.
Ik gebruik swing en al het tekenwerk gebeurt in een bepaald JPanel.
Alle vormen die men tekent sla ik op in Polygons.
Nu wil ik een resize functie implementeren. Dit heb ik met mousehandlers gedaan die de muiscoordinaten oppikken dus ik ben reeds voorzien van een oude x een oude y en een nieuwe x en y.
Ik teken van de boundingbox in de rechterbovenhoek vierkantje. Als men deze versleept wil ik resizen.
Momenteel bereken ik het centrum(centroid) en aan de hand daarvan bepaal ik hoe er geresized word.
Dit is mijn huidige resize functie:
Dit werkt in principe best goed voor vierkanten. Maar voor veelhoeken, cirkels(regelmatig 100hoek) etc. krijg ik rare verschijnselen. Heeft iemand een idee hoe dat kan of een idee voor een beter algoritme?
Ik gebruik swing en al het tekenwerk gebeurt in een bepaald JPanel.
Alle vormen die men tekent sla ik op in Polygons.
Nu wil ik een resize functie implementeren. Dit heb ik met mousehandlers gedaan die de muiscoordinaten oppikken dus ik ben reeds voorzien van een oude x een oude y en een nieuwe x en y.
Ik teken van de boundingbox in de rechterbovenhoek vierkantje. Als men deze versleept wil ik resizen.
Momenteel bereken ik het centrum(centroid) en aan de hand daarvan bepaal ik hoe er geresized word.
Dit is mijn huidige resize functie:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
| public void resize(int x1, int y1, int x2, int y2, int n) { int xdif = x2 - x1; int ydif = y2 - y1; Polygon p = s; Point c = new Point(0, 0); //Calculate centroid for (int i = 0; i < p.npoints; i++) c.translate(p.xpoints[i], p.ypoints[i]); c.x = c.x / p.npoints; c.y = c.y / p.npoints; for (int i = 0; i < p.npoints; i++) { if (p.xpoints[i] <= c.x) p.xpoints[i] -= xdif; else if (p.xpoints[i] >= c.x) p.xpoints[i] += xdif; if (p.ypoints[i] <= c.y) p.ypoints[i] += ydif; else if (p.ypoints[i] >= c.y) p.ypoints[i] -= ydif; } } |
Dit werkt in principe best goed voor vierkanten. Maar voor veelhoeken, cirkels(regelmatig 100hoek) etc. krijg ik rare verschijnselen. Heeft iemand een idee hoe dat kan of een idee voor een beter algoritme?