【问题标题】:Reduced size of polygons in the paint method implementation在绘制方法实现中减小了多边形的大小
【发布时间】:2013-02-14 17:18:33
【问题描述】:

我用 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 个多边形,而不是你提到的 2 个。
  • 哦。你有误解,或者我的解释不是很清楚。只有一个正在绘制的多边形。 polygonCourant 另一个 PolygonTmp 只是一个对象。目标是 polygonCourant 的每个点 s 缓慢地向它们的新位置移动(polygonTmp Points)

标签: java applet drawing polygon paint


【解决方案1】:

你在那里使用随机。例如,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) 周围收缩。

【讨论】:

  • 是的,因为我希望当前多边形 (PolygonCourant) 与新多边形 (PolygonTmp) 匹配
  • 我认为它与检查何时构建新多边形有关,但我还不太确定如何修复它
  • 没有人知道你想在这里画什么,但你可能不想每次都创建新的 polygonTmp。也许你想在 ifs 之后做其他事情。你必须说出你的目标是什么。
  • 好吧,我想随机绘制一个多边形 A,然后创建一个新的多边形 B。然后修改多边形 A 以匹配多边形 B。等等。
  • 你只是想随机移动这个多边形吗?或者你想让一个慢慢地移向另一个?
猜你喜欢
  • 2011-01-22
  • 2013-08-31
  • 1970-01-01
  • 1970-01-01
  • 2011-04-09
  • 2019-11-24
  • 2015-09-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多