嘿,我想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;
}