如何将一条线分成多个线段?

时间:2011-03-03 21:13:26

标签: java geometry processing

我正在尝试将一条线分成多个部分。因为我在下面创建了一个函数来尝试获得两点之间的子点。它不是很有效,但几乎就在那里。理想情况下,我想使用这样的东西:

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 个答案:

答案 0 :(得分:5)

尝试使用以下内容替换您的计算:

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);

我将值转换为双精度值,以使计算更加准确。您可能需要考虑将值保持为双精度,这样可以在线段上提供更好的准确性。

答案 1 :(得分:2)

你正在使用整数数学。也许你的Vector应该使用花车或双打?

答案 2 :(得分:2)

感谢Kris的帮助。这是完整的子点函数Processing / 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);
}

答案 3 :(得分:1)

我喜欢这一行

  

int division = totalSegments = segment;

但我怀疑你想保留它:-)(不知道是否有更多的错误)。