Processing 不在“中”的鼠标下绘制;处理「;

Processing 不在“中”的鼠标下绘制;处理「;,processing,mouse,draw,Processing,Mouse,Draw,我想通过拖动鼠标在一个位置绘制,并在画布中心周围的三个位置绘制线,包括光标下的一个位置。我正在使用以下代码,它确实绘制了3条线,但没有一条线在鼠标光标下: void setup(){ 大小(300300);} 作废提款(){ 平移(宽度/2,高度/2); 如果(鼠标按下) 对于(int i=0;i您必须考虑与translate()和rotate()调用相关的点在哪里 首先进行平移,使原点位于屏幕的中心,而不是左上角。因此,所有点都需要相对于中心,而不是相对于左上角 要调试它,我首先要摆脱for循

我想通过拖动鼠标在一个位置绘制,并在画布中心周围的三个位置绘制线,包括光标下的一个位置。我正在使用以下代码,它确实绘制了3条线,但没有一条线在鼠标光标下:

void setup(){
大小(300300);}
作废提款(){
平移(宽度/2,高度/2);
如果(鼠标按下)

对于(int i=0;i您必须考虑与
translate()
rotate()
调用相关的点在哪里

首先进行平移,使原点位于屏幕的中心,而不是左上角。因此,所有点都需要相对于中心,而不是相对于左上角

要调试它,我首先要摆脱
for
循环,只需画一个点或一条线:

void setup() {
  size(300, 300);
}

void draw() {
  translate(width/2, height/2); 
  if (mousePressed) {
    line(width/2 -mouseX,  height/2 -mouseY, 
      width/2 -pmouseX, height/2 -pmouseY);
  }
}
你会发现这是关闭的,这意味着你计算线位置的逻辑是错误的。你可以用它来注意一个模式,你可以考虑一些例子

中心点是
150150
。因此,如果鼠标位于
160160
,我们应该在什么位置绘制该点?记住它是相对于
150150
,因此
160160
变为
10,10

换句话说,我们从鼠标中减去中心,以确定在何处绘制点

但是你的代码从鼠标的中心减去鼠标,这是向后的

如果你将来有类似的问题,我强烈建议你通过思考例子点的过程,找出它们应该去哪里


注意:我知道你的代码是根据我的答案编写的,这是我的错。我的顺序错了,但在你的另一个问题中没有关系,因为你翻译了4次(所以鼠标光标被覆盖了)。

你必须考虑你的点相对于
translate()
rotate()
呼叫

首先进行平移,使原点位于屏幕的中心,而不是左上角。因此,所有点都需要相对于中心,而不是相对于左上角

要调试它,我首先要摆脱
for
循环,只需画一个点或一条线:

void setup() {
  size(300, 300);
}

void draw() {
  translate(width/2, height/2); 
  if (mousePressed) {
    line(width/2 -mouseX,  height/2 -mouseY, 
      width/2 -pmouseX, height/2 -pmouseY);
  }
}
你会发现这是关闭的,这意味着你计算线位置的逻辑是错误的。你可以用它来注意一个模式,你可以考虑一些例子

中心点是
150150
。因此,如果鼠标位于
160160
,我们应该在什么位置绘制该点?记住它是相对于
150150
,因此
160160
变为
10,10

换句话说,我们从鼠标中减去中心,以确定在何处绘制点

但是你的代码从鼠标的中心减去鼠标,这是向后的

如果你将来有类似的问题,我强烈建议你通过思考例子点的过程,找出它们应该去哪里


注意:我意识到你的代码是根据我的答案编写的,所以这是我的错。我的顺序错了,但在你的另一个问题中这并不重要,因为你翻译了4次(所以鼠标光标被覆盖了).

请注意,在人们花时间回答问题后删除这些问题有点不礼貌。这会降低人们将来帮助你的可能性:(这是一个愚蠢的错误,一个简短的评论就足够了。我现在试着看看是否可以取消删除它,但现在已经没有了。我发现你的许多其他帖子也非常有用。请注意,在人们花时间回答问题后删除这些问题有点粗鲁。这会降低人们帮助你的可能性。)在未来。:(这是一个愚蠢的错误,一个简短的评论就足够了。我现在试着看看是否可以取消删除它,但它不再可用。我发现你的许多其他帖子也非常有用。