我有一个绘制n代线条图案的程序。从第0代中的单个水平线开始,每个开放边缘用作另一垂直线的中点。图为n = 0,n = 1和n = 2的运行结果。 http://i.imgur.com/jM11wKG.jpg
我这样调用我的方法,其中x被初始化为屏幕的中心,步骤是步数。
paintComponent(g,x, Direction.HORIZONTAL, steps);
该方法产生预期输出并正确绘制线条。
public void paintComponent(Graphics g,Point point,Direction direction, int n){
if(n>=0){
//length*=multiplier;
double mid = length/2;
Point e1;
Point e2;
if(direction==Direction.HORIZONTAL){
e1 = new Point((int)(point.getX()-mid),(int)(point.getY()));
e2 = new Point((int)(point.getX()+mid),(int)(point.getY()));
g.drawLine((int)e1.getX(),(int)e1.getY(),(int)e2.getX(),(int)e2.getY());
direction = Direction.VERTICAL;
}
else{
e1 = new Point((int)(point.getX()),(int)(point.getY()-mid));
e2 = new Point((int)(point.getX()),(int)(point.getY()+mid));
g.drawLine((int)e1.getX(),(int)e1.getY(),(int)e2.getX(),(int)e2.getY());
direction = Direction.HORIZONTAL;
}
n--;
paintComponent(g,e1, direction, n);
paintComponent(g,e2, direction, n);
}
}
现在我试图在每一代/步之后用乘数改变线的长度。第一行将具有初始长度,然后长度将更新为长度* =在n = 1中添加的2行的乘数,再次更新为在n = 2中添加的4等。
我有一个问题定义是每个步骤实际结束的位置,所以我可以更新那里的长度。我无法在下面的位置更新它,因为每个步骤都会多次进入循环。我试过迭代一个计数变量,但我找不到放在哪里。
答案 0 :(得分:1)
如果你想改变你的线的长度,你需要改变点e1和e2,这样你的线是水平的,然后增加/减少你的e1.x和e2。 x根据你想要增加它或减少它的值,当它垂直改变时,只需要在调用g.drawline方法之前改变e1.y和e2.y. 对于更改点位置,您可以使用点类的translate方法,您需要根据要操作实际点的因子计算dx和dy的值。
希望这可以解决您的问题。