Как разделить линию на несколько отрезков? - PullRequest
2 голосов
/ 04 марта 2011

Я пытаюсь разделить линию на несколько сегментов. Из-за этого я создал функцию ниже, чтобы попытаться получить подпункты между двумя точками. Это не совсем работает, но почти там. В идеале я хотел бы использовать что-то вроде этого:

subPoint(point1, point2, 5, 10);  // this would return the half way point
subPoint(point1, point2, 1, 10);  // this would return a point 1 tenth towrds point2

Вот приблизительный код ниже - любые советы или указатели очень приветствуются.

Vector subPoint(Vector startPoint, Vector endPoint, int segment, int totalSegments) {

  int division = (int)(totalSegments / segment);

  PVector divPoint = new PVector();

  int midX=(int)(startPoint.x+((endPoint.x-startPoint.x)/division));
  int midY=(int)(startPoint.y+((endPoint.y-startPoint.y)/division));

  divPoint.set(midX, midY, 0);

  return(divPoint);
}

Ответы [ 4 ]

5 голосов
/ 04 марта 2011

Попробуйте заменить ваши расчеты следующим:

int midX = (startPoint.x + (int) ((double) (endPoint.x - startPoint.x) / (double) totalSegments) * segment);
int midY = (startPoint.y + (int) ((double) (endPoint.y - startPoint.y) / (double) totalSegments) * segment);

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

2 голосов
/ 04 марта 2011

Спасибо Крису за помощь. Вот полная функция подпункта Обработка / Java-код, которая теперь работает для всех, кому она может понадобиться.

PVector subPoint(PVector startPoint, PVector endPoint, int segment, int totalSegments) {

  PVector p1 = new PVector();

  float midX = (startPoint.x + (int) ((double) (endPoint.x - startPoint.x) / (double) totalSegments) * segment);
  float midY = (startPoint.y + (int) ((double) (endPoint.y - startPoint.y) / (double) totalSegments) * segment);

  p1.set(midX, midY, 0);   

  return(p1);
}
2 голосов
/ 04 марта 2011

Вы используете целочисленную математику.Возможно, ваш Вектор должен использовать плавающие или двойные вместо?

1 голос
/ 04 марта 2011

Мне нравится эта строка

int Division = totalSegments = сегмент;

Но я сомневаюсь, что вы хотите сохранить его :-) (не знаю, есть ли еще ошибки).

...