我没有看到任何“伟大”的方式做到这一点,但继承人我得到了什么。旋转后,您可以使用PathIterator
对象来获取线条的结果。从那里,您可以循环访问PathIterator
中的坐标并获取您的x和y坐标。
继承人有如果抓出来的坐标的更清洁的方式的awnser您感兴趣iterate through each point on a line/path in java
此外,如果你计划在任何类型的图形,我不会建议做你paint方法里这一过程的使用这个。
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();
}
另外我注意到一些关于使用路径而不是你的inital线的评论。我同意,当你需要将变换应用于“形状”时,应该使用路径,因为它们内置了处理它的方法。下面是使用路径代替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();
}
咦?如果转换正确且设置为图形实例,则应该能够使用任何所需方法的原始坐标,并且转换将自动完成。为了更快地获得更好的帮助,请发布[SSCCE](http://sscce.org/)。 –
我不需要执行另一个转换。只需要在应用转换后的新坐标(x1,y1,x2,y2)。这将与变换之前的坐标有偏差。谢谢 – Adnan
1)*“只需要新的坐标..”*没有意图的进攻,但我真的不在乎*你想要什么,我试图找出*为什么*你想要它。作为知道该信息的结果,您打算实施的应用程序功能是什么?可能比您现在尝试的更容易实现它。 2)你是否打算忽略发布SSCCE的建议?我希望能解释'为什么?'。请注意,如果您打算忽略它,那么'忽略'可以双向进行。这不是因为我没有其他事情要做,或其他人帮助.. –