DomoDidac 2, deux nouveaux modules

Cet article n’est plus à jour, DomoDidac² ( version 2 ) pour Windows XP, Vista, 7 et 8 est maintenant disponible en versions commerciale et d’évaluation, plus d’infos par ici, dans cet article… ou auprès de Pierron Éducation.

 

export_logo2_cdr_small

Logo de DomoDidac 2

DomoDidac 2 est en plein développement. Il a pour ambition de couvrir la quasi totalité de l’étude de l’énergie électrique en classe de troisième.
Il m’occupe pendant mes vacances d’hiver une quinzaine d’heures par jour, c’est dire quel plaisir ce travail me procure.

Deux modules entièrement nouveaux ont été construits ces trois dernières semaines.

flash_cross_0.91a

FlashCross 0.91a, issu de DomoDidac 2, au travail…

Le module générateur de mots croisés auquel je suis particulièrement attaché, une version allégée est proposée en FreeWare sous le nom de FlashCross, on peut la trouver par ici…

Il est construit autour d’une idée simple, il n’utilise pour ses entrées / sorties que le presse-papier ce qui le rend très très très simple à utiliser. Ce qui ne l’empêche nullement de proposer des fonctionnalités multiples.

Il est totalement fonctionnel  mais la liste des améliorations à y apporter comporte déjà une vingtaine d’entrées, la suite sera, de coutume,un compromis entre le désir ardent de construire le meilleur logiciel possible et la raison, celle-ci ne l’emportant pas toujours…

Cette version FreeWare sera gelée dans son état actuel ( aux éventuels bugs près qui seront bien entendu corrigés ), toute la suite du développement sera consacré à la version embarquée par DomoDidac 2.

spacer 40 pix

Le second module n’a pas encore de nom, il est totalement opérationnel, c’est un module très dynamique qui fait la synthèse des notions de puissance consommée, coût d’utilisation, de la maîtrise de l’énergie sous une approche très originale. Je l’ai construit en trois jours et j’en suis très fier.

coup_d_oeil

Un coup d’œil sur ce nouveau module de DomoDidac 2…

Pour tout dire, mon idée de départ de ce module était intéressante mais un peu rigide, chemin faisant,  je suis arrivé, sans l’avoir complètement voulu, à un outil étonnant, qui propose tout ce dont on peut avoir besoin sur la question et qui est ( c’est son atout majeur ) enfantin à utilise. Je vous le proposerai dès que possible.

spacer 40 pix

Je vais laisser ces deux nouveaux modules vivre leur vie quelques semaines, avant de les reprendre, ma liste de « to_do » en main.
Dans l’intervalle, et avant d’entreprendre de nouveaux modules spécifiques à la version 2, je vais réévaluer et reconstruire les modules de DomoDidac version originale qui seront tous présents sous une forme ou une autre dans la nouvelle version  ( c’est une demande des utilisateurs de la version précédente ).

Publicités

Détecter un clic dans un polygone

Ce blog n’est pas du tout orienté vers les techniques de programmation. Cependant, pour les besoins du développement de DomoDidac 2, j’ai été amené à utiliser et à modifier le code d’un algorithme du domaine public. Je poste ici les adaptations réalisées pour référence ultérieure.

spacer 40 pix

Pour les besoins de DomoDidac 2, en Pascal, j’ai eu  besoin de détecter un clic  dans un polygone quelconque pour une image map et je n’ai pas trouvé de réponse simple à mon problème.

Avant de me lancer dans un long travail sur la question , j’ai cherché ce qui existait dans le domaine public dans un autre langage et j’ai bien évidemment trouvé mon bonheur en C.

Le code original en C, ( d’une efficacité remarquable :  une boucle et trois if  ), est l’oeuvre de Bob Stein et Craig Yap , on peut le trouver par ici :
http://www.visibone.com/inpoly/inpoly.c

Ma modeste transcription en Pascal ( fonctionne sous Lazarus mais aussi sans aucun doute sous Delphi ou d’autres implémentations de Pascal ) :

  //
  //
  //
  //
  // Fonction Inpolyg ( fonction originale InPoly )
  // détection d'un clic d'un un polygone ( image map )
  // transcription de l'algorithme de Bob Stein et Craig Yap
  //                             http://www.visibone.com/inpoly/inpoly.c
  //
  // retourne true si clic dans le polygone, les points sont sont stockés
  // dans le tableau Points
  // ( premier couple de points à l'index 0 )
  // NBPoints : nombre de points dans le polygone
  // xt,yt : coordoonées du point à tester

function InPolyg  (Points : Array of TPoint; NbPoints,xt,yt : integer) : boolean;
var
  xnew, ynew  : integer;
  xold,yold : integer;
  x1,y1 : integer;
  x2,y2 : integer;
  i : integer;
begin
  Result:=false;
  if (NbPoints<3) then Result:=false
  else
    begin
      xold:=Points[NbPoints-1].x;
      yold:=Points[NbPoints-1].y;
      for  i:=0 to NbPoints-1 do
        begin
          xnew:=Points[i].x;
          ynew:=Points[i].y;
          if (xnew>xold) then
            begin
              x1:=xold;
              x2:=xnew;
              y1:=yold;
              y2:=ynew;
            end else
            begin
              x1:=xnew;
              x2:=xold;
              y1:=ynew;
              y2:=yold;
            end;
          if ((xnew < xt) = (xt <= xold)) and
             ((yt-y1)*(x2-x1)<(y2-y1)*(xt-x1)) then Result:=not(Result);
          xold:=xnew;
          yold:=ynew;
        end;
    end;
end;