Calcul surface quadrilatéral

idrissiilias Messages postés 76 Date d'inscription mercredi 19 janvier 2011 Statut Membre Dernière intervention 31 janvier 2012 - 25 juil. 2011 à 15:09
idrissiilias Messages postés 76 Date d'inscription mercredi 19 janvier 2011 Statut Membre Dernière intervention 31 janvier 2012 - 29 juil. 2011 à 10:08
Bonjour ,
J'ai un petit souci je sais pas comment faire pour calculer la surface d'un quadrilateral en C# merci
A voir également:

50 réponses

BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
26 juil. 2011 à 17:21
List corners = PointsCloud.FindQuadrilateralCorners(edgePoints);

Donc, j'en conclus que les coins du quadrilatère sont dans corners. Donc, tu n'as pas besoin de tes listes A, B, C, D.
Si tu regardes l'algo que je t'ai montré, dans la fonctions aireQuadrilatère, tu peux dire ceci:
IntPoint A = corners[0];
IntPoint B = corners[1];
IntPoint C = corners[2];
IntPoint D = corners[3];

Si je prends cette formule (j'ai pas vérifier s'il y a mieux...), je peux calculer ceci:
// distance entre les points
float ab = A.DistanceTo(B);
float bc = B.DistanceTo(C);
float ac = A.DistanceTo(C);
float cd = C.DistanceTo(D);
float da = D.DistanceTo(A);

// calcul triangle 1
float p1 = ab+bc+ac;  // périmètre
float a1 = p1*(p1-2ab)*(p1-2bc)*(p1-2ac);  // aire triangle 1

// calcul triangle 2
float p2 = ac+cd+da;  // périmètre
float a2 = p2*(p2-2ac)*(p2-2cd)*(p2-2ca);  // aire triangle 2

// aire quadrilatère
float aQ = a1 + a2;

// si < seuil alors suppr


ça te va?

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
idrissiilias Messages postés 76 Date d'inscription mercredi 19 janvier 2011 Statut Membre Dernière intervention 31 janvier 2012
27 juil. 2011 à 08:46
Bonjour je te remercie bcp pour ton aide franchement c'est super gentil juste derniere chose j 'ai une erreur dans mon programme dans la partie distane entre les points il me met "impossible de convertir un double en float. une convertion explicite existe ( un cast est-il manquant ?)" merci bcp encore pour ton aide
0
idrissiilias Messages postés 76 Date d'inscription mercredi 19 janvier 2011 Statut Membre Dernière intervention 31 janvier 2012
27 juil. 2011 à 08:58
Re, c'est bon j ai reussi à convertir merci
0
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
27 juil. 2011 à 09:05
Ok, cool.
Par contre, j'ai fait une boulette, que tu as sans doute corrigée.
Dans mon calcul, a1 et a2 ne sont pas vraiment les aires des triangles. Soit A l'aire du triangle, alors a1 = 16*A² (idem pour a2)...


@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
idrissiilias Messages postés 76 Date d'inscription mercredi 19 janvier 2011 Statut Membre Dernière intervention 31 janvier 2012
27 juil. 2011 à 09:13
oui c'est que je suis entrain de voir je t assure mais le bleme c'est que l'air du triangle c'est (base*hauteur)/2
Don à la place de :
float a1 = p1*(p1-2ab)*(p1-2bc)*(p1-2ac); // aire triangle 1
je mets
float a1 16*A² c'est ca et pour a2 16*A² c'est ca
0
idrissiilias Messages postés 76 Date d'inscription mercredi 19 janvier 2011 Statut Membre Dernière intervention 31 janvier 2012
27 juil. 2011 à 09:38
j'ai une idee puisque on a un quadrilatere donc je calcul le perimetre de ceci donc :
float peri = ab+bc+cd+da;
mais pour les trucs que j ai modifie tu peux verifier stp pour la convertion car ca marche pas stp:
IntPoint A = corners[0];
                        IntPoint B = corners[1];
                        IntPoint C = corners[2];
                        IntPoint D = corners[3];

                        // distance entre les points
// c'est la ou il affiche l'erreur de convertion float en double donc j ai ajoute (float) à chaque fois 
                        float ab = (float)A.DistanceTo(B);
                        float bc = (float)B.DistanceTo(C);
                       	float ac = (float)A.DistanceTo(C);
                        float cd = (float)C.DistanceTo(D);
                        float da = (float)D.DistanceTo(A);

                        float peri = ab + bc + cd + da;
0
idrissiilias Messages postés 76 Date d'inscription mercredi 19 janvier 2011 Statut Membre Dernière intervention 31 janvier 2012
27 juil. 2011 à 09:48
Mais le truc ca marche pas j ai une erreur :
Erreur :
Interception de System.ArgumentOutOfRangeException
Message="L'index était hors limites. Il ne doit pas être négatif et doit être inférieur à la taille de la collection.\r\nNom du paramètre : index"
Source="mscorlib"
ParamName="index"
StackTrace:
à System.ThrowHelper.ThrowArgumentOutOfRangeException()
à System.Collections.Generic.List`1.get_Item(Int32 index)
à Teste_2.Form1.ProcessImage(Bitmap bitmapecran) dans C:\Users\Ilias\Desktop\Programme\Teste_2\Teste_2\Form1.cs:ligne 173
à Teste_2.Form1.ouvertureDunToolStripMenuItem_Click(Object sender, EventArgs e) dans C:\Users\Ilias\Desktop\Programme\Teste_2\Teste_2\Form1.cs:ligne 49
InnerException:
0
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
27 juil. 2011 à 09:55
Pourquoi tu veux calculer le périmètre de ta forme? T'en as pas besoin...
C'est quoi ta ligne 49? Le message est assez clair: tu vas chercher un objet qui n'est pas dans ta collection (l'index est trop grand)


@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
idrissiilias Messages postés 76 Date d'inscription mercredi 19 janvier 2011 Statut Membre Dernière intervention 31 janvier 2012
27 juil. 2011 à 10:14
la ligne 49 c'est juste l'appele de fonction tu veux que je t envoie mon programme pour voir car la je suis bloquer STP juste pour voir comme ca on sera on phase
0
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
27 juil. 2011 à 10:27
Vas-y, fais péter le code!


@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
idrissiilias Messages postés 76 Date d'inscription mercredi 19 janvier 2011 Statut Membre Dernière intervention 31 janvier 2012
27 juil. 2011 à 13:23
lol NN c'est bon ca marche c coool merci comme parcontre je l ai fais avc le theoreme de pythagore
0
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
27 juil. 2011 à 13:46
Euh...soit. Mais le théorème de Pythagore ne permet que de calculer la longueur des côtés d'un triangle rectangle.


@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
idrissiilias Messages postés 76 Date d'inscription mercredi 19 janvier 2011 Statut Membre Dernière intervention 31 janvier 2012
27 juil. 2011 à 14:14
Oui mais je devise mon quadrilatere en deux ensuite je fais à l'aide current point et next point pour calculer les distance et la fin ca marche
0
idrissiilias Messages postés 76 Date d'inscription mercredi 19 janvier 2011 Statut Membre Dernière intervention 31 janvier 2012
27 juil. 2011 à 19:27
Re,
Par contre j ai une question dans mon programme je fais inserer une image et moi je veux apres l'avoir utiliser mon programme me la supp directement tu vois car apres il y au ra le bordel sur mon bureau et je sais pas comment procede merci
0
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
27 juil. 2011 à 20:31
System.IO.File.Delete();

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
idrissiilias Messages postés 76 Date d'inscription mercredi 19 janvier 2011 Statut Membre Dernière intervention 31 janvier 2012
28 juil. 2011 à 09:34
Ok merci par contre je veux juste ta confirmation pour declaration d'une image c'est ca :
Bitmap Image = new Bitmap();
mais le bleme ca marche car je veux mettre cette image dans une fonction que j'appel et ca marche pas .
private void Cmd66Leds_Click(object sender, EventArgs e)
{
Bitmap image66 = new Bitmap();
int nombre =0;
ProcessImage(image66,nombre);
if (nombre == 66)
{
lblConfirm.Text = ("OK");
}
else
{
lblConfirm.Text = ("NON OK");
}

}
0
idrissiilias Messages postés 76 Date d'inscription mercredi 19 janvier 2011 Statut Membre Dernière intervention 31 janvier 2012
28 juil. 2011 à 09:34
private void Cmd66Leds_Click(object sender, EventArgs e)
{
Bitmap image66 = new Bitmap();
int nombre =0;
ProcessImage(image66,nombre);
if (nombre == 66)
{
lblConfirm.Text = ("OK");
}
else
{
lblConfirm.Text = ("NON OK");
}

}



                
0
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
28 juil. 2011 à 09:51
doc de ProcessImage


@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
idrissiilias Messages postés 76 Date d'inscription mercredi 19 janvier 2011 Statut Membre Dernière intervention 31 janvier 2012
28 juil. 2011 à 10:08
oui j ai vu ca mais moi je veux juste savoir comment on decalre une image tu vois car qd je mets :
private void Cmd66Leds_Click(object sender, EventArgs e, Bitmap image)
" ca marche pas et qd je mets :
Bitmap image = new Bitmap () 
;
ca marche pas aussi car je veux applé image dans processimage c'est tout
0
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
28 juil. 2011 à 10:34
Je ne peux que te renvoyer vers la doc.
Les callbacks d'évènements n'ont pas 3 arguments. Et si tu as des erreurs sur ton constructeurs, c'est qu'il faut peut-être des paramètres.
Au lieu d'y aller à tatons, prend un moment pour aller lire la doc. Au final, tu gagnera du temps.


@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
Rejoignez-nous