Avatar billede vandspand Nybegynder
11. februar 2005 - 14:08 Der er 2 kommentarer

Cosinus og Sinus??

Hey

Jeg er stødt ind i et lille problem omkring rotation af et Polygon. Jeg har denne metode der roterer et Polygon fint.

public Polygon rotate(Polygon poly, double theta) {

    Polygon newPoly;
    int i;
    double x, y;

    newPoly = new Polygon();
    for (i = 0; i < poly.npoints; i++) {
      x = poly.xpoints[i] * Math.cos(theta)+ poly.ypoints[i] * Math.sin(theta);
      y = poly.ypoints[i] * Math.cos(theta)- poly.xpoints[i] * Math.sin(theta);
      newPoly.addPoint((int) x, (int) y);
    }

    return newPoly;
  }


Men her er så problemet.. Denne metode roterer Polygonet omkring 0,0 og det er ikke lige det jeg skal bruge... Jeg kunne godt tænke mig at kunne rotere omkring CenterX og CenterY på selve Polygonet istedet..
Er der nogen matematik guder der har en god løsning til dette problem??
Hvilken som helst løsning godtages bare jeg kan få Polygonet til at rotere omkring sin egen akse.. hvilket IKKE er 0,0
Avatar billede jakoba Nybegynder
11. februar 2005 - 14:13 #1
lad os sige din polygon har center i ( cx, cy )

for hvert punkt i løkken trækker du så ( cx, cy ) fra før du roterer, og lægger dem til igen bagefter.

mvh JakobA
Avatar billede jakoba Nybegynder
11. februar 2005 - 14:17 #2
fx:
  x = cx + (poly.xpoints[i]-cx) * Math.cos(theta)+ (poly.ypoints[i]-cy) * Math.sin(theta);
  y = cy + (poly.ypoints[i]-cy) * Math.cos(theta)- (poly.xpoints[i]-cx) * Math.sin(theta);
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester