Page 1 sur 1

angles et longueurs des côtés d'un triangle

Publié : sam. oct. 02, 2010 5:45 pm
par alb
Pour construire des exercices sur les triangles, j'utilise ceci:

Code : Tout sélectionner

Angle_degre(A,B,C):={
local a,b,c,val,lm;
lm:=min(longueur(A,B),longueur(A,C))/10;
a:=A;
b:=A+(B-A)*(lm/longueur(A,B));
c:=A+(C-A)*(lm/longueur(A,C));
si simplifier(angle(A,B,C)-pi/2)==0 alors
  return carre(a,b),legende(affixe(similitude(a,sqrt(2),pi/4,b)),"90°");
fsi;
si simplifier(angle(A,B,C)+pi/2)==0 alors 
  return carre(a,c),legende(affixe(similitude(a,sqrt(2),pi/4,c)),"-90°");
fsi;
val:=round(angle(A,B,C)*180/pi,1);//valeur en degré à 0.1 près
return angle(A,B,C,val+"°");
}
:;
puis:

Code : Tout sélectionner

Triangle(A,B,C):={
local L;
S:=simplifier((1/2)*longueur(B,C)*sin(abs(angle(A,B,C))));
L:=triangle(A,B,C),
Angle_degre(A,B,C),Angle_degre(B,C,A),Angle_degre(C,A,B),
legende(milieu(A,B),cat(longueur(A,B))),
legende(milieu(B,C),cat(longueur(B,C))),
legende(milieu(C,A),cat(longueur(C,A))),
legende(point((1/3)*(A+B+C)),"S="+S);
return L;
}:;
En faisant:

Code : Tout sélectionner

A:=point(-4,-1);B:=point(4,-2);C:=point(-2,2);Triangle(A,B,C);
je n'obtiens pas l'angle droit en C, le pb venant me semble-t-il de b dans la fonction Angle_degre
Mais si je remplace C:=point(-2,2) par C:=point(-2,2.0) alors j'ai l'angle droit.
Si quelqu'un a une idée....

Re: angles et longueurs des côtés d'un triangle

Publié : sam. oct. 02, 2010 6:39 pm
par alb
Une erreur: faire S:=simplifier((1/2)*longueur(A,B)*longueur(A,C)*sin(abs(angle(A,B,C))))
La fonction Angle_degre n'est sûrement pas indispensable puisque angle suffit mais j'avais commencé ainsi et j'aimerais savoir où je me plante.

Re: angles et longueurs des côtés d'un triangle

Publié : dim. oct. 03, 2010 6:46 am
par parisse
Il semble que c'est l'addition point + symbolique (complexe exact) qui ne renvoie pas de point, contrairement à point+complexe inexact. Je vois 2 solutions pour contourner le problème pour l'instant, faire un evalf dans le calcul de b:= et c:=, ou travailler avec des affixes tout du long et mettre les point, etc. une fois le calcul fait.
P.S.: ça donne un affichage convaincant!

Re: angles et longueurs des côtés d'un triangle

Publié : lun. nov. 01, 2010 4:03 pm
par alb
J'ai modifié le programme en ajoutant quelques evalf et en essayant de tenir compte des cas où les coordonnées sont irrationnelles.

Code : Tout sélectionner

Angle_degre(A,B,C):={
  local a,b,c,val,lm;
  lm:=min(longueur(A,B),longueur(A,C))/10;
  a:=evalf(A);
  b:=evalf(A+(B-A)*lm/longueur(A,B));
  c:=evalf(A+(C-A)*lm/longueur(A,C));
  si simplifier(angle(A,B,C)-pi/2)==0 alors
    return carre(a,b),legende(affixe(similitude(a,sqrt(2),pi/4,b)),"90°");
  fsi;
  si simplifier(angle(A,B,C)+pi/2)==0 alors 
    return carre(a,c),legende(affixe(similitude(a,sqrt(2),pi/4,c)),"-90°");
  fsi;
  val:=round(angle(A,B,C)*180/pi,1);//valeur en degré à 0.1 près
  return angle(A,B,C,val+"°");
}
:;
Triangle(A,B,C):={
  local L,a,b,c,T,Titre,S,S2;
  T:=type(abscisse(A)),type(ordonnee(A)),type(abscisse(B)),type(ordonnee(B)),type(abscisse(C)),type(ordonnee(C));
  si member(DOM_SYMBOLIC,[T]) alors 
   //pour des coordonnees irrationnelles du type p+q*sqrt(k)
    Titre:=titre="les angles et le carré des longueurs des côtés";
    a:=simplifier(longueur2(B,C));
    b:=simplifier(longueur2(A,C));
    c:=simplifier(longueur2(A,B));
    S2:=simplifier((1/4)*b*c*(sin(abs(angle(A,B,C))))^2);
    si size(cat(S2))>49 alors //modifier 49 ? pour éviter affichage long ou rootof
       L:=L,legende(point(evalf((1/3)*(A+B+C))),"S="+round(sqrt(S2),1));
    sinon 
       L:=L,legende(point(evalf((1/3)*(A+B+C))),"S^2="+S2);
    fsi;
  sinon 
   //pour des coordonnees rationnelles
    Titre:=titre="les angles et les longueurs des côtés";
    a:=simplifier(longueur(B,C));
    b:=simplifier(longueur(A,C));
    c:=simplifier(longueur(A,B));
    S:=simplifier((1/2)*b*c*sin(abs(angle(A,B,C))));
    L:=L,legende(point(evalf((1/3)*(A+B+C))),"S="+S);
  fsi;
  L:=L,triangle(A,B,C),
  Angle_degre(A,B,C),Angle_degre(B,C,A),Angle_degre(C,A,B),
  legende(milieu(A,B),cat(c)),
  legende(milieu(B,C),cat(a)),
  legende(milieu(C,A),cat(b));
  return Titre,L;
}
:;
J'ai rencontré une première difficulté pour éviter l'affichage de rootof dans le cas de racine de racine: je n'ai rien trouvé de mieux que le test sur size(cat(S2)) pour renvoyer une valeur approchée de S2. D'où ma première question: comment tester si un résultat est un rootof ?
Ensuite j'ai tenté 3 exemples:
1)A:=point(-2*sqrt(2)+3,-1);B:=point(4,-4*sqrt(2));C:=point(-5+2*sqrt(2),-5*sqrt(2));
Triangle(A,B,C);
2)A:=point(9,5);B:=point(2,-2);C:=point(-6,6);
Triangle(A,B,C);
3)A:=point(-5,-1);B:=point(7*sqrt(2),-2);C:=point(-6,8*sqrt(3));
Triangle(A,B,C);
Ma deuxième question concerne ce troisième exemple, je modifie l'ordonnée de B pour la rendre positive, par exemple ceci:
A:=point(-5,-1);B:=point(7*sqrt(2),2);C:=point(-6,8*sqrt(3));
Triangle(A,B,C);
et là j'obtiens un crash qui pour simplifier est obtenu avec:
A:=point(-5,-1);B:=point(7*sqrt(2),2);C:=point(-6,8*sqrt(3));
a:=simplifier(longueur2(B,C));
b:=simplifier(longueur2(A,C));
c:=simplifier(longueur2(A,B));
simplifier((1/4)*b*c*(sin(abs(angle(A,B,C))))^2)

Re: angles et longueurs des côtés d'un triangle

Publié : lun. nov. 01, 2010 5:59 pm
par alb
J'aurais dû faire coiffeur !
Tout s'arrange avec S:=abs(aire(triangle(A,B,C)))
Restent deux questions:
1)comment détecter un rootof ?
2)A:=point(-5,-1+sqrt(3));B:=point(7*sqrt(2),2);C:=point(-6,8*sqrt(3));
pourquoi aire(triangle(A,B,C)) renvoie un résultat simplifié
alors que simplifier(longueur(A,B)) renvoie un rootof ?
Le programme modifié:

Code : Tout sélectionner

Angle_degre(A,B,C):={
  local a,b,c,val,lm;
  lm:=min(longueur(A,B),longueur(A,C))/10;
  a:=evalf(A);
  b:=evalf(A+(B-A)*lm/longueur(A,B));
  c:=evalf(A+(C-A)*lm/longueur(A,C));
  si simplifier(angle(A,B,C)-pi/2)==0 alors
    return carre(a,b),legende(affixe(similitude(a,sqrt(2),pi/4,b)),"90°");
  fsi;
  si simplifier(angle(A,B,C)+pi/2)==0 alors 
    return carre(a,c),legende(affixe(similitude(a,sqrt(2),pi/4,c)),"-90°");
  fsi;
  val:=round(angle(A,B,C)*180/pi,1);//valeur en degré à 0.1 près
  return angle(A,B,C,val+"°");
}
:;
Triangle(A,B,C):={
  local L,a,b,c,T,Titre,S;
  S:=abs(aire(triangle(A,B,C)));
  T:=type(abscisse(A)),type(ordonnee(A)),type(abscisse(B)),type(ordonnee(B)),type(abscisse(C)),type(ordonnee(C));
  si member(DOM_SYMBOLIC,[T]) alors 
   //pour des coordonnees irrationnelles du type p+q*sqrt(k)
    Titre:=titre="les angles et le carré des longueurs des côtés";
    a:=simplifier(longueur2(B,C));
    b:=simplifier(longueur2(A,C));
    c:=simplifier(longueur2(A,B));
    si size(cat(S))>29 alors //modifier 29 ? pour éviter affichage trop long
       L:=L,legende(point(evalf((1/3)*(A+B+C))),"S="+round(S,1));
    sinon 
       L:=L,legende(point(evalf((1/3)*(A+B+C))),"S="+S);
    fsi;
  sinon 
   //pour des coordonnees rationnelles
    Titre:=titre="les angles et les longueurs des côtés";
    a:=simplifier(longueur(B,C));
    b:=simplifier(longueur(A,C));
    c:=simplifier(longueur(A,B));
    L:=L,legende(point(evalf((1/3)*(A+B+C))),"S="+S);
  fsi;
  L:=L,triangle(A,B,C),
  Angle_degre(A,B,C),Angle_degre(B,C,A),Angle_degre(C,A,B),
  legende(milieu(A,B),cat(c)),
  legende(milieu(B,C),cat(a)),
  legende(milieu(C,A),cat(b));
  return Titre,L;
}
:;

Re: angles et longueurs des côtés d'un triangle

Publié : mar. nov. 02, 2010 9:05 am
par parisse
Merci pour le bug, je viens de le corriger, les binaires devraient etre mis a jour d'ici demain
(edit c'est fait pour win et linux 32 bits).
Concernant les rootof, on peut les detecter comme n'importe quel fonction au sommet d'un symbolique en testant
si sommet(variable)==rootof alors ...
Par exemple si a:=normal(sqrt(sqrt(2)+1)) (fraction contenant un rootof)
lvar(a) renvoie la liste des "variables" dont depend a, ici un rootof, donc sommet(l[0]) est egal a 'rootof'
Sinon, on est en train de reflechir a ajouter la detection des rootof qui sont solutions d'equations bicarrees, cela permettrait de reecrire un certain nombre de rootof sous une forme plus comprehensible pour le lycee. Concernant l'aire, elle est calculee en utilisant le determinant, ce qui evite d'introduire des racines carrees supplementaires (en general en geometrie, j'ai essaye d'appliquer des formules qui minimisent le nombre d'extensions algebriques).

Re: angles et longueurs des côtés d'un triangle

Publié : mer. nov. 03, 2010 9:49 am
par alain974
parisse a écrit :des rootof qui sont solutions d'equations bicarrees, cela permettrait de reecrire un certain nombre de rootof sous une forme plus comprehensible pour le lycee.
Il y a des solutions d'équations bicarrées qui s'affichent déjà très bien: http://revue.sesamath.net/spip.php?article294 (article en cours d'évaluation, ne pas hésiter à le commenter, il sera publié définitivement à la fin du mois).

Re: angles et longueurs des côtés d'un triangle

Publié : jeu. nov. 04, 2010 10:20 pm
par alb
Un exercice ouvert qui permet de manipuler les commandes du menu Scolaire->seconde mais plutôt avec des élèves de Première:
Chercher un polynôme à coefficients entiers de degré 2 (resp 4) de telle sorte que sqrt(129+16*sqrt(2)) (resp sqrt(130+16*sqrt(2))) soit une racine de ce polynôme.
Pour ceux qui trouvent rapidement: factoriser ces polynômes ou bien trouver toutes les racines de ces polynômes.

Re: angles et longueurs des côtés d'un triangle

Publié : ven. nov. 05, 2010 7:36 pm
par parisse
alain974 a écrit :[
Il y a des solutions d'équations bicarrées qui s'affichent déjà très bien: http://revue.sesamath.net/spip.php?article294 (article en cours d'évaluation, ne pas hésiter à le commenter, il sera publié définitivement à la fin du mois).
J'ai une question proche du thème de l'article, que pensez-vous de l'input en 2-d? Après quelques essais, je ne l'ai pas mis par défaut, il semble que c'est finalement plus difficile à maitriser comme interface et surtout beaucoup plus difficile à éditer.

Re: angles et longueurs des côtés d'un triangle

Publié : sam. nov. 06, 2010 12:54 pm
par alain974
parisse a écrit :que pensez-vous de l'input en 2-d?
J'en pense que je ne suis pas certain de comprendre la question. S'il s'agit de l'utilisation des flèches du clavier pour naviguer dans l'aborescence des expressions algébriques, je suis tout-à-fait pour en tant que prof, mes élèves ayant des lacunes dans ce domaine (je leur ai fait faire des exos sur le dessin d'arbres syntaxiques, qui les a intéressés). C'était d'ailleurs considéré comme un des atouts majeurs de la hp40: Déroutant au début, très pratique une fois qu'on est dedans. Mes rares élèves ayant eu une hp40 (ou 38) semblaient plutôt à l'aise avec.