2016-01-18 33 views
0

我有方形,我知道(A,B,C,D)的X,Y座標分別爲(E,F,G,H)和圓的位置在第一個盒子裏(I,J)。在傾斜方塊中找到移位座標

所以..

我想找到的所有數據對第二個盒子裏面同一個圓..基地的座標。

here is the image

回答

1

你需要找到* A

,所以你需要找到t內是3×3矩陣,如果這是在從第一箱轉換到第二

B =ŧ飛機

求解方程此頁所示http://andrew.gibiansky.com/blog/image-processing/image-morphing/

和他有過計劃 - 你LY需要從第一四邊形的三個點和對應的三分在第二四邊形

private static float[] calculateTransform(Polygon pOriginal, Polygon pFinal){ 
    float a = pFinal.xpoints[0]; 
    float b = pFinal.ypoints[0]; 
    float c = pFinal.xpoints[1]; 
    float d = pFinal.ypoints[1]; 
    float e = pFinal.xpoints[2]; 
    float f = pFinal.ypoints[2]; 

    float A = pOriginal.xpoints[0]; 
    float B = pOriginal.ypoints[0]; 
    float C = pOriginal.xpoints[1]; 
    float D = pOriginal.ypoints[1]; 
    float E = pOriginal.xpoints[2]; 
    float F = pOriginal.ypoints[2]; 

    float x = ((B-D)*(e-c) - (a-c)*(F-D))/((B-D)*(E-C) - (A-C)*(F-D)); 
    float y = (a*(E-C) + A*(c-e) - c*E + e*C)/(A*(D-F) + B*(E-C) + C*F - D*E); 
    float t = c - x*C - y*D; 

    float z = ((B-D)*(f-d) - (b-d)*(F-D))/((B-D)*(E-C) - (A-C)*(F-D)); 
    float w = (b*(E-C) + A*(d-f) - d*E + f*C)/(A*(D-F) + B*(E-C) + C*F - D*E); 
    float s = d - z*C - w*D; 

    float[] transform = {x, y, z, w, t, s}; 
    return transform; 
} 

然後應用噸至任何點上A到B上的對應點

private static float[] applyTransform(float x, float y, float[] transform){ 
    float a = transform[0]; 
    float b = transform[1]; 
    float c = transform[2]; 
    float d = transform[3]; 
    float t = transform[4]; 
    float s = transform[5]; 

    float p = a * x + b * y + t; 
    float q = c * x + d * y + s; 
    float[] result = {p, q}; 
    return result; 
} 
+0

謝謝你..我會嘗試它,你有4個座標不是3的功能! –