Пара вещей. Первое - быть осторожным в том, что вы принимаете за грех / косинус. Это не cos (угол * длина), а длина * cos (угол).
Второй момент - подумать о системах координат. Это может помочь сделать математику, предполагая, что начальная точка равна (0,0), а затем перевести на экранные координаты. Это помогает избежать путаницы с осью Y, которая кажется перевернутой (значения увеличиваются сверху вниз).
Итак, если мы просто хотим, чтобы точка, длина которой находилась под углом от начала координат в стандартной правой системе, мы получили бы:
x1 = length * cos(angle)
y1 = length * sin(angle)
Но так как отрицательный у у, мы на самом деле хотим
x2 = length * cos(angle)
y2 = -length * sin(angle)
Чтобы мысленно проверить это, представьте, что вы выполняете эту математику в начале координат (0,0), которое находится в верхнем левом углу и имеет угол 45 °. Если бы y2 был положительным, мы бы в конечном итоге увидели угол, который выглядит для нас как -45 °.
Теперь переведите начало координат в нашу начальную точку (x_i, y_i), чтобы получить наши окончательные значения:
x_f = x_i + length * cos(angle)
y_f = y_i + (-length * cos(angle)) = y_i - length * cos(angle)
В качестве альтернативы, если имеет больше смысла работать в стандартной правосторонней системе координат, вы, вероятно, могли бы избежать выполнения всей математики, как если бы (0,0) находилось в центре, а затем применить перевод и Зеркальное преобразование оси Y, но эта система координат экрана не слишком сложна для работы, когда вы привыкнете переключать значения y вокруг.