![]() |
1
33
您可以尝试对以任意角度旋转的椭圆使用参数化方程:
…其中椭圆有中心(H,K)半长轴A和半短轴B,并通过角度phi旋转。 然后,您可以对梯度=0进行区分和求解:
= & gt;
它会给你很多关于t的解(其中两个你感兴趣),把它插回到[1]中,得到最大值和最小值x。 重复〔2〕:
= & gt;
让我们尝试一个例子: 考虑(0,0)处的椭圆,a=2,b=1,由pi/4旋转: 〔1〕=gt;
〔3〕=gt;
= & gt;
我们对t=-0.4636和t=-3.6052感兴趣 所以我们得到:
和
|
![]() |
2
5
我发现了一个简单的公式 http://www.iquilezles.org/www/articles/ellipses/ellipses.htm (忽略Z轴)。 我大致是这样实现的:
|
![]() |
3
5
这是相对简单,但有点难解释,因为你没有给我们你的椭圆表示方式。有很多方法可以做到。 总之,一般的原理是这样的:不能直接计算轴对齐的边界框。但是,您可以计算X和Y中椭圆的极值作为二维空间中的点。 对于这一点,可以采用方程x(t)=Ellipse_方程(t)和y(t)=Ellipse_方程(t)。求出它的一阶导数,并求出它的根。因为我们要处理的是基于正前方三角法的椭圆。你应该得到一个方程,要么通过atan,acos或asin得到根。 提示:要检查您的代码,请尝试使用未计算的椭圆:您应该在0、pi/2、pi和3*pi/2处得到根。 对每个轴(x和y)都这样做。最多可以得到四个根(如果椭圆退化,例如其中一个半径为零,则更少)。计算根的位置,得到椭圆的所有端点。 现在你就快到了。获取椭圆的边界框就如同扫描这四个点以查找xmin、xmax、ymin和ymax一样简单。 顺便说一句,如果你找不到椭圆方程的话:试着把它简化为一个轴对齐的椭圆,它有一个中心,两个半径和围绕中心的旋转角度。 如果这样做,方程式会变成:
|
![]() |
4
4
布里安·约翰·尼尔森。 我已经将您的代码转录为c-椭圆角度现在是度数:
|
![]() |
5
2
我认为最有用的公式是这个。从原点的角度phi旋转的省略号有如下公式:
其中(h,k)是中心,a和b是长轴和短轴的大小,t从-pi到pi不等。 由此,您应该能够推导出T dx/dt或dy/dt为0的值。 |
![]() |
6
1
如果椭圆是由 焦点和偏心距 (对于由轴长度、中心和角度给出的情况,请参见用户1789690的回答)。 也就是说,如果焦点是(x0,y0)和(x1,y1),偏心率是e,那么
哪里
我从用户1789690和johan nilsson的答案中推导出公式。 |
![]() |
7
1
如果你使用OpenCV/C++,并且使用
|
![]() |
8
0
此代码基于上面提供的代码user1789690,但在Delphi中实现。我已经测试过了,据我所知,它是完美的。我花了一整天的时间寻找一个算法或一些代码,测试了一些不起作用的代码,我很高兴终于找到了上面的代码。我希望有人能发现这个有用。此代码将计算旋转椭圆的边界框。边界框是轴对齐的,不随椭圆旋转。半径是旋转椭圆之前的半径。
|
![]() |
9
0
这是我的函数,用于寻找紧配合矩形到任意方向的椭圆。 我有opencv rect和实现点: cg-椭圆中心 尺寸-椭圆长轴、短轴 椭圆的角度-方向
|
![]() |
Muhammad Umer · 为什么这个随机数猜谜游戏模拟产生5.8 6 月前 |
![]() |
Alisa Petrova · 在有向图中更改一对顶点以创建循环 7 月前 |
|
D W · Python-将浮点数从2转换为10到100位小数 8 月前 |
![]() |
Bartol · 确定python龟图形中的角度 1 年前 |
|
randomAlgo · 将弹簧设置为相同长度的成本最低 1 年前 |
![]() |
Fyodor · 在C中使用sin和cos计算数学表达式不正确? 1 年前 |
![]() |
Sergio · python中大量数字的乘法 1 年前 |