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);
}