我想创建一个Android应用程序,其中使用扫描线多边形填充算法来填充它。
我已经按行绘制了多边形。
绘制了4行。
我使用过此代码.....
类DrawView扩展了View {
Paint paint = new Paint();
public DrawView(Third_Activity third_Activity) {
super((Context) third_Activity);
paint.setColor(Color.RED);
paint.setStrokeWidth(5);
}
@Override
public void onDraw( Canvas canvas) {
super.onDraw(canvas);
canvas.drawLine(250, 100, 100, 402, paint);
canvas.drawLine(99, 400, 150, 500, paint);
canvas.drawLine(150, 500, 300, 600, paint);
canvas.drawLine(300, 600, 250, 100, paint);
a[0][0]=250;
a[0][1]=100;
a[1][0]=100;
a[1][1]=402;
a[2][0]=99;
a[2][1]=400;
a[3][0]=150;
a[3][1]=500;
a[4][0]=150;
a[4][1]=500;
a[5][0]=300;
a[5][1]=600;
a[6][0]=250;
a[6][1]=100;
a[7][0]=150;
a[7][1]=500;
for(i=0;i<7;i++)
{
dy=a[i+1][1]-a[i][1];
dx=a[i+1][0]-a[i][0];
if(dy==0)
slope[i]=(float) 1.0;
if(dx==0)
slope[i]=(float) 0.0;
if((dy!=0)&&(dx!=0))
{
slope[i]=(float)dx/dy;
}
}
for(y=0;y<900;y++)
{
k=0;
for(i=0;i<7;i++)
{
if(((a[i][1]<=y) && (a[i+1][1]>y)) || ((a[i][1]>y) && (a[i+1][1]<=y)))
{
xi[k]=(int)(a[i][0]+slope[i] *(y-a[i][1]));
k++;
}
}
for(j=0;j<k-1;j++)
for(i=0;i<k-1;i++)
{
if(xi[i]>xi[i+1])
{
temp=xi[i];
xi[i]=xi[i+1];
xi[i+1]=temp;
}
}
for(int p=0;p<10;p++)
{
canvas.drawLine(100,700, 200, 700, paint);
for(i=0;i<k;i+=2)
{
canvas.drawLine(xi[i],y,xi[i+1],y,paint);
}
}
}
}
}
输出不准确..
我希望在画线时延迟填充多边形......
谢谢