我试图写一个显示向量的类。如果我创建一个矢量对象,一切都按预期工作。在我的示例代码中,对象lin1
在draw()
函数的帮助下绘制。
如果我现在创建第二个矢量对象,则(未更改的)绘制函数不再执行任何操作,即使对象本身未更改。反之亦然:第二个对象是唯一存在的对象,然后可以绘制,但只有lin1
不存在。
有谁知道我的错误在哪里?
vector lin;
vector lin2;
void setup()
{
size(500,500);
background(255);
cenX = width/2;
cenY = height/2;
noLoop();
}
void draw()
{
coordSys();
lin = new vector(0,0,100,100);
lin2 = new vector(0,0,-200,-200);
lin.draw();
lin2.draw();
lin.getAll();
}
class vector
{
float x1,y1,x2,y2;
float length;
float angle;
float gegenK, anK;
vector(float nx1, float ny1, float nx2, float ny2)
{
translate(cenX,cenY);
x1 = nx1; y1 = -ny1; x2 = nx2; y2 = -ny2;
strokeWeight(2);
// Gegenkathete
gegenK = ny2 - ny1;
// Ankathete
anK = x2 - x1;
// length and angle
length = sqrt(sq(anK) + sq(gegenK));
angle = winkel(gegenK, anK);
}
void draw()
{
stroke(0);
line(x1,y1,x2,y2);
}
}
}
答案 0 :(得分:0)
编写代码时请使用标准命名约定。具体来说,您的班级应为Vector
,大写为V.此外,请以编译并运行的MCVE形式发布您的代码。
无论如何,Vector()
构造函数中的第一个调用就是:
translate(cenX,cenY);
这会将窗口的原点移动到窗口的中间位置。当您执行此操作一次时,这只会使您的绘图调用相对于窗口的中心。但是当你这样做两次时,它会将原点移动到窗口的右下角,因此所有的绘图都会移出屏幕边缘。
要解决您的问题,您需要移动此行,使其仅发生一次(可能在draw()
函数的开头)而不是每次绘制Vector
。另一种方法是使用pushMatrix()
和popMatrix()
函数来避免这种窗口翻译的堆叠。