From 816dc06152318b7aab7b63253bd9514174e569fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20Hord=C3=A9?= Date: Mon, 2 Apr 2007 14:05:40 +0000 Subject: [PATCH] =?UTF-8?q?feat:=20ensemble=20de=20fonctions=20permettant?= =?UTF-8?q?=20la=20r=C3=A9alisation=20de=20dessin=202D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/graph.c | 58 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 lib/graph.c diff --git a/lib/graph.c b/lib/graph.c new file mode 100644 index 0000000..8856668 --- /dev/null +++ b/lib/graph.c @@ -0,0 +1,58 @@ +#include "types.h" +#include "vga.h" +#include "video.h" +#include "graph.h" +#include "math.h" + +/******************************************************************************/ + +/* Affiche une ligne entre les points spécifiés */ + +void line(u32 x1, u32 y1, u32 x2, u32 y2, u8 color) +{ + s32 dx,dy,sdx,sdy; + u32 i,dxabs,dyabs,x,y,px,py; + + dx=x2-x1; /* distance horizontale de la line */ + dy=y2-y1; /* distance verticale de la line **/ + dxabs=abs(dx); + dyabs=abs(dy); + sdx=sgn(dx); + sdy=sgn(dy); + x=dyabs>>1; + y=dxabs>>1; + px=x1; + py=y1; + + writepxl(px,py,color); + + if (dxabs>=dyabs) /* la ligne est plus horizontale que verticale */ + { + for(i=0;i=dxabs) + { + y-=dxabs; + py+=sdy; + } + px+=sdx; + writepxl(px,py,color); + } + } + else /* la ligne est plus verticale que horizontale */ + { + for(i=0;i=dyabs) + { + x-=dyabs; + px+=sdx; + } + py+=sdy; + writepxl(px,py,color); + } + } +} +