Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Greenplum
Opencv
提交
09b01931
O
Opencv
项目概览
Greenplum
/
Opencv
大约 1 年 前同步成功
通知
7
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
O
Opencv
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
09b01931
编写于
11月 03, 2015
作者:
V
Viet Dinh
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
even more correct
calculates cube root of complex number to give more correct results.
上级
537a978d
变更
2
显示空白变更内容
内联
并排
Showing
2 changed file
with
20 addition
and
6 deletion
+20
-6
modules/core/src/mathfuncs.cpp
modules/core/src/mathfuncs.cpp
+18
-4
modules/core/test/test_math.cpp
modules/core/test/test_math.cpp
+2
-2
未找到文件。
modules/core/src/mathfuncs.cpp
浏览文件 @
09b01931
...
...
@@ -2524,12 +2524,13 @@ double cv::solvePoly( InputArray _coeffs0, OutputArray _roots0, int maxIters )
}
num
/=
denom
;
if
(
num_same_root
>
1
)
{
for
(
j
=
0
;
j
<
num_same_root
/
2
;
j
++
)
{
double
old_num_re
=
num
.
re
;
double
old_num_im
=
num
.
im
;
int
square_root_times
=
num_same_root
%
2
==
0
?
num_same_root
/
2
:
num_same_root
/
2
-
1
;
for
(
j
=
0
;
j
<
square_root_times
;
j
++
)
{
num
.
re
=
old_num_re
*
old_num_re
+
old_num_im
*
old_num_im
;
num
.
re
=
std
::
sqrt
(
num
.
re
);
num
.
re
+=
old_num_re
;
...
...
@@ -2541,6 +2542,19 @@ double cv::solvePoly( InputArray _coeffs0, OutputArray _roots0, int maxIters )
num
.
im
=
std
::
sqrt
(
num
.
im
);
if
(
old_num_re
<
0
)
num
.
im
=
-
num
.
im
;
}
if
(
num_same_root
%
2
!=
0
){
Mat
cube_coefs
(
4
,
1
,
CV_32FC1
);
Mat
cube_roots
(
3
,
1
,
CV_32FC2
);
cube_coefs
.
at
<
float
>
(
3
)
=
-
(
std
::
powf
(
old_num_re
,
3
));
cube_coefs
.
at
<
float
>
(
2
)
=
-
(
15
*
std
::
powf
(
old_num_re
,
2
)
+
27
*
std
::
powf
(
old_num_im
,
2
));
cube_coefs
.
at
<
float
>
(
1
)
=
-
48
*
old_num_re
;
cube_coefs
.
at
<
float
>
(
0
)
=
64
;
cv
::
solveCubic
(
cube_coefs
,
cube_roots
);
num
.
re
=
std
::
cbrt
(
cube_roots
.
at
<
float
>
(
0
));
num
.
im
=
std
::
sqrtf
(
std
::
powf
(
num
.
re
,
2
)
/
3
-
old_num_re
/
(
3
*
num
.
re
));
}
}
roots
[
i
]
=
p
-
num
;
...
...
modules/core/test/test_math.cpp
浏览文件 @
09b01931
...
...
@@ -2372,7 +2372,7 @@ TEST(Core_SolvePoly, regression_5599)
double
prec
;
prec
=
cv
::
solvePoly
(
coefs
,
r
);
EXPECT_LE
(
prec
,
1e-6
);
EXPECT_EQ
(
4
,
(
int
)
r
.
total
());
EXPECT_EQ
(
4
,
r
.
total
());
//std::cout << "Preciseness = " << prec << std::endl;
//std::cout << "roots:\n" << r << "\n" << std::endl;
ASSERT_EQ
(
CV_32FC2
,
r
.
type
());
...
...
@@ -2388,7 +2388,7 @@ TEST(Core_SolvePoly, regression_5599)
double
prec
;
prec
=
cv
::
solvePoly
(
coefs
,
r
);
EXPECT_LE
(
prec
,
1e-6
);
EXPECT_EQ
(
2
,
(
int
)
r
.
total
());
EXPECT_EQ
(
2
,
r
.
total
());
//std::cout << "Preciseness = " << prec << std::endl;
//std::cout << "roots:\n" << r << "\n" << std::endl;
ASSERT_EQ
(
CV_32FC2
,
r
.
type
());
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录