好的,所以在这里几乎没有受到关注,我得出的结论是,这种方法只需要从头开始编写并继续执行。我不完全确定发布我的专有代码会有多大帮助,但如果有人可以使用它,我会发布它的基本思想。由于 Pen 实用程序本质上是一堆线条,而线条是一堆 from 和 to,我创建了一个我称为 FPen(用于 FunctionPen)的对象,它接受 from 和 to 的指令。在定义 FPen 时,您可以传递它从哪里开始以及要走多远,无论您需要多少次,就是这样。一旦您通过了这些说明,我创建了另一个名为returnGPen(Color c)
它将随时使用它手头的指令并生成所需的 GPen 对象。当您想移动整个 GPen 时,您可以创建一个名为的方法adjustOrigin(double oX, double oY);
,该方法将计算先前记录的原点和这个新原点的变化,并通过指令列表并适当地调整它们。
我对这门课的需求仅限于我的绘图程序,也没有完全完成,但它确实适用于大多数用途。
import acm.graphics.GPen;
import java.awt.Color;
import java.util.ArrayList;
public class FPen{
private double relativeCenterX;
private double relativeCenterY;
private ArrayList<Double> fromX = new ArrayList<Double>();
private ArrayList<Double> fromY = new ArrayList<Double>();
private ArrayList<Double> distX = new ArrayList<Double>();
private ArrayList<Double> distY = new ArrayList<Double>();
public FPen(double rX, double rY, double z){
relativeCenterX = rX;
relativeCenterY = rY;
}
public void adjustOrigin(double cX, double cY){
double changeX = relativeCenterX-cX;
double changeY = relativeCenterY-cY;
for(int i = 0; i < fromX.size(); i++){
fromX.set(i,fromX.get(i)+changeX*zoom);
fromY.set(i,fromY.get(i)-changeY*zoom);
}
relativeCenterX = cX;
relativeCenterY = cY;
}
public void clear(){
fromX.clear();
fromY.clear();
distX.clear();
distY.clear();
}
public void drawLine(double fX, double fY, double tX, double tY){
fromX.add(fX);
fromY.add(fY);
distX.add(tX);
distY.add(tY);
}
public GPen returnGPen(Color c){
GPen pen = new GPen();
pen.setColor(c);
for(int i = 0; i < fromX.size(); i++){
pen.setLocation(fromX.get(i),fromY.get(i));
pen.drawLine(distX.get(i),distY.get(i));
}
return pen;
}
}
当然,由此产生的一个意想不到的好处是,我现在可以通过为每个绘图例程创建不同的方法并调用我感兴趣的方法来快速基准测试不同的绘图例程。