Как сохранить определенную позицию мыши для использования в качестве исходной точки - PullRequest
0 голосов
/ 30 октября 2019

В настоящее время я работаю над кодом для соединения эллипсов со строками. Я был в состоянии соединить каждый эллипс с предыдущим. Однако я не могу соединить последний эллипс и оригинальный (первый) эллипс. Я хотел бы создать массив, который будет

Эллипсы нарисованы с центром, являющимся координатами, где была нажата мышь.

(Использование обработки для кодирования этой программы)

PS: извините за плохое форматирование вопроса, я впервые задаю запрос.

Я исследовал, как использовать массивы, но это все еще немного сбивает меня с толку, и поэтому яиспользуя одиночные целые числа для каждой точки в настоящий момент.

//SET GLOBAL VARIABLES
final int N_PARTITIONS = 10;
int PrevX = -1;
int PrevY = -1;
int count = 0;
int gridx = 0;
int gridy = 0;
int OriginalX = mouseX;
int OriginalY = mouseY;

//CREATING WINDOW SIZE
void setup() {
    size(600, 360);
    surface.setResizable(true);
}

void draw() { 

}

//DRAWING ELLIPSE AND CONNECTING LINES
void mouseClicked() {
    count++;
    CallEllipse();
    if (PrevX != -1) {
        line(PrevX, PrevY, mouseX, mouseY);
    }
    if (count >= 3) {
        line(OriginalX, OriginalY, PrevX, PrevY);
    }
    PrevX = mouseX;
    PrevY = mouseY;
}

void CallEllipse() {
    ellipse(mouseX, mouseY, N_PARTITIONS, N_PARTITIONS);
}

это результат кодирования. Я не уверен, почему линия идет из верхнего левого угла.

Ответы [ 2 ]

0 голосов
/ 03 ноября 2019

Вы должны сделать все рисование в draw(). Все, что вам нужно сделать в обратном вызове mousePressed(), это добавить новую точку в список точек. Примечание draw() вызывается непрерывно. Это основной цикл приложения. В начале розыгрыша вы должны установить фоновый цвет окна на background(). После этого вы должны нарисовать все линии и точки в петлях. например:

//set global variables
final int N_PARTITIONS = 10;
int count = 0;
int max_point = 100;
PVector[] Vector = new PVector[max_point];

//CREATING WINDOW SIZE
void setup() {
    size(600, 360);
}

void mousePressed() {
    if (count < max_point) {
        int tile_width  = width / N_PARTITIONS;
        int tile_height = height / N_PARTITIONS;
        int x = round(mouseX / (float)tile_width) * tile_width;
        int y = round(mouseY / (float)tile_height) * tile_height;
        Vector[count] = new PVector(x, y);
        count++;
    }
}

void draw() {
    background(255);
    grid();

    // draw the lines in a loop 
    strokeWeight(3);
    stroke(0);
    for (int i = 0; i < count; ++ i) {
        int i2 = (i+1) % count;
        line(Vector[i].x, Vector[i].y, Vector[i2].x, Vector[i2].y); 
    }

    // draw points in a loop
    strokeWeight(1);
    stroke(0);
    fill (255);
    for (int i = 0; i < count; ++i) {
        circle(Vector[i].x, Vector[i].y, 10);
    }
}

void grid() {
    int gridx = 0;
    int gridy = 0;
    while(gridx < width & gridy < height) {
        stroke(195);
        line(gridx, 0, gridx, height);
        line(0, gridy, width, gridy);
        gridx += width/N_PARTITIONS;
        gridy += height/N_PARTITIONS;
    }
}
0 голосов
/ 30 октября 2019

попробуйте добавить этот код в методе mouseClicked():

void mouseClicked() {
     if(count == 0) {
        OriginalX= mouseX;
        OriginalY=mouseY;
     }
      count++;
              CallEllipse();
             if (PrevX != -1) {
                 line(PrevX, PrevY, mouseX, mouseY);
             }
             if (count >= 3) {
               line(OriginalX, OriginalY, mouseX, mouseY);
             }
      PrevX = mouseX;
      PrevY = mouseY;
    }

Наслаждайтесь

...