14Fermer16
BrunniLe 27/04/2009 à 00:44
Bon j'ai implémenté la méthode à Jyaif et elle est meilleure que mon ancien système qui visait à trouver la distance entre le côté courant du tank et le prochain pixel à gauche et à droite, puis de constuire un triangle (pythagore) pour calculer l'angle:
1Vir
; Vérifie sur le long de l'axe "parallèle" autour de "milieu" en utilisant "perpendiculaire" comme vecteur sortant
angleTerre(point milieu, vecteur parallèle, vecteur perpendiculaire):
	entourage = largeurTank / 2		; On peut tweaker
	tolerance = 16		; tout ce qui est plus éloigné de l'objet est oublié, évite de prendre les galeries

	; Distance entre l'objet et le sol à une distance de "i" de "milieu" parallèlement à "parallèle"
	distance(i):
		point pos = milieu + parallèle * i		; € parallèle
		for j = [0 .. tolerance[ :
			if getPixel(pos + perpendiculaire * j):
				return j
		return tolerance
	
	moyenneGauche = (distance(-entourage) + distance(-entourage + 1)) / 2
	moyenneDroite = (distance(entourage) + distance(entourage - 1)) / 2
	return arctan(x = 2 * entourage, y = moyenneDroite - moyenneGauche)

Par contre juste noter qu'il ne faut pas faire une moyenne des angles mais des vecteurs wink sinon on risque de perdre de l'info, en imaginons qu'on a les angles {-2, 3, +2}, la moyenne devrait être 3 mais elle sera 1 ^^
Donc merci love Prochaine étape: ce que m'a décrit momotte smile