Значения координат не сохраняются при обработке - PullRequest
0 голосов
/ 28 июня 2018

Я действительно понятия не имею, почему значения x и y не идут в функцию drawLines

float x, x1, x2;
float y, y1, y2;
float rad; //radius
int lines = 30; //number of lines
int colorNumber = 1;

void setup() {
  background(#FFFFFF);
  size (800, 600);
  rad = 8;
}

void draw() {
}

Это создает три точки или вершины математического конверта

void mouseClicked() {
  float x = mouseX;
  float x1 = mouseX;
  float x2 = mouseX;
  float y = mouseY;
  float y1 = mouseY;
  float y2 = mouseY;
  if (colorNumber == 1) {
    fill(#9393ff);
    ellipse(x, y, rad, rad);
  } else if (colorNumber == 2) {
    fill(#FF9393);
    ellipse(x1, y1, rad, rad);
  } else if (colorNumber == 3) {
    fill(#93ff93);
    ellipse(x2, y2, rad, rad);
  }
}

Предполагается нарисовать конверт, используя координаты вершин

void drawLines(int numLines) {
  for (int i = 0; i < numLines; i = i + 1) {
    float x = mouseX;
    float x1 = mouseX;
    float x2 = mouseX;
    float y = mouseY;
    float y1 = mouseY;
    float y2 = mouseY;
    float t = (float) i/(numLines-1); 
    float startX = x + t * (x1 - x);
    float startY = y + t * (y1 - y);
    float endX = x1 + t * (x2 - x1);
    float endY = y1 + t * (y2 - y1);
    line (startX, startY, endX, endY);
  }
}

void mouseReleased() {
  colorNumber++; 
  if (colorNumber == 4) {
    colorNumber = 1;
  }
  println(colorNumber);
}

void keyPressed() {
  if (keyPressed == true) {
    background(#FFFFFF);
  }
}

этот последний материал просто сообщает коду, если вы нажмете клавишу, он сбросит фон

1 Ответ

0 голосов
/ 01 июля 2018

Я понимаю ваше намерение с помощью mouseX и mouseY указать координаты одной из 3 точек конверта при нажатии. В настоящее время проблема заключается в том, что все 3 точки устанавливаются на одну и ту же координату при каждом нажатии. Вам необходимо ввести переменную, чтобы отслеживать, какую координату устанавливать при нажатии, чтобы была установлена ​​только одна пара. Затем, только когда все 3 координаты установлены, вызывается drawLines ().

Я предлагаю следующее:

Введите 2 переменные, одну для отслеживания того, какая точка изменяется; другой массив PVectors (просто чтобы сделать его чище).

int index = 0;
PVector[] coords = new PVector[3];

Изменить mouseClicked () , включив в него следующее:

void mouseClicked() {

    ellipse(mouseX, mouseY, 8, 8);
    coords[index] = new PVector(mouseX, mouseY);
    index += 1;
    if (index == 3) {
        drawLines(lines);
    }
    index %= 3;
}

drawLines () становится:

void drawLines(int numLines) {

    for (int i = 0; i < numLines; i = i + 1) {
        x = coords[0].x;
        x1 = coords[1].x;
        x2 = coords[2].x;
        y = coords[0].y;
        y1 = coords[1].y;
        y2 = coords[2].y;
        float t = (float) i / (numLines - 1);
        float startX = x + t * (x1 - x);
        float startY = y + t * (y1 - y);
        float endX = x1 + t * (x2 - x1);
        float endY = y1 + t * (y2 - y1);
        line(startX, startY, endX, endY);
    }
}

Наконец, поскольку ваш рисунок на черном фоне, а цвет обводки по умолчанию черный, используйте strokeColour (), чтобы изменить цвет линий, чтобы вы могли видеть конверт после его отрисовки.

...