0

Im creating method that should rotate triangle around it's mass center, it should work, but my check shows that it doesn't. I understand that it might be not precise rotation, but still point that is mass center should remains the same after rotation of triangle.

What I did wrong?

    public void rotateAroundMassCenter(double grad){
    System.out.println("Starting...");

    Point initial = this.massCenter();

    Point o =this.massCenter();
    o.printPoint();
    double angle=Math.toRadians(grad);
    System.out.println();

    //formulas
    //    x' = x0+(x-x0)*cos(A)+(y0-y)*sin(alpha);
    //    y' = y0+(x-x0)*sin(A)+(y-y0)*cos(alpha);

    //new points
    int ax = (int) (o.x+(this.getA().x-o.x)*Math.cos(angle)-(this.getA().y-o.y) *Math.sin(angle));
    int ay = (int) (o.y+(this.getA().x-o.x)*Math.sin(angle)+(this.getA().y-o.y) * Math.cos(angle));
    this.a.movePoint(ax, ay);

    int bx = (int) (o.x+(this.getB().x-o.x)*Math.cos(angle)-(this.getB().y-o.y) *Math.sin(angle));
    int by = (int) (o.y+(this.getB().x-o.x)*Math.sin(angle)+(this.getB().y-o.y) * Math.cos(angle));
    this.b.movePoint(bx, by);

    int cx = (int) (o.x+(this.getC().x-o.x)*Math.cos(angle)-(this.getC().y-o.y) *Math.sin(angle));
    int cy = (int) (o.y+(this.getC().x-o.x)*Math.sin(angle)+(this.getC().y-o.y) * Math.cos(angle));
    this.c.movePoint(cx, cy);

    Point finalCenter=this.massCenter();
    System.out.println();
    finalCenter.printPoint();

    //check center position after rotate
    if (initial==finalCenter  ){
        System.out.println("Rotation was correct");
    }
    else{
        System.out.println("Algorytm is wrong");
    }
    this.print();
}

here how i find mass center:

// mass centre
    public Point massCenter(){
        double x = (this.getA().x+this.getB().x+this.getC().x)/3;
        double y = (this.getA().y+this.getB().y+this.getC().y)/3;
        Point o= new Point(x,y);
        return o;
    }

Result:

Ready to go
Triangle is: 
A:(1.0; 1.0)B: (3.0; 1.0)C: (1.0; 4.0)
Starting...
(1.6666666666666667;2.0)Old center
New center
(3.0;3.3333333333333335)Algorithm is wrong
Triangle is: 
A:(2.0; 1.0)B: (6.0; 3.0)C: (1.0; 6.0)
Bodja Sly
  • 5
  • 1
  • 5

1 Answers1

0

very little mistake ^^

if (initial==finalCenter  ){...

that's never true, you must compare by using equal:

if (initial.equals(finalCenter)  ){...
Martin Frank
  • 3,445
  • 1
  • 27
  • 47
  • you can also compare `initial.x == fianlCenter.x && initial.y == finalCenter.y` – Martin Frank Dec 03 '15 at 12:15
  • Yes, my mistake, thanks. But still points aren't equal. Rotation formula seems to be right from geometrical point... It looks like triangle is moved somewhere, but not rotated. – Bodja Sly Dec 04 '15 at 08:59
  • Wonderfull, thank you! Now my check shows that points are equal. But, I still can't get how it may be) Please see example: `Ready to go Triangle is: A:(1.0; 1.0)B: (1.0; 3.0)C: (4.0; 1.0) Starting... (2.0;1.6666666666666667)Old center New center (4.0;3.3333333333333335)Rotation was correct Triangle is: A:(2.7642977396044843; 1.4881553646890875)B: (1.3500841772313894; 4.902368927062183)C: (7.885618083164127; 3.60947570824873)` – Bodja Sly Dec 04 '15 at 09:23
  • Points are different, but equal() says that they are the same one, how can it be? – Bodja Sly Dec 04 '15 at 09:29