Подтвердить что ты не робот

Нарисуйте линию под определенным углом в Java

Я чувствую себя глупо, задавая этот вопрос (мой тригр ржавый), но мне тяжело.

Предположим, что у меня есть (x, y), которая всегда одинакова для начальной точки строки и (x, y), которая изменяется для конечной точки этой же строки. Линия также всегда имеет длину 40 пикселей. В начале программы линия возникает в вертикальной ориентации (позволяет называть ее 0 градусов). Основываясь на пользовательском вводе, мне нужно, чтобы строка была перерисована на определенное число градусов от ее начала, изменив только конец (x, y).

НЕКОТОРЫЕ ПРОДУКТЫ ДЛЯ МЫСЛИ, ЕСЛИ ВАМ НУЖНО:

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

Я думаю, что это будет легче работать, основываясь на углах треугольника, так как я всегда буду знать длину двух сторон треугольника (одна сторона образована 40-кратной длинной линией, а другая сторона образована начальной точкой этой линии и граница JPanel) и угол, который образуют эти две линии. Тем не менее, мой мозг - это мусор от попытки понять это. Любая помощь будет высоко оценена.

UPDATE:

@casablanca заставил меня на правильном пути. Я почистил свои триггерные функции, и вот как я сделал это.

Во-первых, я не понимал, что 90 градусов были прямо вверх, но как только я понял, что я решил, что это решение отражает этот факт. Я рисовал свою линию, начиная с нижнего центра кадра, выходящего. Поскольку сторона opposite треугольника находится в правой части экрана, когда угол, заданный моим пользователем, составляет менее 90 градусов и находится в левой части экрана, когда угол, заданный моим пользователем, превышает 90 градусов Мне пришлось приспособить формулу для учета этого факта, поэтому у меня есть четыре метода: один для координаты x в левой части экрана (когда пользователь имеет угол больше 90 градусов), один для y координата в левой части экрана (когда пользователь имеет угол больше 90 градусов) и то же самое для правой стороны экрана, когда пользователь задает угол меньше 90 градусов. int length во всех методах - длина гипотенузы. Еще раз спасибо за вашу помощь @casablanca!

public double leftSideX(double angle, int length){
    double x = frameWidth/2 - (length * Math.cos(Math.toRadians(90-(Math.toDegrees(angle)-90))));
    return x;
}

public double leftSideY(double angle, int length){
    double y = frameHeight - (length * Math.sin(Math.toRadians(90-(Math.toDegrees(angle)-90))));
    return y;
}

public double rightSideX(double angle, int length){
    double x = frameWidth/2 + (length * Math.cos(angle));
    return x;
}

public double rightSideY(double angle, int length){
    double y = frameHeight - (length * Math.sin(angle));
    return y;
}
4b9b3361

Ответ 1

Это то, что вы ищете?

startX = x;
startY = y;
endX   = x + 40 * Math.sin(angle);
endY   = y + 40 * Math.cos(angle);

И нарисуйте строку из (startX, startY) до (endX, endY) в любом API, который вы используете.

Также обратите внимание, что angle находится в радианах. Если у вас это было в градусах, вам нужно сначала преобразовать его:

angle = angle * Math.PI / 180;