0

このメソッドの目的は、ポイント (c) を取り込み、現在の重心 (x,y) を新しく提供された座標に移動することです。これは、2 つの違いを見つけてから、その点を新しい座標に変換することによって行われます。ただし、メソッドをボイドとして設定しているため、新しいセントロイド値を設定する方法がわかりません....何かアイデアはありますか? すべてのコードで申し訳ありませんが、できるだけ少なくしようとしました。Translate は点 (x,y) を取り、指定された値 (dx,dy) を加算します。

private Point centroid;
Triangle(Point a, Point b, Point c) {
    this.a = a;
    this.b = b;
    this.c = c;

    triPoints = new Point[] { a, b, c };

}

public Point getCentroid() {
Point centroid;
    double x = 0.0;
    double y = 0.0;
    x = (a.getX() + b.getX() + c.getX()) / 3;
    y = (a.getY() + b.getY() + c.getY()) / 3;

    centroid = new Point(x, y);

    return centroid;
}

 public void move(double dx, double dy) {

     centroid = getCentroid();


     System.out.println(centroid.getX() + " "+ centroid.getY());
centroid = centroid.translate(dx, dy);
Point newCentroid =  new Point(centroid.getX(),centroid.getY());
 System.out.println(newCentroid.getX() + "  "+ newCentroid.getY());
if(getCentroid().equals(newCentroid)){

}else{

}
    for (int index = 0; index < triPoints.length - 1; index++) {

        triPoints[index].translate(dx, dy);


    }

}


 public void move(Point c) {



    double firstx = 0.0;
    double firsty = 0.0;

    Point f = getCentroid();
 System.out.println(f.getX()+ " "+ f.getY() + " "+ c.getX()+ " "+ c.getY());
    if (f.getX() >= c.getX()) {
firstx = c.getX() - f.getX();}
        else{
firstx = Math.abs(f.getX() - c.getX());
    }
    if (f.getY()>= c.getY()){
        firsty = c.getY() - f.getY();
    }
     else {
        firsty = Math.abs(f.getY() -c.getY());
    }




    move(firstx, firsty);

//System.out.println(centroid.getX() + " " + centroid.getY());

}
4

1 に答える 1

0

java.awt.Point を使用していると思いますか?

その場合、 centroid.translate(dx, dy) は void メソッドです: 実際には値が返されないため、

    centroid =centroid.translate(dx, dy)

実際には何もしません。

新しい重心が欲しいだけなので、やってみてください

     centroid = getCentroid();
     System.out.println(centroid.getX() + " "+ centroid.getY());
     Point newCentroid =  new Point(centroid.getX() + dx,centroid.getY() + dy);
     System.out.println(newCentroid.getX() + "  "+ newCentroid.getY());

翻訳後にやりたいことが新しいセントロイドを作ることだけなら、翻訳をする必要はありません。

また、translate 関数もコンストラクターも double を使用しないため (標準の x、y グラフを使用している場合は意味があります)、dx と dy を int にすることができます。

于 2013-04-26T19:15:40.140 に答える