gpt4 book ai didi

java - 创建第二个对象使类的函数不再起作用

转载 作者:太空宇宙 更新时间:2023-11-04 11:31:30 25 4
gpt4 key购买 nike

我正在尝试编写一个显示 vector 的类。如果我创建一个 vector 对象,一切都会按预期进行。在我的示例代码中,对象 lin1draw() 函数的帮助下绘制。

如果我现在创建第二个 vector 对象,(未更改的)绘图函数不再执行任何操作,即使该对象本身未更改。反之亦然:如果第二个对象是唯一存在的,则可以绘制它,但前提是 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);
}
}
}

最佳答案

编写代码时请使用标准命名约定。具体来说,您的类应该是带有大写 V 的 Vector。另外,请以 MCVE 的形式发布您的代码。编译并运行。

无论如何,Vector() 构造函数中的第一个调用是这样的:

translate(cenX,cenY);

这会将窗口的原点移动到窗口的一半。当您执行此操作一次时,这只会使您的绘图调用相对于窗口的中心。但是,当您执行此操作两次时,它会将原点移动到窗口的右下角,因此所有绘图都会移出屏幕边缘。

要解决您的问题,您需要移动此行,使其仅发生一次(可能在 draw() 函数的开头),而不是每次绘制 Vector 时发生。解决此问题的另一种方法是使用 pushMatrix()popMatrix() 函数来避免窗口转换的这种堆叠。

关于java - 创建第二个对象使类的函数不再起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43723913/

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