[英]How can I rotate an Area object on its axis while also moving it along the y axis?
因此,我創建了一個Area對象並將其制成4星多邊形。 我想做的是旋轉該對象,同時使其沿y軸平移。 這是我用於創建對象的點的代碼,星星的中心是xloc和yloc,其繪畫功能位於其下方:
double rots = 0.0; int xPoints[] = { 45, 48, 56, 48, 45, 42, 34, 42 }; int yPoints[] = { 56, 47, 45, 43, 34, 43, 45, 47 }; double xloc = 150, yloc = 250;
public void paint(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
RenderingHints rh = new RenderingHints( RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
rh.put(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
g2d.setRenderingHints(rh);
g2d.translate(xloc, yloc);
g2d.rotate(rots);
g2d.fill(star);
//yloc += .01;
rots += .001;
repaint();
}
我遇到的問題是繪畫功能。 使用getRotateInstance時,它沿xloc和yloc的軸旋轉。 當這些數字增加時,恆星的旋轉會從其原點開始擴大,以覆蓋整個屏幕。 我能想到的唯一解決方案是更改xPoints []和yPoints [],但到目前為止我還沒有成功。 有另一種方法可以解決此問題,也可以解決我目前遇到的問題嗎?
編輯:所以我取得了一些進展! 我接受了建議,我已經接近了。 我將代碼AffineTransform trans = AffineTransform.getRotateInstance
替換為:
AffineTransform trans = new AffineTransform(); trans.setToTranslation(xloc, yloc); trans.rotate(rots);
現在,它可以旋轉並在屏幕上移動,但是盡管它不會圍繞越來越大的視野旋轉,但仍然圍繞着我似乎無法分辨的一點旋轉。 我猜想這與xloc和yloc點的位置有關。 根據我之前的測試,xloc和yloc應該以其原點為中心,以便正確旋轉。 有什么建議么?
編輯2:我收到建議說我應該只使用Graphics2D函數進行平移和旋轉。 我用以下方法更改了AffineTransform語句:
g2d.translate(xloc, yloc); g2d.rotate(rots);
我現在遇到的問題是,雖然恆星確實在平移和旋轉,但它似乎還在進行額外的旋轉。 因此,它現在要做的是在其原點旋轉,並繞一個我無法確定的附加點旋轉,同時還要沿y軸平移。 為了更好地了解它的外觀,可以想象一個行星晝夜旋轉,還繞着恆星盤旋,然后沿一條直線移動。 我已經更新了上面的代碼以反映我的更改。 我怎樣才能解決這個問題?
通過更改double xloc = 150, yloc = 250;
轉換為int xloc = 150, yloc = 250;
它解決了問題。 但是,一切都太快了,所以我添加了一個計時器來減慢速度,僅此而已。
我的猜測是,積分榜的表現不佳。 形狀必須為int形式,因此通過將變量加倍並將其應用於變換,會弄亂它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.