无法理解绘图程序中的错误答案

Can't understand wrong answer in graphing program

本文关键字:错误 答案 程序 绘图      更新时间:2023-10-16

有一个问题,它们在图形上有点(~100个),并且它们都旋转了一定量,除了其中一个。因此,我通过取从第一组点的中心的距离以及从第二组点的中心的距离来解决这个问题,然后,在比较它们之后,一组将没有匹配的距离 - 这将是错误的点。

    #include <iostream>
#include <cmath>
#include <math.h>
using namespace std;
int main()
{
int star1, star2;
cin>>star1;
int x1[star1], y1[star1];
for (int i=0; i<star1; i++)
{cin>>x1[i]>>y1[i];}
cin>>star2;
int x2[star2], y2[star2];
for (int i=0; i<star2; i++)
{cin>>x2[i]>>y2[i];}
int d1[star1], d2[star2];
for (int i=0; i<star1; i++)
{d1[i]=sqrt(x1[i]*x1[i]+y1[i]*y1[i]);
 d2[i]=sqrt(x2[i]*x2[i]+y2[i]*y2[i]);
}
int dis=0; //the ones furthest from the center will be gone
if (star1>star2)
 {for (int i=0; i<(star1-star2); i++)
 {if (d1[i]<d1[i+1])
 {dis=i+1;} }
 for (int i = dis; i < star1; i++)
{d1[dis] = d1[dis+1];
d1[star1-1] = 0;}
}
 else if (star2>star1)
 {for (int i=0; i<(star2-star1); i++)
 {if (d2[i]<d2[i+1])
 {dis = i+1;} }
for (int i = dis; i < star2; i++)
{d2[dis] = d2[dis+1];
d2[star2-1] = 0;}
 }
int one, two;
for (int begin=0; begin<star1; begin++)
{ 
for (int i=0; i<star2; i++)
 {if (d1[begin]==d2[i])
 {one=begin; two=i;
 goto finish;}}
  }
  finish:
  cout<<one<<" "<<two;
  }

原始问题:http://www.codeabbey.com/index/task_view/wandering-star是我的代码有问题,还是我的解释有问题?

我看到你方法的第一个问题是你假设旋转点是原点。如果集合围绕不同的点旋转怎么办?

另外,在我看来,您发布的链接中的提示显示第二张图像与第一张图像略有旋转和轻微偏移。这意味着两组的旋转点可能不同。另外,请注意,问题陈述表明边缘附近的星星可能会离开图像空间。此案需要考虑。

尝试思考如何在每个图像中找到旋转点。它有什么属性,有什么方法可以使用几何属性来隔离它?如果您能够获得两个旋转点,您将能够按照建议的解决方案进行类似的操作。

int d1[star1], d2[star2];

d2数组的大小为 star2

for (int i=0; i<star1; i++)
  {if (d1[begin]==d2[i])

内部循环 i 从 0 迭代到 star1-1,但d2数组的大小star2

这似乎是错误。这可能应该是:

for (int i=0; i<star2; i++)
  {if (d1[begin]==d2[i])