1

截屏

嘿,我想Mat::at()在 OpenCV 中使用点坐标在平行于一侧的对称线上反射一个三角形。所以我只是将 Point2d P 反映在一条由三角形顶点 P1、P2 组成的线上。

问题是我得到了一些奇怪的模式,我无法摆脱它们。我使用双打来提高精度,但没有帮助。

有任何想法吗?

if(P1.x-P2.x) //P1P2 is not vertical
{
    double a=((P2.y-P1.y)/static_cast<double>(P2.x-P1.x));
    double b=P1.y-a*P1.x;    //symmetry line y=ax+b
    double a1=0,b1=0;
    if(a)
    {
        a1=-1/a; // y=a1x+b1 perpendicular to y=ax+b
        b1=P.y-a1*P.x;
        double xc=(b1-b)/(a-a1); // ax+b=a1x+b1
        P.x= 2*xc-P.x;
        P.y=a1*P.x+b1;
    }
    else    //P1P2 is horizontal
    {
        P.y=2.0*P1.y-P.y;
        
    }
}
else  //P1P2 is vertical
{
    
    P.x=2*P1.x-P.x;
}
4

0 回答 0