2011-03-03 30 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); 
}