我正在尝试为随机三角形实现扫描线填充算法,给出3个点作为数组和颜色。我得到了一些奇怪的结果。请忽略代码的优化,我只是想让它工作,然后尝试优化它。我有一种方法,它使用Bresenham线算法绘制线条。 我无法弄清楚为什么我会得到这些结果。 http://postimg.org/image/qh1sdizwv/
var dx1;
var dx2;
var dx3;
var S= new Int32Array([0,0]);
var E= new Int32Array([0,0]);
var A=new Int32Array([0,0]);
var B=new Int32Array([0,0]);
var C=new Int32Array([0,0]);
var xmin = Math.min(v0[0],v1[0],v2[0]);
var xmax = Math.max(v0[0],v1[0],v2[0]);
var ymin = Math.min(v0[1],v1[1],v2[1]);
var ymax = Math.max(v0[1],v1[1],v2[1]);
/*A,B and C are points sorted by y-coordinates
A[1] is ymin, C[1] is ymax
S is for start, E is for end*/
if((ymin==v0[1]) && (ymax==v2[1])){
A[0]=v0[0];
A[1]=v0[1];
B[0]=v1[0];
B[1]=v1[1];
C[0]=v2[0];
C[1]=v2[1];
}
if((ymin==v0[1]) && (ymax==v1[1])){
A[0]=v0[0];
A[1]=v0[1];
B[0]=v2[0];
B[1]=v2[1];
C[0]=v1[0];
C[1]=v1[1];
}
if((ymin==v1[1]) && (ymax==v2[1])){
A[0]=v1[0];
A[1]=v1[1];
B[0]=v0[0];
B[1]=v0[1];
C[0]=v2[0];
C[1]=v2[1];
}
if((ymin==v1[1]) && (ymax==v0[1])){
A[0]=v1[0];
A[1]=v1[1];
B[0]=v2[0];
B[1]=v2[1];
C[0]=v0[0];
C[1]=v0[1];
}
if((ymin==v2[1]) && (ymax==v0[1])){
A[0]=v2[0];
A[1]=v2[1];
B[0]=v1[0];
B[1]=v1[1];
C[0]=v0[0];
C[1]=v0[1];
}
if((ymin==v2[1]) && (ymax==v1[1])){
A[0]=v2[0];
A[1]=v2[1];
B[0]=v0[0];
B[1]=v0[1];
C[0]=v1[0];
C[1]=v1[1];
}
if(B[1]-A[1] >0)
dx1=((B[0]-A[0])/(B[1]-A[1]));
else
dx1=0;
if(C[1]-A[1] >0)
dx2=((C[0]-A[0])/(C[1]-A[1]));
else
dx2=0;
if(C[1]-B[1] >0)
dx3=((C[0]-B[0])/(C[1]-B[1]));
else
dx3=0;
S[0]=A[0];
S[1]=A[1];
E[0]=A[0];
E[1]=A[1];
if(dx1>dx2){
for(;S[1]<=B[1]; S[1]++, E[1]++, S[0]=S[0]+dx2, E[0]=E[0]+dx1)
bresenhamAlg(S,E,color);
E[0]=B[0];
E[1]=B[1];
for(;S[1]<=C[1]; S[1]++, E[1]++, S[0]=S[0]+dx2, E[0]=E[0]+dx3)
bresenhamAlg(S,E,color);
}
else{
for(;S[1]<=B[1]; S[1]++, E[1]++, S[0]=S[0]+dx1, E[0]=E[0]+dx2)
bresenhamAlg(S,E,color);
S[0]=B[0];
S[1]=B[1];
for(;S[1]<=C[1]; S[1]++, E[1]++, S[0]=S[0]+dx3, E[0]=E[0]+dx2)
bresenhamAlg(S,E,color);
}