c++ - 如何计算旋转椭圆点的切线?
问题描述
我通过使用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) 结果是错误的,我猜是角度计算问题,但我不知道如何解决。有人能帮我吗 ?
解决方案
推荐阅读
- javascript - 额外的传奇礼物
- jquery - FormData 未提交复选框值
- opengl - 渲染多个对象而不重叠的最佳解决方案
- stripe-payments - 按钮的功能不像按钮,这个 Stripe 生成的代码存在什么错误?
- android - 如何确保在通过 JS 桥从 ReactActivity 发送消息之前加载 JS 模块?
- c# - BackgroundService 是否总是在新线程中运行
- applescript - 如何使用 Apple Script 从状态栏中单击应用程序中的按钮
- xml - `xmlstarlet sel`的“开始和结束标签不匹配”
- laravel - 为 CNAME URL 应用 Lets Encrypt SSL Laravel Forge
- wordpress - Wordpress 自定义帖子类型动态重写 URL