Il y a une erreur dans ta 2nd ou 3ieme ligne. Tu ne dois pas mettre un moins pour les deux composantes de ta normale.
Aussi angle, c'est l'angle de ton avion, donc direction dans ton cas je suppose.
Tu peux aussi simplifier:
x: lengthdir_x(20, direction) - lengthdir_y(25, direction)
y: lengthdir_y(20, direction) + lengthdir_x(25, direction)
Ton angle doit être en degres.
La fonction lengthdir_x c'est juste un cos(degtorad(dir)) * len (et y un sinus).
Du coup autant faire la multiplication dedans si tu stockes pas le vecteur de direction.
Au niveau du fonctionnement si ça peut t'aider, imagine un cercle de rayon R.
Et bien lengthdir ça va te permettre de calculer les coordonnées d'un point sur le cercle en fonction d'un angle (coordonnée polaire).
Ainsi si tu veux le point a 45 degres sur un cercle de rayon 32 tu fais juste:
x: centre_x + lengthdir_x(32, 45)
y: centre_y + lengthdir_y(32, 45)
Pour ce qui est d'une normale c'est bien plus simple, car il s'agit juste d'une rotation de 90 degres, qui donne:
x: centre_x - vector_y
y: centre_y + vector_x
et
x: centre_x + vector_x
y: centre_y - vector_y
(Il y a deux normales, une de chaque côté).
A toi de bidouiller avec tout ça maintenant mais tu n'as pas besoin de plus