Java 在Graphics2D中应用变换后如何获取线坐标?

Java 在Graphics2D中应用变换后如何获取线坐标?,java,awt,java-2d,graphics2d,affinetransform,Java,Awt,Java 2d,Graphics2d,Affinetransform,在应用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); Graphic

在应用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);
我看不到任何“伟大”的方式来做这件事,但这里是我得到的。应用旋转后,可以使用
PathIterator
对象获取行的结果。从那里,您可以在
PathIterator
内的坐标中循环,并获得x和y坐标

这里有一个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();
}
我看不到任何“伟大”的方式来做这件事,但这里是我得到的。应用旋转后,可以使用
PathIterator
对象获取行的结果。从那里,您可以在
PathIterator
内的坐标中循环,并获得x和y坐标

这里有一个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();
}

嗯?如果变换是正确的&设置为图形实例,您应该能够在需要的任何方法中使用原始坐标,并且变换将自动完成。为了更快地获得更好的帮助,请发布一个。我不需要执行另一个转换。在应用变换后,只需要线的新坐标(x1,y1,x2,y2)。这将与变换前的坐标不同。谢谢1)“只是想要新的坐标……”无意冒犯,但我真的不在乎你想要什么,我正试图找出你想要它的原因。了解这些信息后,您打算实现什么应用程序功能?可能有比您现在尝试的更简单的方法来实现它。2) 您是否打算忽略有关发布SSCCE的建议?我希望这能解释为什么。请注意,如果您打算忽略它,“忽略”可以是双向的。这并不是说我没有其他事情要做,也不是说我没有其他人需要帮助……我会发布一个SSCCE,没问题。我想要新的坐标,因为我想要从变换线的每个顶点开始画另外两条线。另外,我想沿着转换后的线条画4个小圆圈。为什么不将线条和圆圈添加到作为一个整体进行转换的
通用路径
或复合
形状
?如果变换是正确的&设置为图形实例,您应该能够在需要的任何方法中使用原始坐标,并且变换将自动完成。为了更快地获得更好的帮助,请发布一个。我不需要执行另一个转换。在应用变换后,只需要线的新坐标(x1,y1,x2,y2)。这将与变换前的坐标不同。谢谢1)“只是想要新的坐标……”无意冒犯,但我真的不在乎你想要什么,我正试图找出你想要它的原因。了解这些信息后,您打算实现什么应用程序功能?可能有比您现在尝试的更简单的方法来实现它。2) 您是否打算忽略有关发布SSCCE的建议?我希望这能解释为什么。请注意,如果您打算忽略它,“忽略”可以是双向的。这并不是说我没有其他事情要做,也不是说我没有其他人需要帮助……我会发布一个SSCCE,没问题。我想要新的坐标,因为我想要从变换线的每个顶点开始画另外两条线。另外,我想沿着转换后的线条画4个小圆圈。为什么不将线条和圆圈添加到作为一个整体转换的
通用路径
或复合
形状