topLeftCorner を表す Point と、その幅と高さを表す Dimension を持つ Shape というオブジェクトを作成しました。topRightCorner を取得するには、幅を topLeftPoint.x に追加するだけです。私はそれらを中心を中心にある程度回転させます。回転後の問題はintersects(Shape)
、シェイプの回転を尊重しないため、私の方法が失敗することです。回転は各シェイプで同じになります。私の現在の実装は、Shape オブジェクト内で次のようになります。
public boolean intersects(Shape s){
// functions returning a Point of shape s
return intersects(s.topLeft())
|| intersects(s.topRight())
|| intersects(s.bottomLeft())
|| intersects(s.bottomRight())
|| intersects(s.leftCenter())
|| intersects(s.rightCenter())
|| intersects(s.center());
}
public boolean intersects(Point p){
return p.x >= leftX()
&& p.x <= rightX()
&& p.y >= topY()
&& p.y <= bottomY();
}
基本的に、rotatedLeftX()
またはのような機能がrotatedTopRight()
適切に機能する必要があります。また、その計算では、90回転前のtopLeftポイントがいつtopRightに変わるかは問題ではないと思います...