2011-03-03 225 views
2

我试图将一条线分成多个部分。正因为如此,我在下面创建了一个函数来尝试获取两点之间的子点。这不是很有效,但几乎在那里。理想情况下,我想用这样的事情:如何将一条线分成多个线段?

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

回答

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

我转化为了使计算稍微更准确的值双打。您可能需要考虑将这些值保持为双倍值,因为这可以提高线段的准确性。

+0

这很好,感谢您的帮助! – 2011-03-03 21:52:06

2

您正在使用整数数学。也许你的Vector应该使用浮动或双打?

+0

问题是除法是一个整数,但应该是一个浮点数,midX/Y应该是浮点数。 – 2011-03-03 21:30:08

1

我喜欢这个线

INT除法= totalSegments =段;

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

2

感谢Kris的帮助。以下是完整的subPoint函数处理/ 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); 
}