当前位置: 首页 > wzjs >正文

7k网站怎么做指数基金有哪些

7k网站怎么做,指数基金有哪些,牛b插网站建设,wordpress 网站白屏本文的目的是实现高精度的3D圆弧拟合,若对精度要求不高,可使用PCL的圆拟合接口,参见 PCL拟合空间3D圆周 fit3DCircle-CSDN博客 ---------------------------------------------------------------------------------------------------------…

本文的目的是实现高精度的3D圆弧拟合,若对精度要求不高,可使用PCL的圆拟合接口,参见

PCL拟合空间3D圆周 fit3DCircle-CSDN博客

 --------------------------------------------------------------------------------------------------------------

实现思路

1)RANSAC拟合平面,得到平面模型,去掉离群点;

2)根据平面模型,构建新的坐标系:以源点云中心为坐标原点,以与平面法向量正交的两个单位正交向量分别作为X轴和Y轴正方向,将源点云投影至此坐标系XOY平面,得到2D圆弧点云;

3)拟合2D圆弧点云,得到圆心点和半径;参见

4)将圆心点结合2)中的坐标系,反变换至源点云坐标系中,得到3D圆弧圆心坐标,3D圆弧的半径值与3)的半径拟合结果一致。

其中,

1)的实现参见

《并行RANSAC平面拟合(C++)-CSDN博客》

2)、4)的实现参见

《三维平面点云与二维坐标点之间的转换(投影法)_eigen 3d plane fit-CSDN博客》

3)的实现可参见

 《高精度并行2D圆弧拟合(C++)-CSDN博客》

代码实现

依赖库包括 Eigen + GLM + Ceres-2.1.0 + glog-0.6.0 + gflag-2.2.2

给出部分关键的实现代码(其余接口代码在参考链接中已给出)

common.h

#pragma once
#include<glm/glm.hpp>
#include<glm/ext.hpp>
#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
#include<Eigen/Dense>typedef glm::dvec3 Point3d;
typedef glm::dvec2 Point2d;
typedef glm::dvec2 Vec2d;
typedef glm::dvec3 Vec3d;Point3d calculateCenter(const std::vector<Point3d>& input);

common.cpp

#include"common.h"Point3d calculateCenter(const std::vector<Point3d>& input) {Point3d mid{};if (input.empty()) return mid;for (const auto& p : input) {mid.x += p.x;mid.y += p.y;mid.z += p.z;}mid.x /= input.size();mid.y /= input.size();mid.z /= input.size();return mid;
}

 Coord2DTransformer.h

#pragma once
#include<vector>
#include<glm/glm.hpp>
#include<ransac_plane.h>
#include"common.h"double angle_between_vectors(const glm::dvec3& v1, const glm::dvec3& v2);class Coord2DTransformer
{
public:void SetData(std::vector<Point3d>& input){// fit_plane参见博客《CGAL散乱点拟合最小二乘平面(3D平面拟合,基于Eigen)》// https://blog.csdn.net/xmyzqs1212/article/details/142742841int minInliers = std::floor(input.size() * 0.66666);Plane3D plane = parallelRansacFitPlane(input, 10000, 0.1, minInliers, 4, 0.8).param;centroid = calculateCenter(input);// 使用并行RANSAC拟合平面//PlaneModel plane = parallelRansacFitPlane(points, 10000, 0.1, 300, 4, 0.8);Vec3d norm = plane.normal();Vec3d arbitrary(1, 0, 0);auto angle = angle_between_vectors(norm, arbitrary);// 避免任意选取的向量与平面法向量方向一致(方向一致没办法通过向量积计算正交向量)if (angle < 1.0 || angle > 179) {arbitrary = Vec3d(0, 1, 0);}basis1 = glm::normalize(glm::cross(norm, arbitrary));basis2 = glm::normalize(glm::cross(norm, basis1));points2d.resize(input.size());for (int i = 0; i < input.size(); i++){Vec3d v = input[i] - centroid;points2d[i][0] = glm::dot(v, basis1);points2d[i][1] = glm::dot(v, basis2);}}Point3d calcCoord3D(double x, double y){auto v = x * basis1 + y * basis2;return Point3d(centroid.x + v.x, centroid.y + v.y, centroid.z + v.z);}void calcCoord3D(const std::vector<Vec2d>& pts2d, std::vector<Point3d>& result){result.resize(pts2d.size());for (int i = 0; i < pts2d.size(); i++){result[i] = calcCoord3D(pts2d[i][0], pts2d[i][1]);}}std::vector<Vec2d> points2d;
private:Vec3d basis1;Vec3d basis2;Point3d centroid;
};

Coord2DTransformer.cpp

#include "Coord2DTransformer.h"
#include<glm/ext.hpp>double angle_between_vectors(const glm::dvec3& v1, const glm::dvec3& v2)
{double dot_product = glm::dot(v1, v2);double magnitude_v1 = glm::length(v1);double magnitude_v2 = glm::length(v2);double cos_angle = dot_product / (magnitude_v1 * magnitude_v2);// 确保cos_angle在[-1, 1]范围内,避免浮点数误差cos_angle = std::max(-1.0, std::min(1.0, cos_angle));return std::acos(cos_angle) / glm::pi<double>() * 180.0; // 返回角度
}

main.cpp 

int main()
{auto points3d = generateNoisyArc3D(Point3d(100.0, 77.0, 55.2), 20.0,Vec3d(2, 0, 1), 200, 10, 200, 0.01);Coord2DTransformer transformer;transformer.SetData(points3d);savePointCloudToTxt(points3d, "points3d.txt");savePointCloudToTxt(transformer.points2d, "points2d.txt");//auto points = generateNoisyArc2D(Point2d(100.0, 77.0), 2.0, 20, 130, 200, 0.01);auto model = parallelRansacFitCircle2D(transformer.points2d, 1000, 0.1, 0, 4, 0.99);Point3d newCenter = transformer.calcCoord3D(model.param.center.x, model.param.center.y);std::cout << model.param << std::endl;std::cout << model.inliers.size() << std::endl;return 0;
}

http://www.dtcms.com/wzjs/195765.html

相关文章:

  • 网上学做网站网络营销的作用
  • 开封市网站开发公司近期国内热点新闻事件
  • 论坛建立网站头条发布视频成功显示404
  • 从化网站建设推广活动推广朋友圈文案
  • 网站免费虚拟空间新浪舆情通
  • 网站做的支付宝接口吗网络营销主要做什么
  • app网站建站系统策划方案企业网站推广效果指标分析
  • 建设银行官方网站诚聘英才网络营销简介
  • 长沙营销型海淀区seo搜索引擎
  • 广东网站推广域名注册时间查询
  • 优化公司怎么优化网站的小程序开发系统
  • 网站后台制作这么做信阳网站seo
  • 怎么做各个地图网站的认证发帖推广百度首页
  • 北京做网站建设的公司哪家好百度电话怎么转人工
  • 合肥网站制作前3名的旅游网站的网页设计
  • 手机网站开发方案关键词优化怎么操作
  • 企业手机网站建设渠道谷歌推广效果怎么样
  • 成都中小企业网站建设公司seo推广软件费用
  • 专做农产品跨境的网站有b站2023推广网站
  • 昭通市公安局网站是谁做的网络营销与直播电商
  • 班级网站html代码宁波网站推广方案
  • 天津小型企业网站设计方案互联网广告管理暂行办法
  • 南昌网站建设公司特色橘子seo
  • 电子商务网站设计原理真题答案免费网站推广软文发布
  • wordpress二级目录seo营销培训咨询
  • 秦皇岛网站开发进入百度一下官网
  • WordPress网站封装app教程邯郸网站建设优化
  • 天河网站建设制作厦门seo公司到1火星
  • 微信h5页面制作模板大连网络营销seo
  • 免费拥有自己的网站搜狗收录提交入口