find shifted coordinate in skewed square

人走茶凉 提交于 2019-12-12 03:22:28

问题


I have square, I know the X,Y coordinate for the (A,B,C,D) each, coordinate for (E,F,G,H) and the position for the circle inside first box (I,J).

so ..

I want to find the coordinates for the same circle inside the second box .. base on all the data have.


回答1:


You need to find the transform from the first box to the second

B=T*A

so you need to find T which is a 3x3 matrix if this is on the plane

solve the equations as shown on this page http://andrew.gibiansky.com/blog/image-processing/image-morphing/

and he has the program too - you only need three points from the first quadrangle and the corresponding three points in the second quadrangle

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

then apply T to any point on A to get the corresponding point on 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;
}


来源:https://stackoverflow.com/questions/34852981/find-shifted-coordinate-in-skewed-square

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!