문제 설명
Java: 질량 중심을 중심으로 삼각형 회전 (Java: Rotate triangle around mass center)
질량 중심을 중심으로 삼각형을 회전해야 하는 방법을 만들고 있는데 작동해야 하지만 확인 결과 작동하지 않는 것으로 나타났습니다. 정확한 회전이 아닐 수도 있다는 것을 이해하지만 삼각형의 회전 후에도 질량 중심인 점은 동일하게 유지되어야 합니다.
내가 무엇을 잘못했나요?
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();
}
여기에 내가 찾는 방법이 있습니다. 질량 중심:
// 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;
}
결과:
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)
참조 솔루션
방법 1:
very little mistake ^^
if (initial==finalCenter ){...
that's never true, you must compare by using equal:
if (initial.equals(finalCenter) ){...
(by Bodja Sly、Martin Frank)