Batch Index du Forum
S’enregistrerRechercherFAQMembresGroupesConnexion
Répondre au sujet Page 1 sur 1
Tracer des formes géométriques
Auteur Message
Répondre en citant
Message Tracer des formes géométriques 
Bonjour,

On voit enfin la fin de tout cela le reste sera du simple bricolage mais avant la dernière brique!


J'ai retranscris le programme pour tracer des lignes ici ->http://batch.xoo.it/t6081-Tracer-des-lignes.htm

Donc j'ai utilisé cette fonction afin de créer des formes (puisque un carré c'est 4 lignes)

Cela repose sur un code qui commande la fonction pour tracer des lignes

Avant tout une petite photo de ce que ce programme apporte ! Okay



Le carré

Syntaxe
Code:
call:trace_carre x_pos y_pos longueur_arête




Code:
:trace_carre
setlocal
set x_un_carre=%1
set y_un_carre=%2
set /a x_deux_carre=%x_un_carre%+%3
set /a y_deux_carre=%y_un_carre%+%3
call:trace_segment %x_un_carre% %y_un_carre% %x_deux_carre% %y_un_carre%
call:trace_segment %x_deux_carre% %y_un_carre% %x_deux_carre% %y_deux_carre%
call:trace_segment %x_deux_carre% %y_deux_carre% %x_un_carre% %y_deux_carre%
call:trace_segment %x_un_carre% %y_deux_carre% %x_un_carre% %y_un_carre%
endlocal
exit /b


Le rectangle

Syntaxe
Code:
call:trace_rectangle x_pos y_pos longueur_arête_x longueur_arête_y




Code:
:trace_rectangle
setlocal
set x_un_rectangle=%1
set y_un_rectangle=%2
set /a x_deux_rectangle=%x_un_rectangle%+%3
set /a y_deux_rectangle=%y_un_rectangle%+%4
call:trace_segment %x_un_rectangle% %y_un_rectangle% %x_deux_rectangle% %y_un_rectangle%
call:trace_segment %x_deux_rectangle% %y_un_rectangle% %x_deux_rectangle% %y_deux_rectangle%
call:trace_segment %x_deux_rectangle% %y_deux_rectangle% %x_un_rectangle% %y_deux_rectangle%
call:trace_segment %x_un_rectangle% %y_deux_rectangle% %x_un_rectangle% %y_un_rectangle%
endlocal
exit /b


Le losange

Syntaxe
Code:
call:trace_losange x_pos y_pos diagonale_x diagonale_y




Code:
:trace_losange
setlocal
set x_un_losange=%1
set /a y_un_losange=%2+(%4/2)
set /a x_deux_losange=%1+(%3/2)
set y_deux_losange=%2
set /a x_trois_losange=%1+%3
set /a y_quatre_losange=%2+%4
call:trace_segment %x_un_losange% %y_un_losange% %x_deux_losange% %y_deux_losange%
call:trace_segment %x_deux_losange% %y_deux_losange% %x_trois_losange% %y_un_losange%
call:trace_segment %x_trois_losange% %y_un_losange% %x_deux_losange% %y_quatre_losange%
call:trace_segment %x_deux_losange% %y_quatre_losange% %x_un_losange% %y_un_losange%
endlocal
exit /b


Tracer une forme

Le principe de cette commande est que on donne autant de coordonnées qu'on veut et le programme relie le point avec le suivant et puis quand il arrive au dernier il le relie au premier

ATTENTION: il faut minimum 3 point donc 6 paramètres dans le cas échéant le call sera annulé

Syntaxe
Code:
call:trace_forme x_un y_un x_deux y_deux x_trois y_trois

Code:
:trace_forme
setlocal enabledelayedexpansion
set nbr=0
for %%a in (%*) do (
  set /a nbr+=1
  set !nbr!=%%~a
)
set nbr=-1
set /a nbr_plus_un=%nbr%+1
set /a nbr_plus_deux=%nbr%+2
set /a nbr_plus_trois=%nbr%+3
if not defined 1 exit /b
if not defined 2 exit /b
if not defined 3 exit /b
if not defined 4 exit /b
if not defined 5 exit /b
if not defined 6 exit /b
:loop_scan_variable
set /a nbr+=2
set /a nbr_plus_un=%nbr%+1
set /a nbr_plus_deux=%nbr%+2
set /a nbr_plus_trois=%nbr%+3
if not defined %nbr_plus_deux% if not defined %nbr_plus_trois% (
call:trace_segment !%nbr%! !%nbr_plus_un%! !1! !2!
exit /b
)
if defined %nbr% call:trace_segment !%nbr%! !%nbr_plus_un%! !%nbr_plus_deux%! !%nbr_plus_trois%!
goto loop_scan_variable


Tout ces codes sont inutilisables sans la fonction de tracage donc voici un code récapitulatif
Code:
@echo off
if defined __ goto hello
set __=.
call %0 %* | darkbox
set __=
pause>NUL
goto :eof
:hello
mode 1000,1000
pixelfnt 1
echo /c 0xc
call:trace_segment 100 0 421 600
call:trace_segment 100 600 421 600
call:trace_segment 100 0 100 600
echo /c 0xa
call:trace_carre 200 200 300
echo /c 0x2
call:trace_carre 200 200 100
echo /c 0x5
call:trace_rectangle 100 100 200 300
echo /c 0xd
call:trace_losange 100 150 200 300
call:trace_forme 750 300 500 500 250 300 275 200 350 150 450 150 500 300 550 150 650 150 725 200
pause>nul
:trace_forme
setlocal enabledelayedexpansion
set nbr=0
for %%a in (%*) do (
  set /a nbr+=1
  set !nbr!=%%~a
)
set nbr=-1
set /a nbr_plus_un=%nbr%+1
set /a nbr_plus_deux=%nbr%+2
set /a nbr_plus_trois=%nbr%+3
if not defined 1 exit /b
if not defined 2 exit /b
if not defined 3 exit /b
if not defined 4 exit /b
if not defined 5 exit /b
if not defined 6 exit /b
:loop_scan_variable
set /a nbr+=2
set /a nbr_plus_un=%nbr%+1
set /a nbr_plus_deux=%nbr%+2
set /a nbr_plus_trois=%nbr%+3
if not defined %nbr_plus_deux% if not defined %nbr_plus_trois% (
call:trace_segment !%nbr%! !%nbr_plus_un%! !1! !2!
exit /b
)
if defined %nbr% call:trace_segment !%nbr%! !%nbr_plus_un%! !%nbr_plus_deux%! !%nbr_plus_trois%!
goto loop_scan_variable
:trace_losange
setlocal
set x_un_losange=%1
set /a y_un_losange=%2+(%4/2)
set /a x_deux_losange=%1+(%3/2)
set y_deux_losange=%2
set /a x_trois_losange=%1+%3
set /a y_quatre_losange=%2+%4
call:trace_segment %x_un_losange% %y_un_losange% %x_deux_losange% %y_deux_losange%
call:trace_segment %x_deux_losange% %y_deux_losange% %x_trois_losange% %y_un_losange%
call:trace_segment %x_trois_losange% %y_un_losange% %x_deux_losange% %y_quatre_losange%
call:trace_segment %x_deux_losange% %y_quatre_losange% %x_un_losange% %y_un_losange%
endlocal
exit /b
:trace_rectangle
setlocal
set x_un_rectangle=%1
set y_un_rectangle=%2
set /a x_deux_rectangle=%x_un_rectangle%+%3
set /a y_deux_rectangle=%y_un_rectangle%+%4
call:trace_segment %x_un_rectangle% %y_un_rectangle% %x_deux_rectangle% %y_un_rectangle%
call:trace_segment %x_deux_rectangle% %y_un_rectangle% %x_deux_rectangle% %y_deux_rectangle%
call:trace_segment %x_deux_rectangle% %y_deux_rectangle% %x_un_rectangle% %y_deux_rectangle%
call:trace_segment %x_un_rectangle% %y_deux_rectangle% %x_un_rectangle% %y_un_rectangle%
endlocal
exit /b
:trace_carre
setlocal
set x_un_carre=%1
set y_un_carre=%2
set /a x_deux_carre=%x_un_carre%+%3
set /a y_deux_carre=%y_un_carre%+%3
call:trace_segment %x_un_carre% %y_un_carre% %x_deux_carre% %y_un_carre%
call:trace_segment %x_deux_carre% %y_un_carre% %x_deux_carre% %y_deux_carre%
call:trace_segment %x_deux_carre% %y_deux_carre% %x_un_carre% %y_deux_carre%
call:trace_segment %x_un_carre% %y_deux_carre% %x_un_carre% %y_un_carre%
endlocal
exit /b
:trace_segment
setlocal enabledelayedexpansion
set x_un=%1
set y_un=%2
set x_deux=%3
set y_deux=%4
set /a dx=%x_deux%-%x_un%
set /a dy=%y_deux%-%y_un%
if %dx% NEQ 0 (
 REM 1
   if %dx% GTR 0 (
    REM 2
      if %dy% NEQ 0 (
       REM 3
         if %dy% GTR 0 (
          REM 4
            if %dx% GEQ %dy% goto vecteur_oblique_proche_horizontale_dans_premier_octant
            REM 5
            if %dx% LSS %dy% goto vecteur_oblique_proche_verticale_dans_second_octant
            REM sinon 5
         )
         REM 4
         REM sinon 4
         set /a test_dy=-%dy%
         if %dx% GEQ !test_dy! goto vecteur_oblique_proche_horizontale_dans_huitieme_octant REM donc dy lss 0, dx gtr 0
         goto vecteur_oblique_proche_verticale_dans_septieme_octant
      )
      REM 3
      goto vecteur_horizontal_vers_droite REM dy = 0, dx gtr 0
   )
   REM 2
   REM dx lss 0
      if %dy% NEQ 0 (
         if %dy% GTR 0 (
            set /a test_dx=-%dx%
            if !test_dx! GEQ %dy% goto vecteur_oblique_proche_horizontale_dans_quatrieme_octant
            goto vecteur_oblique_proche_verticale_dans_troisieme_octant
         )
         REM dy LSS 0, dx LSS 0
            if %dx% LEQ %dy% goto vecteur_oblique_proche_horizontale_dans_cinquieme_octant
            goto vecteur_oblique_proche_verticale_dans_sixieme_octant
      )
      goto vecteur_horizontal_vers_gauche REM dy = 0, dx lss 0
)
 REM 1
 REM dx=0
   if %dy% NEQ 0 (
      if %dy% GTR 0 goto vecteur_vertical_croissant
      goto vecteur_vertical_decroissant REM dy LSS 0, dx = 0
   )
 exit /b

:vecteur_oblique_proche_horizontale_dans_premier_octant
set e=%dx%
set /a dx=%e%*2
set /a dy*=2
:loop_vecteur_oblique_proche_horizontale_dans_premier_octant
echo /g %x_un% %y_un% /a 219
set /a x_un+=1
if %x_un% EQU %x_deux% (
endlocal
exit /b
)
set /a e-=%dy%
if %e% LSS 0 (
   set /a y_un+=1
   set /a e+=%dx%
)
goto loop_vecteur_oblique_proche_horizontale_dans_premier_octant
:vecteur_oblique_proche_verticale_dans_second_octant
set e=%dy%
set /a dy=%e%*2
set /a dx*=2
:loop_vecteur_oblique_proche_verticale_dans_second_octant
echo /g %x_un% %y_un% /a 219
set /a y_un+=1
if %y_un% EQU %y_deux% (
endlocal
exit /b
)
set /a e-=%dx%
if %e% LSS 0 (
   set /a x_un+=1
   set /a e+=%dy%
)
goto loop_vecteur_oblique_proche_verticale_dans_second_octant
:vecteur_oblique_proche_horizontale_dans_huitieme_octant
set e=%dx%
set /a dx=%e%*2
set /a dy*=2
:loop_vecteur_oblique_proche_horizontale_dans_huitieme_octant
echo /g %x_un% %y_un% /a 219
set /a x_un+=1
if %x_un% EQU %x_deux% (
endlocal
exit /b
)
set /a e+=%dy%
if %e% LSS 0 (
   set /a y_un-=1
   set /a e+=%dx%
)
goto loop_vecteur_oblique_proche_horizontale_dans_huitieme_octant
:vecteur_oblique_proche_verticale_dans_septieme_octant
set e=%dy%
set /a dy=%e%*2
set /a dx*=2
:loop_vecteur_oblique_proche_verticale_dans_septieme_octant
echo /g %x_un% %y_un% /a 219
set /a y_un-=1
if %y_un% EQU %y_deux% (
endlocal
exit /b
)
set /a e+=%dx%
if %e% GTR 0 (
   set /a x_un+=1
   set /a e+=%dy%
)
goto loop_vecteur_oblique_proche_verticale_dans_septieme_octant
:vecteur_horizontal_vers_droite
echo /g %x_un% %y_un% /a 219
set /a x_un+=1
if %x_un% EQU %x_deux% (
endlocal
exit /b
)
goto vecteur_horizontal_vers_droite
:vecteur_oblique_proche_horizontale_dans_quatrieme_octant
set e=%dx%
set /a dx=%e%*2
set /a dy*=2
:loop_vecteur_oblique_proche_horizontale_dans_quatrieme_octant
echo /g %x_un% %y_un% /a 219
set /a x_un-=1
if %x_un% EQU %x_deux% (
endlocal
exit /b
)
set /a e+=%dy%
if %e% GEQ 0 (
   set /a y_un+=1
   set /a e+=%dx%
)
goto loop_vecteur_oblique_proche_horizontale_dans_quatrieme_octant
:vecteur_oblique_proche_verticale_dans_troisieme_octant
set e=%dy%
set /a dy=%e%*2
set /a dx*=2
:loop_vecteur_oblique_proche_verticale_dans_troisieme_octant
echo /g %x_un% %y_un% /a 219
set /a y_un+=1
if %y_un% EQU %y_deux% (
endlocal
exit /b
)
set /a e+=%dx%
if %e% LEQ 0 (
   set /a x_un-=1
   set /a e+=%dy%
)
goto loop_vecteur_oblique_proche_verticale_dans_troisieme_octant
:vecteur_oblique_proche_horizontale_dans_cinquieme_octant
set e=%dx%
set /a dx=%e%*2
set /a dy*=2
:loop_vecteur_oblique_proche_horizontale_dans_cinquieme_octant
echo /g %x_un% %y_un% /a 219
set /a x_un-=1
if %x_un% EQU %x_deux% (
endlocal
exit /b
)
set /a e-=%dy%
if %e% GEQ 0 (
   set /a y_un-=1
   set /a e+=%dx%
)
goto loop_vecteur_oblique_proche_horizontale_dans_cinquieme_octant
:vecteur_oblique_proche_verticale_dans_sixieme_octant
set e=%dy%
set /a dy=%e%*2
set /a dx*=2
:loop_vecteur_oblique_proche_verticale_dans_sixieme_octant
echo /g %x_un% %y_un% /a 219
set /a y_un-=1
if %y_un% EQU %y_deux% (
endlocal
exit /b
)
set /a e-=%dx%
if %e% GEQ 0 (
   set /a x_un-=1
   set /a e+=%dy%
)
goto loop_vecteur_oblique_proche_verticale_dans_sixieme_octant
:vecteur_horizontal_vers_gauche
echo /g %x_un% %y_un% /a 219
set /a x_un-=1
if %x_un% EQU %x_deux% (
endlocal
exit /b
)
goto vecteur_horizontal_vers_gauche
:vecteur_vertical_croissant
echo /g %x_un% %y_un% /a 219
set /a y_un+=1
if %y_un% EQU %y_deux% (
endlocal
exit /b
)
goto vecteur_vertical_croissant
:vecteur_vertical_decroissant
echo /g %x_un% %y_un% /a 219
set /a y_un-=1
if %y_un% EQU %y_deux% (
endlocal
exit /b
)
goto vecteur_vertical_decroissant


Pour un meilleur rendu je conseille d'utiliser pixelfnt.exe et darkbox Okay (avec batbox c'est assez lent)

Merci à tout ceux qui m'ont aidés dans la rubrique aide en programmation Mr. Green Mr. Green Mr. Green




______________________________________________________

Programme
Skype
Message Publicité 
PublicitéSupprimer les publicités ?


Montrer les messages depuis:
Répondre au sujet Page 1 sur 1
  



Index | créer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Copyright 2008 - 2016 // Batch