В вашем вопросе есть два отдельных вопроса, каждый из которых я расскажу.
Вот изображение ASCII вашей ситуации:
B
+
/|
/ |
/ |
/ |
len / | y
/ |
/ |
/ |
/ __|
/ θ | |
+----------+
A x C
Это прямоугольный треугольник. Он имеет три стороны:
- Диагональная сторона на рисунке, противоположная углу 90 °, называется гипотенузой и имеет длину
len
. Гипотенуза - это то, что вы пытаетесь нарисовать.
- Вертикальная сторона является стороной, противоположной углу
θ
, и имеет длину y
.
- Горизонтальная сторона является стороной, смежной с углом
θ
, и имеет длину x
.
Учитывая приведенную выше иллюстрацию, справедливы следующие уравнения:
cos(θ) = x/len
sin(θ) = y/len
Эти уравнения являются еще одним способом сказать:
- Косинус угла равен длине соседней стороны, деленной на длину гипотенузы.
- Синус угла равен длине противоположной стороны, деленной на длину гипотенузы.
При решении уравнения для x
и y
вы получите:
x = len * cos(θ)
y = len * sin(θ)
То есть вы хотите sin()
и cos()
, а не cos()
и tan()
. Если точка A
не находится в начале координат, вам необходимо сместить x
и y
путем сложения, например:
x = len * cos(θ) + 50
y = len * sin(θ) + 50
С помощью значений x
и y
вы можете найти координаты для точки B
на треугольнике и, таким образом, сможете нарисовать ваши линии.
Кроме того, если вы программируете на Java, тригонометрические функции в классе Math
ожидают угол в радианах , а не в градусах. Многие языки программирования, которые предоставляют тригонометрические функции, похожи на это.
Радианы и градусы измеряют одно и то же, но полное вращение в градусах идет от 0
до 360°
, а полное вращение в радианах - от 0
до 2π
.
Чтобы преобразовать углы в градусах в радианы, умножьте угол на π/180
. В Java константа π
предоставляется Math.PI
.
Например, угол в 10 ° градусов эквивалентен 10 * π/180
или π/18
радиан.