후 절대 좌표를 얻는 방법 :이 같은 자바 2D 물건을 그리기 오전 변환
g2.translate(getWidth()/2, getHeight()/2);
g2.rotate(angle);
g2.draw(new Ellipse2D.Double(-1, -1, 1, 1));
지금 내 sceen에 타원의 좌표를 KOW 싶다. 어떤 아이디어로 그것을 얻는가? 그래서 논리적 공간에서 물리적 공간으로의 전환이 필요합니다.
후 절대 좌표를 얻는 방법 :이 같은 자바 2D 물건을 그리기 오전 변환
g2.translate(getWidth()/2, getHeight()/2);
g2.rotate(angle);
g2.draw(new Ellipse2D.Double(-1, -1, 1, 1));
지금 내 sceen에 타원의 좌표를 KOW 싶다. 어떤 아이디어로 그것을 얻는가? 그래서 논리적 공간에서 물리적 공간으로의 전환이 필요합니다.
그것의 쉬운, 많은 방법이있다, 당신은 Ellipse2D에서 그러나 그들을 찾아 내지 않는다.
부모 RectangularShape를 사용할 수 있습니다. 그러면 원하는 정확도에 따라 곡률 계산을 뺄 수 있습니다.
http://download.oracle.com/javase/1.4.2/docs/api/java/awt/geom/RectangularShape.html
당신이 타원
와 y에 대한 X g2.getTransform().getTranslateX() + ellipse.getX()
에 대한
g2.translate(getWidth()/2, getHeight()/2);
g2.rotate(angle);
Ellipse2D.Double ellipse = new Ellipse2D.Double(-1, -1, 1, 1);
g2.draw(ellipse);
에 대한 참조를 만들 경우 g2.getTransform().getTranslateY() + ellipse.getY()
아니요 해결책이 아닙니다. 물론 번역 후 좌표가 필요합니다. 그렇지 않으면 1을 얻지 만 정확하면 440x444 또는 절대 좌표가됩니다. –
@Jeny Edited! 이거해볼 수 있니? –
회전이있는 복잡한 변환에는 작동하지 않습니다. – dacwe
이 AffineTransform에서 가져 오기 Graphics2D 개체를 사용하고 transform(src, dst) 메서드를 사용하여 화면 좌표로 이동합니다 (어느 지점에서나 가능). 타원의 패스를 원하면 Ellipse2D.getPathIterator(AffineTransform at) - PathIterator을 반환합니다.
이 예는 화면의 타원의 중심점을 가져옵니다
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);
}
차가움. 그거 좋은 생각이야! 공장. 감사. 추신 : "Point2D screenPoint = at.transform (c, null);" 조금 더 좋을지도 모릅니다. –
@Jeny Jeppesen : 옙! 당신이 원하는대로하십시오! :) – dacwe
나는이 내 문제를 해결하는 방법을 모른다. 모든 픽셀이 아니라 상자의 절대 좌표를 원합니다. 그래서 같은 매개 변수지만 논리적이 아닌 물리적 위치에. –
g2.getCenterX(), g2.getMaxX()와 같이 링크 된 측면의 메소드를 사용할 수 있습니다. 주변 사각형에 좌표계가있는 경우 (예 : -1에서 1까지 주변 사각형이 2로 나눈 픽셀 수를 제공하는 값을 곱하려고합니다. –