Java-метод Point rot90()

Я пытаюсь выяснить, как реализовать следующий метод в Java;

** Point rot90 () ** Запрос новой декартовой точки, эквивалентной этой декартовой точке, повернутой на 90 градусов

Я понятия не имею, как идти о создании этого метода. Тем не менее, я считаю, что перетаскивание точки (x,y) и вывод новой точки (y,x*-1) эквивалентны повороту на 90 градусов. По сути, старая координата y становится новой координатой x, а новая координата y является старой координатой x, умноженной на отрицательное значение 1. Любая мысль о том, как настроить этот метод, будет принята с благодарностью. Благодарю.

это то, что я до сих пор

  public Point rot90(){
    Point rotated = new Point();
    rotated.yCoord = xCoord*-1;
    rotated.xCoord = yCoord;
    return rotated;
  }

Я знаю, что это не работает, как указано, когда я пытаюсь его скомпилировать. Какие-либо предложения?

2 ответа

В чем именно проблема?: Код не работает или результат не так, как ожидалось?


В интерпретации евклидовой геометрии в комплексной плоскости вращение (x,y) на 90° по определению комплексной единицы является умножением x+i·y на i. поскольку

i·(x+i·y)=-y+i·x, 

повернутая точка имеет координаты (-y,x), а ваш код реализует поворот на 270° =^= -90°.


В общем, вращение на угол составляет умножение

(cos(a)+i*sin(a)) * (x+i*y)

Обратите внимание, что система координат экрана является зеркальным отражением декартовой плоскости, ось Y направлена ​​вниз. Таким образом, угол ориентации меняется на противоположный.

Ваш метод нуждается в аргументе.

public Point rot90(Point p){
  Point rotated = new Point();
  rotated.yCoord = -p.xCoord;
  rotated.xCoord = p.yCoord;
  return rotated;
}

Если ваш класс Point имеет конструктор, который может принимать координаты, вы можете сделать его короче.

public Point rot90(Point p){
  return new Point(p.yCoord, -p.xCoord);
}
Другие вопросы по тегам