我想通过拖动鼠标在一个地方绘制并在画布中心周围的3个位置绘制线条,包括光标本身下面的一条线。我正在使用下面的代码,它绘制了3行但没有一行在鼠标光标下:
void setup(){
size(300, 300); }
void draw() {
translate(width/2, height/2);
if(mousePressed)
for(int i=0; i<3; i++){
line(width/2 -mouseX, height/2 -mouseY,
width/2 -pmouseX, height/2 -pmouseY);
rotate(2*PI/3); }}
如何更正此代码,以便一个图形在鼠标光标下方,另外两个图形相应地旋转?
答案 0 :(得分:0)
您必须考虑与Starting up
The count is 1
---------------
The count is 2
---------------
The count is 3
---------------
The count is 4
---------------
The count is 5
---------------
The count is 6
---------------
The count is 7
---------------
The count is 8
---------------
The count is 9
---------------
The count is 10
---------------
Finishing up
和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);
}
}
。因此,如果鼠标位于150,150
,我们应该在什么位置绘制点?请记住它与160,160
相关,因此150,150
变为160,160
。
换句话说,我们从鼠标中减去中心以找出绘制点的位置。
但是你的代码会从中心减去鼠标,这是向后的。
如果您将来遇到类似的问题,我强烈建议您仔细考虑示例点并弄清楚应该去哪里。方格纸是你最好的朋友,有这样的东西。
注意:我意识到您的代码是基于your other question的答案,所以这是我的不好。我的订单错了,但是在你的另一个问题中没有关系,因为你翻译了4次(所以无论如何鼠标光标都被覆盖了。)