Fixed the vector calculation. You can now draw gradiation rectangles.

However there is still some work needed :

-Some crash when the calculation gives something outside the range (clipping will probably do the trick)
-Divide by zero or something nasty like that when doing a vertical vector
-Some vector give horizontal gradiation... maybe because all the calculations are done with integers
-The operation handler still need some work : rigt click for cancelling, displaying the selected rectangle properly.


git-svn-id: svn://pulkomandy.tk/GrafX2/trunk@302 416bcca6-2ee7-4201-b75f-2eb2f807beb1
This commit is contained in:
Adrien Destugues 2008-10-23 06:59:11 +00:00
parent cef61562d0
commit 468af075c3

12
graph.c
View File

@ -5197,17 +5197,21 @@ void Tracer_rectangle_degrade(short RAX,short RAY,short RBX,short RBY,short VAX,
Degrade_Intervalle_total = sqrt(pow(VBY - VAY,2)+pow(VBX - VAX,2));
short a = (VBY - VAY)/(VBX - VAX);
short b = a * VAX - VAY;
short b = VAY - a*VAX;
short Distance_X, Distance_Y;
DEBUG("inttotal",Degrade_Intervalle_total);
for (Pos_Y=RAY;Pos_Y<RBY;Pos_Y++)
for (Pos_X = RAX;Pos_X<RBX;Pos_X++)
{
// On calcule ou on en est dans le dégradé
Distance_X = VAX - ((Pos_X - a*b + a*Pos_Y) / (1+a*a));
Distance_Y = VAY - (b + a*(Pos_X - b + a * Pos_Y) / (1+a*a));
Distance_X = pow(Pos_Y - VAY,2)+pow(Pos_X - VAX,2);
Distance_Y = pow(-a * Pos_X + Pos_Y - b,2)/(a*a+1);
printf("%d\t%d\t%d\n",Pos_X,Distance_X,Distance_Y);
Traiter_degrade(sqrt(Distance_X*Distance_X + Distance_Y*Distance_Y),Pos_X,Pos_Y);
Traiter_degrade(sqrt(Distance_X - Distance_Y),Pos_X,Pos_Y);
}
Mettre_Ecran_A_Jour(RAX,RAY,RBX,RBY);