如何在Android应用程序中实现扫描线多边形填充算法?

时间:2014-03-21 20:40:05

标签: android polygon

我想创建一个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);

                 }   
             }

          }

    }

}

输出不准确..

我希望在画线时延迟填充多边形......

谢谢

0 个答案:

没有答案