在paint方法实现中减少了多边形的大小

时间:2013-02-14 17:18:33

标签: java applet drawing polygon paint

我在JAVA小程序中创建了一个程序。程序绘制一个带有4个随机生成点的多边形A,然后绘制另一个带有4个随机生成的点B的多边形。 在此之后,它比较每个多边形的每个点,看它们是否相同。如果不是,请说A[0] > B[0]然后A[0]--。直到旧多边形A的所有点都成为新的多边形B。然后重复一遍。

所以我遇到的问题是,由于某种原因,多边形只是越来越小。

这是我的代码:

package some.package.games;

import java.applet.Applet;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Color;
import java.awt.Polygon;
import java.awt.geom.GeneralPath;
import java.awt.image.BufferedImage;
import java.awt.image.ImageProducer;
import java.util.Random;

public class graphics extends Applet implements Runnable
{
    public boolean isRunning = false;
    protected BufferedImage mBuffer;
    protected boolean comparaisonFinni = false;
    protected Polygon polygonCourant = createNewPolygon();
    protected Graphics2D mGraphics;
    protected Dimension mDimension;
    protected int mFPS = (1000 / 9);

    public void start()
    {
        isRunning = true;
        new Thread(this).start();
    }
    public void stop()
    {
        isRunning = false;
    }

    public void init()
    {
        mDimension = getSize();
        mBuffer = (BufferedImage)createImage(mDimension.width, mDimension.height);  
        mGraphics = (Graphics2D)mBuffer.createGraphics();
    }

    public void paint(Graphics pGraphics)
    {
        pGraphics.clearRect(0, 0, mDimension.width, mDimension.height);


        Polygon polygonTmp = new Polygon();

        if (!comparaisonFinni)
            polygonTmp = createNewPolygon();


            for (int i = 0; i < 4; i++) 
            {
                if (polygonTmp.xpoints[i] < polygonCourant.xpoints[i])
                {
                    polygonCourant.xpoints[i]--;            
                }
                if (polygonTmp.xpoints[i] > polygonCourant.xpoints[i])
                {
                    polygonCourant.xpoints[i]++;
                }
                if ( polygonTmp.ypoints[i] < polygonCourant.ypoints[i])
                {
                    polygonCourant.ypoints[i]--;
                }
                if ( polygonTmp.ypoints[i] > polygonCourant.ypoints[i])
                {
                    polygonCourant.ypoints[i]++;
                }
                if ((polygonCourant.xpoints[0] == polygonTmp.xpoints[0]) && (polygonCourant.xpoints[1] == polygonTmp.xpoints[1]) &&
                        (polygonCourant.xpoints[2] == polygonTmp.xpoints[2]) && (polygonCourant.xpoints[3] == polygonTmp.xpoints[3]) &&
                        (polygonCourant.ypoints[0] == polygonTmp.ypoints[0]) && (polygonCourant.ypoints[1] == polygonTmp.ypoints[1]) && 
                        (polygonCourant.ypoints[2] == polygonTmp.ypoints[2]) && (polygonCourant.ypoints[3] == polygonTmp.ypoints[3]))
                {
                    comparaisonFinni = true;
                }   
            }       
         pGraphics.drawPolygon(polygonCourant);


    }

    public Polygon createNewPolygon()
    {   
        Random aNumber = new Random();
        int x1Points[] = new int [4];
        int y1Points[] = new int [4];

        for (int i = 0; i < 4; i++) 
        {
            x1Points[i] = aNumber.nextInt(200);
            y1Points[i] = aNumber.nextInt(300);
        }

        Polygon lePolygon = new Polygon(x1Points, y1Points, 4);

        if (comparaisonFinni)
        {
            comparaisonFinni = false;
            polygonCourant = lePolygon;

        }

        return lePolygon;

    }
    public void update(Graphics pGraphics)
    {
        paint(pGraphics);
    }

    public void run() 
    {
        while (isRunning)
        {
            repaint();
            try
            { Thread.sleep(mFPS); }
            catch (InterruptedException pException)
            { pException.printStackTrace(); }
        }
    }

}

1 个答案:

答案 0 :(得分:0)

你在那里随机使用。例如,xpoints被创建为nextInt(200)。

public Polygon createNewPolygon()
{   
    Random aNumber = new Random();
    int x1Points[] = new int [4];
    int y1Points[] = new int [4];

    for (int i = 0; i < 4; i++) 
    {
        x1Points[i] = aNumber.nextInt(200);
        y1Points[i] = aNumber.nextInt(300);
    }

    Polygon lePolygon = new Polygon(x1Points, y1Points, 4);

    if (comparaisonFinni)
    {
        comparaisonFinni = false;
        polygonCourant = lePolygon;

    }

    return lePolygon;

}

nextInt(200)是一个均匀分布的随机值,平均值= 100.这意味着所有xpoints缓慢移向100的值。不确定这是否是你的想法。

同样适用于ypoints。他们走向150.

因此,当然,您会看到多边形在点(100,150)附近缩小。