JavaScript
var drawLimit = 1;
function drawTriangle(t,x1,y1,x2,y2,x3,y3,c){
//line
if((x1==x2&&x2==x3)||(y1==y2&&y2==y3)) return false;
if(sPoint(x1,y1,x2,y2)||sPoint(x3,y3,x2,y2)||sPoint(x1,y1,x3,y3)) return false;
//point
if((Math.abs(x1-x2)+Math.abs(x2-x3)+Math.abs(x3-x1)<=drawLimit)&&(Math.abs(y1-y2)+Math.abs(y2-y3)+Math.abs(y3-y1)<=drawLimit))
return drawPixel(t,Math.min(x1,x2,x3),Math.min(y1,y2,y3),c);
if(y1>y2) return drawTriangle(t,x2,y2,x1,y1,x3,y3,c);
if(y1>y3) return drawTriangle(t,x3,y3,x2,y2,x1,y1,c);
if(y2>y3) return drawTriangle(t,x1,y1,x3,y3,x2,y2,c);
x1=Math.round(x1);x2=Math.round(x2);x3=Math.round(x3);
y1=Math.round(y1);y2=Math.round(y2);y3=Math.round(y3);
//y1<=y2<=y3
if(y1==y2){
if(x1>x2) return drawTriangle(t,x2,y2,x1,y1,x3,y3,c);
if(x3>=x1&&x3<=x2) return drawLineTriangle(t,x1,y1,x2-x1,x3-x1,y3-y1,3,c);
if(x3>x2){
var yc=y1+(y3-y1)/(x3-x1)*(x2-x1);
return (drawLineTriangle(t,x1,y1,x2-x1,x2-x1,yc-y1,3,c)+drawTriangle(t,x2,y2,x2,yc,x3,y3,c))>0;
}else{
var yc=y2+(y3-y2)/(x2-x3)*(x2-x1);
return (drawLineTriangle(t,x1,y1,yc-y1,0,x2-x1,2,c)+drawTriangle(t,x1,y1,x3,y3,x1,yc,c))>0;
}
}
//y1<y2<=y3
if(y2==y3){
if(x2>x3) return drawTriangle(t,x1,y1,x3,y3,x2,y2,c);
if(x1>=x2&&x1<=x3) return drawLineTriangle(t,x2,y1,x3-x2,x1-x2,y2-y1,1,c);
if(x1>x3){
var yc=y1+(y2-y1)/(x1-x2)*(x1-x3);
return (drawLineTriangle(t,x2,yc,x3-x2,x3-x2,y3-yc,1,c)+drawTriangle(t,x1,y1,x3,yc,x3,y3,c))>0;
}else{
var yc=y1+(y3-y1)/(x3-x1)*(x2-x1);
return (drawLineTriangle(t,x2,yc,x3-x2,0,y2-yc,1,c)+drawTriangle(t,x1,y1,x2,yc,x2,y2,c))>0;
}
}
//y1<y2<y3
if(x2<=x1&&x1<x3){
var xc=x1+(x3-x1)/(y3-y1)*(y2-y1);
return (drawLineTriangle(t,x2,y1,xc-x2,x1-x2,y2-y1,1,c)+drawTriangle(t,x2,y2,xc,y2,x3,y3,c))>0;
}
...