通过atan2方法旋转对象时出现问题

时间:2015-11-26 16:57:36

标签: java atan2

我正在尝试按照光标移动图像,平滑地移动它所在的位置并转向面对它。

当我靠近原点时,它完美无缺:图像将完全翻转而没有问题,但是从窗口的原点越远,图像越少。当我在屏幕的另一侧时,不是翻过来而是旋转5°-15°而不是。

如果有人能指出问题是什么,我会很高兴=)

这是我目前的图片代码:

<div ui-tree="treeOptions" callbacks="treeOptions">
    <ol ui-tree-nodes="" data-nodrop-enabled="true" ng-model="rootNodeLst" callbacks="treeOptions" id="tree-root">
        <li ng-repeat="node  ui-tree-desIndex="node.sortIndex" in rootNodeLst" callbacks="treeOptions" ui-tree-node ng-include="'nodes_renderer.html'"></li>
    </ol>
</div>

这是处理旋转的代码,加上它的移动:

lblRover = new JLabel(sees) { // sees is an ImageIcon
        protected void paintComponent(Graphics g) {
            Graphics2D g2 = (Graphics2D)g;
            g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
            RenderingHints.VALUE_ANTIALIAS_ON);
            AffineTransform aT = g2.getTransform();
            Shape oldshape = g2.getClip();
            double x = getWidth()/2.0;
            double y = getHeight()/2.0;
            aT.rotate(Math.toRadians(degrees), x, y);
            g2.setTransform(aT);
            g2.setClip(oldshape);
            super.paintComponent(g);
        }
    };
    lblRover.setSize(179, 180);
    lblRover.setLocation(500, 300);
    JFrame.getFrames()[0].add(lblRover);

1 个答案:

答案 0 :(得分:0)

好吧,经过多次尝试,我把它缩小了。

现在,旋转代码在重绘之前放在最后,它看起来像这样:

sas=this.getAngle((float)diffy,(float)diffx);
NewJFrame.degrees=sas;

我还创建了这个使用两个浮点而不是两个点的新方法:

public float getAngle(Float x, Float y) {
float angle = (float) Math.toDegrees(Math.atan2(x, y));
//System.out.println(angle);
return angle;

我不知道为什么它现在有效,但它之前没有,因为程序基本相同......但是嘿它有效! = d