1

应用 graphics2d 转换后如何获取线坐标?这是代码:

double startX = 100;
double startY = 100;
double endX   = 500;
double endY   = 500;

AffineTransform rotation = new AffineTransform();      
double angle = Math.toRadians(90);
rotation.rotate(angle, 200, 200); 

Graphics2D brush = (Graphics2D) g;
Line2D.Double line = new Line2D.Double(startX, startY, endX, endY);  
brush.setTransform(rotation);
brush.draw(line);
4

1 回答 1

1

我没有看到任何“好”的方法,但这是我得到的。应用旋转后,您可以使用PathIterator对象来获取线条的结果。从那里您可以遍历 内部的坐标PathIterator并获取您的 x 和 y 坐标。

如果您有兴趣遍历 java 中的行/路径上的每个点,这里有一个 awnser,它有一种更简洁的方式来获取坐标

此外,如果您打算在任何类型的图形中使用它,我不建议在您的绘画方法中执行此过程。

double startX = 100;
double startY = 100;
double endX   = 500;
double endY   = 500;

AffineTransform rotation = new AffineTransform();      
double angle = Math.toRadians(90);
rotation.rotate(angle, 200, 200); 

Line2D.Double line = new Line2D.Double(startX, startY, endX, endY);
PathIterator it = line.getPathIterator(rotation);
while(!it.isDone()) {
    double [] values = new double[6];
    it.currentSegment(values);
    System.out.println("["+values[0] + ", " + values[1] + "]");
    it.next();
}

我还注意到一些关于使用路径而不是初始行的评论。我同意每当您需要为“形状”应用变换时都应该使用路径,因为它们内置了处理它的方法。这是使用路径而不是 Line2D 的示例

double startX = 100;
double startY = 100;
double endX   = 500;
double endY   = 500;

AffineTransform rotation = new AffineTransform();      
double angle = Math.toRadians(90);
rotation.rotate(angle, 200, 200); 

Path2D path = new Path2D.Double();
path.moveTo(startX, startY);
path.lineTo(endX, endY);

path.transform(rotation);

double [] values = new double[6];
for(PathIterator it = path.getPathIterator(null); !it.isDone();) {
    it.currentSegment(values);
    System.out.println("["+values[0] + ", " + values[1] + "]");
    it.next();
}
于 2013-10-04T06:42:41.710 回答