【问题标题】:How to calculate a rorate ellipse point's tangent?如何计算旋转椭圆点的切线?
【发布时间】: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) 结果是错误的,我猜是角度计算问题,但我不知道如何解决。有人可以帮我吗?

【问题讨论】:

  • 我注意到您尚未接受答案,但它确实解释了问题。

标签: c++ opencv math ellipse


【解决方案1】:

一张图抵千言:

您需要检查点是否位于椭圆之外(如果存在则使用opencv函数或使用椭圆方程)

【讨论】:

  • 不清楚(对我来说)这如何提供解决方案,即使图像暗示了问题。您能否提供更清晰的指导或更好的代码来帮助解决问题?
  • 给定点位于椭圆内,因此不存在切线。正切方程适用于外点,在这里没有意义。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-01
  • 2012-01-01
  • 1970-01-01
  • 2011-12-18
  • 2018-03-20
  • 1970-01-01
相关资源
最近更新 更多