Extremely Fast Line Algorithm Variation C (Addition)
Copyright 2001-2, By Po-Han Lin
The following is the source for the Extremely Fast Line Algorithm Variation
C (Addition).
Return to Line Algorithms
// Extremely Fast Line Algorithm Var C (Addition)
// Copyright 2001-2, By Po-Han Lin
// Freely useable in non-commercial applications as long as credits
// to Po-Han Lin and link to http://www.edepot.com is provided in source
// code and can been seen in compiled executable. Commercial
// applications please inquire about licensing the algorithms.
//
// Lastest version at http://www.edepot.com/phl.html
// used by myLine
void myPixel(SURFACE* surface, int x,int y) {
// PLOT x,y point on surface
}
// THE EXTREMELY FAST LINE ALGORITHM Variation C (Addition)
void myLine(SURFACE* surface, int x, int y, int x2, int y2) {
bool yLonger=false;
int incrementVal, endVal;
int shortLen=y2-y;
int longLen=x2-x;
if (abs(shortLen)>abs(longLen)) {
int swap=shortLen;
shortLen=longLen;
longLen=swap;
yLonger=true;
}
endVal=longLen;
if (longLen<0) {
incrementVal=-1;
longLen=-longLen;
} else incrementVal=1;
double decInc;
if (longLen==0) decInc=(double)shortLen;
else decInc=((double)shortLen/(double)longLen);
double j=0.0;
if (yLonger) {
for (int i=0;i!=endVal;i+=incrementVal) {
myPixel(surface,x+(int)j,y+i);
j+=decInc;
}
} else {
for (int i=0;i!=endVal;i+=incrementVal) {
myPixel(surface,x+i,y+(int)j);
j+=decInc;
}
}
}
void mySquare(SURFACE* surface,int x, int y, int x2, int y2) {
myLine(surface,x,y,x2,y2);
myLine(surface,x2,y2,x2+(y-y2),y2+(x2-x));
myLine(surface,x,y,x+(y-y2),y+(x2-x));
myLine(surface,x+(y-y2),y+(x2-x),x2+(y-y2),y2+(x2-x));
}
void myRect(SURFACE* surface, int x, int y, int x2, int y2) {
myLine(surface,x,y,x2,y);
myLine(surface,x2,y,x2,y2);
myLine(surface,x2,y2,x,y2);
myLine(surface,x,y2,x,y);
}