Java 变换后如何得到绝对坐标
我在画Java 2D的东西,像这样:Java 变换后如何得到绝对坐标,java,java-2d,Java,Java 2d,我在画Java 2D的东西,像这样: g2.translate( getWidth() / 2, getHeight() / 2 ); g2.rotate( angle ); g2.draw( new Ellipse2D.Double( -1, -1, 1, 1 ) ); 现在我想知道椭圆在我的圆上的坐标。知道怎么弄吗?所以我需要从逻辑空间到物理空间的转换。这很简单,有很多方法,但是在Ellipse2D中找不到它们 您可以使用其父矩形形状,然后根据您希望它的精度,可以减去曲率 如果创建对椭圆
g2.translate( getWidth() / 2, getHeight() / 2 );
g2.rotate( angle );
g2.draw( new Ellipse2D.Double( -1, -1, 1, 1 ) );
现在我想知道椭圆在我的圆上的坐标。知道怎么弄吗?所以我需要从逻辑空间到物理空间的转换。这很简单,有很多方法,但是在Ellipse2D中找不到它们 您可以使用其父矩形形状,然后根据您希望它的精度,可以减去曲率
如果创建对椭圆的引用
g2.translate( getWidth() / 2, getHeight() / 2 );
g2.rotate( angle );
Ellipse2D.Double ellipse = new Ellipse2D.Double( -1, -1, 1, 1 );
g2.draw( ellipse );
对于xg2.getTransform().getTranslateX()+ellipse.getX()
对于yg2.getTransform().getTranslateY()+ellipse.getY()
从对象获取坐标并使用该方法转到屏幕坐标(可以对任何点执行此操作)。如果您想要椭圆的路径,您可以使用-它返回一个
此示例获取屏幕上椭圆的中心点:
public static void main(String[] args) {
JFrame frame = new JFrame("Test");
frame.add(new JComponent() {
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
g2.translate( getWidth() / 2, getHeight() / 2 );
g2.rotate(Math.PI); // some angle
Ellipse2D.Double ellipse = new Ellipse2D.Double( -10, -10, 10, 10 );
g2.draw(ellipse);
Point2D c = new Point2D.Double(
ellipse.getCenterX(),
ellipse.getCenterY());
AffineTransform at = g2.getTransform();
Point2D screenPoint = at.transform(c, new Point2D.Double());
System.out.println(screenPoint);
}
});
frame.setSize(400, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
不,那不是解决办法。当然,我需要翻译后的坐标。否则我只得到1,但正确的是440x444或任何绝对坐标。@Jeny编辑!你能试试这个吗?我不知道这将如何解决我的问题。我只需要盒子的绝对坐标,而不是每个像素的绝对坐标。因此,相同的参数,但在物理位置上不符合逻辑。您可以使用我链接的一侧的方法,如:g2.getCenterX(),g2.getMaxX()。如果周围矩形的坐标系为-1:1,请尝试将这些方法给出的值乘以周围矩形的像素数除以2.5。好主意!作品谢谢PS:“Point2D screenPoint=at.transform(c,null);”可能会更好一些。@Jeny Jeppesen:是的!随你的便!:)