Page 1 sur 1

mauvaise somme de vecteurs:pourquoi?

Publié : 18 Mars 2020 15:20
par Kaloverian
bonjour,

Dans ce script C# en dessous, je crée une liste de vecteurs.A chaque fois que j'appuie sur la touche I, je rajoute dans cette liste le vecteur (2,0,2).
Cette liste contient en premier vecteur nul.
Le second de cette liste (0,0,2) est généré au lancement du jeu, avant d'appuyer sur la touche I
problème:
au second appui,le second objet généré prend la position (10,0,6) au lieu de
vecteur nul+(0,0,2)+(2,0,2)=(2,0,4):la somme dans cette liste n'est pas respectée.

Code : Tout sélectionner



using System.Collections;
using System.Collections.Generic;
using UnityEngine;



public class somme_position : MonoBehaviour
{
        int p = 0;
	
	public Mesh[] myMesh = new Mesh[10];
	public GameObject Objet1;
	Vector3 VSum = Vector3.zero;


	List<GameObject> ObjectList;
	
	List<Vector3> ListVecteurs;


	
	void Start()
	{
		
		ObjectList = new List<GameObject>();
		ObjectList.Add(Objet1);
		
		ListVecteurs = new List<Vector3>();

		ListVecteurs.Add(VSum);



		Vector3 V1 = new Vector3(0,0,,2);
		ListVecteurs.Add(V1);

		ObjectList[0].transform.position = ListVecteurs[1];



		
	}

	void Update()
	{

		



		if (Input.GetKeyDown(KeyCode.I))
		{
		    p++;
		
			ObjectList.Add(Objet1);
			ObjectList[p] = new GameObject("toto" + p);

			ListVecteurs.Add(new Vector3(2, 0, 2));

		[b]	foreach (Vector3 v in ListVecteurs)
			{
				VSum += v;
			}
[/b]
			ObjectList[p].transform.position = VSum;[b]//pas bonne valeur
[/b]
		

			ObjectList[p].AddComponent<MeshRenderer>();
			ObjectList[p].AddComponent<MeshFilter>().mesh = myMesh[p - 1];

		


		
		}
	}

}



D'où vient le problème?


merci de votre aide

Re: mauvaise somme de vecteurs:pourquoi?

Publié : 18 Mars 2020 15:41
par boubouk50
Salut,
Je vois déjà un problème de programmation au delà de l'algorithme:

Code : Tout sélectionner

Vector3 V1 = new Vector3(0,0,,2);
Tu dois avoir une erreur ici. 2 virgules à la suite.

Ensuite niveau algo, ben ton calcul est faux. VSum est dans ta liste donc il s'additionne chaque fois lui-même.
Tu n'auras pas
vecteur nul+(0,0,2)+(2,0,2)=(4,0,2) (qui devrait donner (2, 0, 4) d'ailleurs..)
mais une suite d'addition de VSum avec lui même:
VSum = VSum +(2, 0, 2) = (2, 0, 2)
VSum = VSum + (0, 0, 2) = (2, 0, 4)
VSum = VSum + VSum = (4, 0, 8)
Je ne tombe pas sur le même résultat, cela doit dépendre de l'ordre dans lequel est effectuée l'addition. Mais dans l'idée ce calcul est forcément faux.

Pourquoi additionner les Vecteurs? Tu peux simplement prendre le précédent (p-1) et lui ajouter le vecteur souhaité.

Re: mauvaise somme de vecteurs:pourquoi?

Publié : 18 Mars 2020 15:52
par Kaloverian
je ne saisis pas trop:
Y a-t-il moyen de modifier dans le code cette somme vectorielle pour avoir le bon résultat demandé?

Re: mauvaise somme de vecteurs:pourquoi?

Publié : 18 Mars 2020 16:37
par boubouk50
Oui, sortir VSum de la liste (en plus au départ il vaut Vector3.zero donc il ne sert à rien).
Oui, ajouter le vecteur précédent au vecteur en cours plutôt que de boucler.

Re: mauvaise somme de vecteurs:pourquoi?

Publié : 18 Mars 2020 17:17
par Kaloverian
petit code?
(je n'y arrive pas !)

Re: mauvaise somme de vecteurs:pourquoi?

Publié : 18 Mars 2020 17:42
par boubouk50
Désolé, mais ce n'est quand même pas difficile d'écrire une addition.
Si tu bloques dessus, je pense que tu devrais aller apprendre les bases de la programmation C# pour Unity. Il y a des cours sur OpenClassRoom ou les tutos officiels d'Unity Technologies (anglais).

Ce n'est pas pour te jeter la pierre, mais développer un jeu demande de réelles compétences en programmation, et tout apprentissage doit commencer avec les bases pas par de la bidouille. Unity est un moteur comme celui d'une voiture. Une personne formée sera plus efficace et apte qu'une bricoleur du dimanche ;)

Sinon, au delà de l'algorithme, il faut aussi apprendre à concevoir son programme, l'architecturer correctement. Là je te propose une correction mais pas forcément une bonne façon de faire.

Plus je lis ton code, moins je comprends la logique derrière, donc si tu veux que je t'aide à scripter tout ça, explique moi CLAIREMENT (je le mets en gros parce que j'ai l'habitude d'avoir des explications pas claires) ce que tu cherches à faire. As-tu besoin de récupérer ListVecteurs? (parce que tous les vecteurs sont identiques, donc pas utiles) Qu'est-ce qui est nécessaire dans ton code.

Re: mauvaise somme de vecteurs:pourquoi?

Publié : 18 Mars 2020 18:13
par Kaloverian
j'ai trouvé l'erreur(j'aurai du y penser)
Il fallait que je réinitialise Vsum à vecteur nul après le if


Code : Tout sélectionner



using System.Collections;
using System.Collections.Generic;
using UnityEngine;



public class somme_position : MonoBehaviour
{
        int p = 0;
	
	public Mesh[] myMesh = new Mesh[10];
	public GameObject Objet1;
	Vector3 VSum = Vector3.zero;


	List<GameObject> ObjectList;
	
	List<Vector3> ListVecteurs;


	
	void Start()
	{
		
		ObjectList = new List<GameObject>();
		ObjectList.Add(Objet1);
		
		ListVecteurs = new List<Vector3>();

		ListVecteurs.Add(VSum);



		Vector3 V1 = new Vector3(0,0,,2);
		ListVecteurs.Add(V1);

		ObjectList[0].transform.position = ListVecteurs[1];



		
	}

	void Update()
	{

		



		if (Input.GetKeyDown(KeyCode.I))
		{
		   
		        p++;
		       Vector3 VSum = Vector3.zero;
			ObjectList.Add(Objet1);
			ObjectList[p] = new GameObject("toto" + p);

			ListVecteurs.Add(new Vector3(2, 0, 2));

			foreach (Vector3 v in ListVecteurs)
			{
				VSum += v;
			}

			ObjectList[p].transform.position = VSum; //bonne valeur maintenant

		

			ObjectList[p].AddComponent<MeshRenderer>();
			ObjectList[p].AddComponent<MeshFilter>().mesh = myMesh[p - 1];

		


		
		}
	}

}