我在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(); }
}
}
}
答案 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)附近缩小。