2017-02-01 22 views
1

Я хочу нарисовать в одном месте, перетащив мышь и нарисую линию в 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); }} 

Как я могу исправить этот код, так что один рисунок прямо под курсором мыши и другие 2 вращаются соответственно ?

+0

Просто голова, это немного грубо, чтобы удалить вопросы после того, как люди нашли время ответить на них. Это делает меньше шансов, что люди помогут вам в будущем. :( –

+0

Это была глупая ошибка, для которой короткого комментария было бы достаточно. Я попробовал теперь посмотреть, смогу ли я восстановить его, но он больше недоступен. Я нашел много других ваших сообщений также очень полезным. – rnso

ответ

0

Вы должны думать о том, где ваши очки относятся к вашим звонкам 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 становится 10,10.

Другими словами, мы вычитаем центр от мыши, чтобы выяснить, где рисовать точку.

Но ваш код вычитает мышь из центра, который находится назад.

Если у вас есть подобные проблемы в будущем, я настоятельно рекомендую пройти через процесс мышления примерных точек и выяснить, куда они должны идти. Графическая бумага - ваш лучший друг с такими вещами.

Примечание: Я понимаю, что вы меняете код с моего ответа на your other question, так что это плохо. Я получил неправильный порядок, но это не имело значения в вашем другом вопросе, потому что вы переводили 4 раза (так что курсор мыши все равно был закрыт).