c++ - 3个圆的交点不正确c ++
问题描述
我正在尝试使用 c++ 找到 3 个圆的公共交点(x,y)。但我没有得到正确的输出。我在我的代码中做错了什么?这是我用来计算公共交点的程序。这里首先我计算了来自二次方程的两个像素的交集,如(x0,y0),(x1,y1)。之后考虑到第三个圆至少在一个点相交,我在第三个圆中使用了这两个交点,以满足第三个圆的为准,它被认为是三个圆的共同交点。我做错什么了吗?
vector<pix> obj; struct pix { int x; int y; };
auto p0 = obj[stoi(r[2])][stoi(r[0])];
auto p1 = obj[stoi(r[2])][stoi(r[1])];
int ax = p1.x-p0.x; int ay = p1.y-p0.y;
int bx = -ay; int by = ax;
pix pv;
pv.x = p1.x+bx; pv.y = p1.y+by;
OrigImg.copyTo(cv_ptr->image);
for(auto pi : obj[stoi(r[2])]) {
float p0pi = sqrt(pow(p0.x-pi.x,2)+pow(p0.y-pi.y,2));
float p1pi = sqrt(pow(p1.x-pi.x,2)+pow(p1.y-pi.y,2));
float pvpi = sqrt(pow(pv.x-pi.x,2)+pow(pv.y-pi.y,2));
float a1 = 2*(p1.x-p0.x);
float b1 = 2*(p1.y-p0.y);
float c1 = p0.x*p0.x-p1.x*p1.x+p0.y*p0.y-p1.y*p1.y-p0pi*p0pi+p1pi*p1pi;
float a = a1*a1+b1*b1;
float b = 2*(b1*c1 + b1*a1*p0.x - p0.y*a1*a1);
float c = c1*c1+2*c1*p0.x*a1 + a1*a1*(p0.x*p0.x + p0.y*p0.y - p0pi*p0pi);
int y0 = -(b+sqrt(b*b-4*a*c))/2*a;
int y1 = (b+sqrt(b*b-4*a*c))/2*a;
int x0 = -(b1*y0+c1)/a1;
int x1 = -(b1*y1+c1)/a1;
int x,y;
cout<<"hello"<<x0<<"\t"<<y0<<"\t"<<x1<<"\t"<<y1<<endl;
cout<<pow(x0-pv.x,2)+pow(y0-pv.y,2)<<"\t"<<pvpi*pvpi<<"\t"<<
pow(x1-pv.x,2)+pow(y1-pv.y,2)<<"\t"<<pvpi*pvpi<<endl;
if(sqrt(pow(x0-pv.x,2)+pow(y0-pv.y,2))==pvpi) {
x = x0; y = y0;
}
else if(sqrt(pow(x1-pv.x,2)+pow(y1-pv.y,2))==pvpi) {
x = x1; y = y1;
}
if(x>=0 && x<OrigImg.rows && y>=0 && y<OrigImg.cols) {
cv_ptr->image.at<cv::Vec3b>( y, x )[2] = 0;
cv_ptr->image.at<cv::Vec3b>( y, x )[1] = 0;
cv_ptr->image.at<cv::Vec3b>( y, x )[0] = 0;
}
}
}
image_pub_.publish(cv_ptr->toImageMsg());
这里 p0, p1, pv 是 3 个不同位置的圆的位置。在这里,我正在尝试执行此操作,我已将属于一个对象的像素保存在地图 obj[obj_index][pixel_index] 中,其中像素索引是属于该像素的每个唯一像素的索引,而 obj_index 是每个唯一对象的索引. 应用一些模式匹配算法后,我得到了 r[0]=obj_index, r[1]=p0 index, r[2]=p1 index of object。现在我试图做的是可视化和检查当前分析的对象中存在哪些像素wrt先前保存的对象。这里的输出如下:
hello 150492 150336 -150180 -150336
4.51763e+10 873 4.52274e+10 873
解决方案
推荐阅读
- bash - 自动响应 npm/npx 命令行安装中的提示
- python - tkinter 居中两个或多个小部件
- javascript - 向下滚动网站后显示 div
- php - 如何在 bash / php 脚本中执行命令?
- angular - How to create a mat-tree from firebase data in angular
- python - 如何在 Windows 10 中使用 python3.9 检查文件是否在我的 python 脚本之外的另一个进程中主动打开?
- php - 强制显示购物车
- vmware-workstation - 在 CentOS 8 上安装 GlusterFS 不起作用
- web - IIS 上的某些网站已关闭,无法启动它们。其他运行良好
- javascript - 'TypeError:无法读取未定义的属性'不正确',但console.log显示没有未定义的内容