Я создаю базовую 2D-игру, и в настоящее время я пытаюсь получить x и y (Point) всех углов прямоугольника, пока я поворачиваю прямоугольник.Получение точки углов прямоугольника на экране во время вращения
private static Graphics2D drawRect(Graphics2D g)
{
Rectangle rect = new Rectangle(350,350,75,75);
AffineTransform transform = new AffineTransform();
transform.rotate(Math.toRadians(rotation), rect.getX() + rect.width/2, rect.getY() + rect.height/2);
AffineTransform old = g.getTransform();
g.transform(transform);
g.fill(rect);
if(z >= 1000)
{
// here I am asking it to print out the x,y of the point at the top left of the rectangle
System.out.println(rect.getX() + " : " + rect.getY() + " : " + rotation);
z = 0;
}
g.setTransform(old);
z++;
return g;
}
При запуске этого начинается при 350, 350, как показано, и будет вращаться в любом направлении в зависимости от того, как я увеличить его. Он правильно вращается по графике. Но когда я хочу напечатать точку x, y исходной верхней левой точки, она всегда возвращается с 350, 350. Если я поверну ее на 45 градусов в положительном направлении, она вернет 350, 350. Я сделал функцию щелчка поэтому я могу щелкнуть по экрану и правильно вернуть x и y точки щелчка. Когда я нажимаю на исходный верхний левый угол прямоугольника, он возвращает 311,334. Это результат, который я ищу при вычислении верхнего левого угла x, y. Визуальная здесь:
Там, наверное, действительно аккуратный способ сделать это, но на основе того, что (мало) Я знаю, я знаю, что могу вычислить угол между двумя точками, поэтому, учитывая центральную точку прямоугольника и верхний/левый угол прямоугольника, я могу вычислить угол, это представляет собой смещение. Я знаю, что могу вычислить точку на круге, учитывая угол и радиус. Таким образом, если предположить, что радиус является самой длинной длиной прямоугольника, плюс ваш введенный угол и угол смещения, вы должны иметь возможность рассчитать новое положение x/y верхнего/левого угла – MadProgrammer