2017-11-11 244 views
0

縮放由點組成的曲線的最佳算法是什麼?例如:如何縮放由點組成的曲線?

Curve line (A): 
o    
o    
    o   o o 
    o   o  o  o o 
    o  o  o o o 
    o  o   o o  o 
     o o 

如果曲線(A)按比例縮小5%,則它看起來像這樣。

Output: 

o 
o  o o 
    o  o o o o 
    o o  o o o 
    o o 

如果曲線(A)縮放10%,則它看起來像這樣。

o    
o    
    o     
    o    
    o    o o  
    o    o  o  o o  
     o   o  o o  o 
     o   o   o o  o 
     o  o 
     o  o 
      o o 

我只是想知道的算法,概念或如何解決它的想法,但要使它更清晰的這裏是我想實現一些Java代碼。

class CurveLine 
{ 
    public static ArrayList<float[]> getScaledCurveLine 
    (float[][] curveLine, float percentage, bool enlarged) 
    { 
     ArrayList<float[]> scaledCurveLine = new ArrayList<float[]>(); 
     /* 
       Some Algorithm for Scaling Curve Line 
     */ 
     return scaledCurveLine; //new set of points 
    } 

    public static void main (string args[]) 
    { 
     float [][] curveLine = new float[20][2]; //set of points 
     curveLine[0][0] = 0; //x1 
     curveLine[0][1] = 5; //y1 
     curveLine[1][0] = 1; //x2 
     //and so on.. 

     ArrayList<float[]> largerCurveLine = getScaledCurveLine(curveLine, 20, true); 
     ArrayList<float[]> smallerCurveLine = getScaledCurveLine(curveLine, 20, false); 
    } 
} 

我讀了一些算法,如縮放點「最近鄰插值」,但我不知道如果我在正確的道路上:(。

我迫切需要知道該怎麼辦這傢伙:(在此先感謝。

+1

'點* = 0.95'或'點* = 1.1' - 一些語言標記或代碼可以給出一個真實的答案。 – Marco13

+0

感謝@ Marco13的迴應..我放了一些java代碼使其更清晰。謝謝。 – Techreator

+0

在您的示例中,縮小比例的曲線包含的點數少於原始點數,並且上調了一個點數。但是你沒有指定那些規則(例如,用相同的因子來縮放點的數量,使它們在x中保持等距,......)。如果沒有這樣的規則,@ Marco13的方法,保留所有的要點,並單獨移動它們,是我能想象的最簡單和最準確的解決方案。 –

回答

0

如果我得到你的問題正確的你基本上要在不改變點密度調整折線(曲線)。

  1. 近似/擬合曲線來匹配你的多段線

    如果你有很多分數比你應該做這種分段(例如使用4點立方體)。如果你有一些原始折線數據,你可以記住原始多段線作爲任何進一步重採樣的曲線,以避免在每個調整大小上進行擬合。

    更多信息請參見How can i produce multi point linear interpolation?

    使用曲線的多項式程度取決於你所需要的連續性。對於基本圖形的東西4點立方體就足夠了。但是如果你需要的話,更高的衍生物也比你需要使用更高的度數更平滑。

  2. 乘上來看,所有曲線的控制點

    在您使用的是向量自定義曲線的情況下成倍他們太......如果你想要做更復雜的轉換或重新調整在不同的每個軸比你應該採樣後,在步驟#3中應用此步驟。因爲如果在控制點和曲線點上完成這些轉換,將會產生不同的結果。

  3. 樣品新的折線

    所以簡單地在由新點密度(步驟參數),並使用您的曲線迭代產生的點作爲新的折線。

    如果您正在應用轉換#2在這一步中參數步驟也會受到比例的影響。

    在參數爲t=<0,1>的分段曲線的情況下,您需要從t開始,下一條曲線的值與最後一條曲線相同。所以一旦t穿越1.0,您將轉向下一條曲線,並應以t-1.0參數起始值開始。

    如果您需要比您需要更精確的密度來找到距離最後一個精確距離而非恆定參數增量的曲線上的點。

這裏是什麼,我腦子裏的這一切速寫:

sketch

+0

這就是我很感謝的:) – Techreator

相關問題