double cal_curvature_radius(const Eigen::Vector2d& p0,
const Eigen::Vector2d& p1,
const Eigen::Vector2d& p2) {
double aa = (p1 - p2).squaredNorm();
double bb = (p2 - p0).squaredNorm();
double cc = (p0 - p1).squaredNorm();
double a = std::sqrt(aa);
double b = std::sqrt(bb);
double c = std::sqrt(cc);
double cos_b = (aa + cc - bb) / (2 * a * c);
if (std::abs(cos_b) >= 1.0) {
return 65504.0; // 直线,返回一个很大值即可
}
double sin_b = std::sqrt(1 - cos_b * cos_b);
return 0.5 * b / sin_b;
}
计算曲率半径 C++实现
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 在数学中,矩阵的“谱半径”是指其特征值的模集合的上确界。换言之,对于给定的 n 个复数空间的特征值 { a1...
- 我的PAT系列文章更新重心已移至Github,欢迎来看PAT题解的小伙伴请到Github Pages浏览最新内容。...
- 为什么需要数值积分的C/C++实现 现在比较流行将Python作为科学计算语言来使用, 但是在使用Python的过...