gpt4 book ai didi

java - 绘图问题 - 从其他形状绘制复合形状

转载 作者:行者123 更新时间:2023-12-01 04:49:45 24 4
gpt4 key购买 nike

所以我有一份大学作业。这个概念是我们要完成一些类层次结构的东西。基本上它是让我们能够绘制不同形状的东西。

我可以成功绘制每个形状;我需要它在哪里以及我需要它有多大,就像需要的一样......我遇到麻烦的部分是这个复合层次结构。

基本上,我们应该有一个名为 Compound.java 的新类,并从中扩展我们应该有其他三个类,Housetree 地球;每个类都应该采用我们创建的形状对象(矩形、正方形、直线、椭圆形和圆形)并绘制类名所示的所需图片。

我遇到问题的地方是在类里面;例如:我可以让它绘制一个矩形,但是当我尝试让它绘制第二个矩形后,它基本上忘记了第一个,只绘制第二个!

我们还没有任何图形方面的练习,所以我不知道任何可以调用来绘制然后在 House 构造函数中继续的方法或任何内容。

我明白为什么它会覆盖第一个矩形,当调用 House 构造函数时,它会遍历构造函数中的所有内容,然后返回到 Compound.java 并使用 draw(Graphics g) 方法绘制它....

但我不知道如何解决它!如有任何帮助,我们将不胜感激...明天截止。

这是所有代码:

Shape.java:

import java.awt.*;

public abstract class Shape {
int initX, initY;
Color fillColour;

public Shape() {
initX = 0;
initY = 0;
}

public Shape(int x, int y) {
initX = x;
initY = y;
}

public void setInitX (int x) {
initX = x;
}

public void setInitY (int y) {
initY = y;
}

public abstract void draw(Graphics g);
public abstract double Area();
public abstract double Perimeter();

public void Move(int deltaX, int deltaY){
//future work
}

}

ClosedShape.java:

import java.awt.Graphics;

public abstract class ClosedShape extends Shape {
boolean polygon;
int numPoints;
int[] xVertices;
int[] yVertices;
int x,y,width, height;

public ClosedShape(boolean isPolygon, int numPoints) {
super(0,0);
this.polygon = isPolygon;
this.numPoints = numPoints;
}

public ClosedShape(boolean isPolygon, int numPoints, int[] x, int[] y) {
super(x[0],y[0]);
this.polygon = isPolygon;
if (isPolygon) {
this.numPoints = numPoints;
xVertices = new int[numPoints]; // error check? if x.length == numPoints
for (int i = 0; i < x.length; i++) { // make copy of array: why?
xVertices[i] = x[i];
}
yVertices = new int[numPoints]; // error check? if y.length == numPoints
for (int i = 0; i < y.length; i++) { // make copy of array
yVertices[i] = y[i];
}
}
else { // its an oval - define bounding box
this.numPoints = 4;
this.x = x[0];
this.y = y[0];
width = x[1];
height = y[1];
}
}

public void setXYCoords(int[] x, int[] y){
this.xVertices = x;
this.yVertices = y;
}

// Gives access to the width attribute
public void setWidth(int width){
this.width = width;
}

// Gives access to the height attribute
public void setHeight(int height) {
this.height = height;
}

public void draw(Graphics g) {
if (polygon) {
g.drawPolygon(xVertices, yVertices, numPoints);
}
else {
g.drawOval(x, y, width, height);
}

}

public abstract double Area();
public abstract double Perimeter();








}

矩形.java:

public class Rectangle extends ClosedShape
{

public Rectangle(int x, int y, int width, int height)
{
super(true, 4);

setWidth(width);
setHeight(height);

int [] arrayX = new int[4];
arrayX[0] = x;
arrayX[1] = (x+width);
arrayX[2] = (x+width);
arrayX[3] = x;

int [] arrayY = new int[4];
arrayY[0] = y;
arrayY[1] = y;
arrayY[2] = y+height;
arrayY[3] = y+height;

setXYCoords(arrayX, arrayY);

}

public double Area()
{
return 0;
}

public double Perimeter()
{
return 0;
}

}

Compound.java:

import java.awt.*;
import java.awt.Graphics;


public class Compound
{
boolean polygon;
int[] xVertices;
int[] yVertices;
int initX, initY;
Color fillColour;

public void setXYCoords(int[] x, int[] y)
{
this.xVertices = x;
this.yVertices = y;
}

public void draw(Graphics g)
{
if (polygon) {
g.drawPolygon(xVertices, yVertices, 4);
}
else {
g.drawOval(1, 1, 1, 1);
}

}

}

House.java:

import java.awt.*;
import java.awt.Graphics;


public class House extends Compound
{

public House(int x, int y, int width, int height)
{

int [] arrayX = new int[4];
arrayX[0] = x;
arrayX[1] = (x+width);
arrayX[2] = (x+width);
arrayX[3] = x;

int [] arrayY = new int[4];
arrayY[0] = y;
arrayY[1] = y;
arrayY[2] = y+height;
arrayY[3] = y+height;

setXYCoords(arrayX, arrayY);
this.polygon = true;

Rectangle house = new Rectangle(x, y, width, height);

int [] arrayXTwo = new int[4];
arrayXTwo[0] = x+(width/4);
arrayXTwo[1] = x+(2*(width/4));
arrayXTwo[2] = x+(2*(width/4));
arrayXTwo[3] = x+(width/4);

int [] arrayYTwo = new int[4];
arrayYTwo[0] = y+(height/4);
arrayYTwo[1] = y+(height/4);
arrayYTwo[2] = y+height;
arrayYTwo[3] = y+height;

setXYCoords(arrayXTwo, arrayYTwo);
this.polygon = true;

Rectangle door = new Rectangle(x, y, width, height);

}


}

最佳答案

从您的示例代码中,无法将任何形状“添加”到 Compound 类中。根据您的描述,Compound 应该是形状的“容器”。更多类似的事情......

public class Compound
{
private List<Shape> shapes;

public Compound() {
shapes = new ArrayList<Shape>(25);
}

public void addShape(Shape shape) {
shapes.add(shape);
}

public Iterable<Shape> getShapes() {
return shape;
}

public void draw(Graphics g) {
for (Shape shape : shapes) {
shape.draw(g);
}
}
}

现在您需要决定,如果为形状本身定义颜色,那么将 ColorShape 关联到哪里最好?这意味着您无法重复使用该形状。或者使用复合形状?

关于java - 绘图问题 - 从其他形状绘制复合形状,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15194218/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com