【发布时间】:2021-12-24 11:27:55
【问题描述】:
我使用 fitEllipse 得到了一个旋转椭圆,我想计算这个椭圆上的点的正切,我试过这个:
static Line getTangent(const RotatedRect & ell, const Point & p)
{
// double rad = ell.angle*CV_PI/180;
// double a = ell.size.width/2;
// double b = ell.size.height/2;
// if(fabs(rad-CV_PI/2)<CV_PI/4)
// {
// rad -= CV_PI/2;
// b = ell.size.width/2;
// a = ell.size.height/2;
// }
double rad = (ell.angle-90)*CV_PI/180;
double a = ell.size.height/2;
double b = ell.size.width/2;
double cr = cos(rad);
double sr = sin(rad);
double s = ell.center.x;
double t = ell.center.y;
double k = - b*b / (a*a) * ((p.x-s)*cr+(p.y-t)*sr) / (-(p.x-s)*sr+(p.y-t)*cr);
return Line(k,p); // The line through p with grad k
}
椭圆 {center:(523.965, 525.291), size:{444.735 x 662.827}, angle:81.7087} 点 p(313, 713) 结果是对的,但是椭圆 {center:(638.93, 639.36), size :{572.964 x 787.908}, angle:6.27164} with point p(756, 985) 结果是错误的,我猜是角度计算问题,但我不知道如何解决。有人可以帮我吗?
【问题讨论】:
-
我注意到您尚未接受答案,但它确实解释了问题。