Batch Index du Forum
S’enregistrerRechercherFAQMembresGroupesConnexion
Répondre au sujet Page 1 sur 1
Problème avec mon algorithme pour faire des ovales
Auteur Message
Répondre en citant
Message Problème avec mon algorithme pour faire des ovales 
Bonjour,

Gros problème avec mon algorithme pour faire des ovales

une valeur telle que a=100 et b=50 fonctionne très bien mais par exemple a=300 b=130 foire completement et au plus haut les valeurs haut pire le résultat

Quelqu'un saurait-il m'aider s'il vous plait ?

Code:
@echo off
if defined __ goto hello
set __=.
call %0 %* | darkbox
set __=
pause>NUL
goto :eof
:hello
title Draw ellipse Bresenham
mode con cols=1000 lines=900
pixelFNT.exe 1
set x_pos=0
set y_pos=0
REM Sets de base
set a=900
set b=300
REM Sets pour calculs
set /a a_carre=%a%*%a%
set /a b_carre=%b%*%b%
set /a a_b=%a%*%b%
set /a dix_b=10*%b%
set /a dix_a=10*%a%
set /a cent_b=100*%b%
set x=0
set y=%b%
set /a dix_b_carre=%dix_b%*%dix_b%
set /a a_carre_cent_b=%a_carre%*%cent_b%
set /a dix_a_carre=%dix_a%*%dix_a%
set /a dix_a_carre_divise_quatre=%dix_a_carre%/4
set /a d_un=%dix_b_carre%-%a_carre_cent_b%+%dix_a_carre_divise_quatre%
REM 1ere phase
:loop_1
echo /g %x% %y% /a 219
set /a cent_y=100*%y%
set /a cent_x=100*%x%
set /a cent_y_moins_cinqante=%cent_y%-50
set /a cent_x_plus_cent=%cent_x%+100
set /a a_carre_cent_y_moins_cinqante=%a_carre%*%cent_y_moins_cinqante%
set /a b_carre_cent_x_plus_cent=%b_carre%*%cent_x_plus_cent%
if %a_carre_cent_y_moins_cinqante% LEQ %b_carre_cent_x_plus_cent% goto 2iemephase
set /a deux_cent_x=200*%x%
set /a deux_cent_x_plus_trois_cent=%deux_cent_x%+300
set /a b_carre_deux_cent_x_plus_trois_cent=%b_carre%*%deux_cent_x_plus_trois_cent%
set /a moins_deux_cent_y=-200*%y%
set /a moins_deux_cent_y_plus_deux_cent=%moins_deux_cent_y%+200
set /a a_carre_moins_deux_cent_y_plus_deux_cent=%a_carre%*%moins_deux_cent_y_plus_deux_cent%
if %d_un% GEQ 0 goto calcul_1
set /a d_un+=%b_carre_deux_cent_x_plus_trois_cent%
set /a x+=1
goto loop_1
REM 2ieme phase
:2iemephase
set /a dix_x=10*%x%
set /a dix_x_plus_cinq=%dix_x%+5
set /a dix_x_plus_cinq_carre=%dix_x_plus_cinq%*%dix_x_plus_cinq%
set /a b_carre_dix_x_plus_cinq_carre=%b_carre%*%dix_x_plus_cinq_carre%
set /a dix_y=10*%y%
set /a dix_y_moins_dix=%dix_y%-10
set /a dix_y_moins_dix_carre=%dix_y_moins_dix%*%dix_y_moins_dix%
set /a a_carre_dix_y_moins_dix_carre=%a_carre%*%dix_y_moins_dix_carre%
set /a dix_a_carre_b_carre=%dix_a_carre%*%b_carre%
set /a d_deux=%b_carre_dix_x_plus_cinq_carre%+%a_carre_dix_y_moins_dix_carre%-%dix_a_carre_b_carre%
:loop_2
echo /g %x% %y% /a 219
if %y% EQU 0 goto end
set /a moins_deux_cent_y=-200*%y%
set /a moins_deux_cent_y_plus_trois_cent=%moins_deux_cent_y%+300
set /a a_carre_moins_deux_cent_y_plus_trois_cent=%a_carre%*%moins_deux_cent_y_plus_trois_cent%
if %d_deux% LSS 0 goto calcul_2
set /a d_deux+=%a_carre%*%moins_deux_cent_y_plus_trois_cent%
set /a y-=1
goto loop_2
:calcul_1
set /a d_un=%d_un%+%b_carre_deux_cent_x_plus_trois_cent%+%a_carre_moins_deux_cent_y_plus_deux_cent%
set /a x+=1
set /a y-=1
goto loop_1
:calcul_2
set /a deux_cent_x=200*%x%
set /a deux_cent_x_plus_deux_cent=%deux_cent_x%+200
set /a b_carre_deux_cent_x_plus_deux_cent=%b_carre%*%deux_cent_x_plus_deux_cent%
set /a d_deux=%d_deux%+%b_carre_deux_cent_x_plus_deux_cent%+%a_carre_moins_deux_cent_y_plus_trois_cent%
set /a x+=1
set /a y-=1
goto loop_2
:end
pause>nul
:trace
goto:eof


Merci d'avance Okay



Dernière édition par programme le Jeu 5 Avr 2018 - 13:10; édité 1 fois

______________________________________________________

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


Répondre en citant
Message Problème avec mon algorithme pour faire des ovales 
J'ai trouvé ce qu'il ne va pas mais je sais pas pourquoi Question Question Question Exclamation Crying or Very sad Crying or Very sad

Alors ce qu'il se passe c'est que en entrant une valeur de plus de 300 à a ou de plus de 127 à b les calculs:
Code:
set /a a_carre_cent_y_moins_cinqante=%a_carre%*%cent_y_moins_cinqante%
ET
set /a b_carre_cent_x_plus_cent=%b_carre%*%cent_x_plus_cent%


Ne vont plus

par exemple meme dans une fenetre cmd normale ceci
Code:
set /a hello=122500*19950

me donne ça "-1851092296" et pas ca 2443875000 alors pourquoi je ne sais pas...

Quelqu'un a une idée ?
ou une autre maniere de faire...

Je sais que je pourrais diviser mes calculs par 10 car dans la 1ere phase il n'y a pas besoin de multiplier par 100 mais seulement par 10 mais ca pose quand meme problème avec les nombres plus grands

Merci d'avance,




______________________________________________________

Programme
Skype
Répondre en citant
Message Problème avec mon algorithme pour faire des ovales 
Salut

J'ai l'impression que tu arrives sur une limitation du batch...
La valeur maximale d'un entier est (de mémoire) un truc genre 2^31 soit en gros 2100000000
Ta multiplication cause un dépassement de mémoire d'où la valeur négative que tu obtient.

Désolé par contre, j'ai rien à te proposer comme alternative à par un peu de ruse ou d'utiliser dos9 Very Happy

Bonne journée



Visiter le site web du posteur Skype
Message Problème avec mon algorithme pour faire des ovales 


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