我试图通过拖动鼠标(例如,左上象限中的一个圆圈)在一个地方进行绘图,并使图形出现在画布中心周围的4个位置(包括鼠标光标下的一个右侧)。我试过以下代码:
int x=0;
int y=0;
void setup(){
size(400, 400);
background(255);
translate(width/2, height/2);
}
void draw() {
}
void mouseDragged(){
translate(width/2, height/2);
for(int i=0; i<4; i++){
rotate(PI/2);
x= mouseX ; y=mouseY;
line(x, y, mouseX, mouseY);
}
}但是,该图形不会在鼠标光标下绘制。如果我离左上角很近,线就画在画布的中央。
第二,在我尝试的过程中,总共画了5个数字,而不是4个。如果我接近左上角,多余的图形会出现在画布的右下角。这个不需要的数字比其他数字要小得多。
错误在哪里,如何纠正这两个问题?我想通过旋转命令(在画布的中心旋转)来实现这一点,尽管我看到我也可以使用转换命令在画布上的4个位置进行绘制。
谢谢你的帮助。
发布于 2017-01-31 03:20:09
没有一个点在鼠标下面,因为在绘制点之前,您正在将画布(到width/2, height/2)进行转换,但是您正在使用mouseX, mouseY来绘制它们。把mouseX, mouseY看作是从左上角到X和Y的距离.如果你想要一个点在鼠标下面,你必须使用从你翻译到的点的距离!
换句话说,不是这样的:
x = mouseX;
y = mouseY;你想要这个
x = width/2 - mouseX;
y = height/2 - mouseY;至于正在绘制的额外点,这似乎是使用mouseDragged()函数的副作用。这里发生了一些奇怪的事情,但是您可以通过使用draw()函数和mousePressed变量而不是mouseDragged()函数来解决这个问题。
编辑:,我改变了他们应该遵守的顺序。看看我对你的next question的答案,以获得更好的解释。
https://stackoverflow.com/questions/41949018
复制相似问题